php - 将 Satis 与 HTTPS(内部 CA)结合使用时,Composer 失败

标签 php ssl composer-php satis

我正在尝试设置我们的内部 Satis 服务器,它应该可以通过 HTTPS 访问(证书由内部 CA 签名)。 在 Linux 上,一旦将 CA 的根证书添加到证书存储(例如/etc/ssl/certs/ca-certificates.crt),一切都会按预期进行。 但是在我的 Mac 上,即使在将证书添加到 OS X Keychain 后,我仍收到“SSL 操作失败,代码 1”错误。 在命令行上 curl 并在 PHP 中使用 libcurl 可以获取 HTTPS URL,但 Composer 和 file_get_contents(由 Composer 使用)总是抛出“SSL 操作失败,代码 1”错误。

我知道我可以在我的 php.ini 中指定“openssl.capath”,但为什么它在不指定路径的情况下与 Curl 一起工作?

最佳答案

我终于想通了:

Curl 使用 SecureTransport 而不是 OpenSSL,因此它直接使用 OS X Keychain,因此可以使用由公共(public) CA 和我们的内部 CA 签名的证书(我之前已将其添加到系统钥匙串(keychain))。

file_get_contents 使用 OpenSSL,OpenSSL 使用它自己的位于 /usr/local/etc/openssl/cert.pem 的 CA 包。

由于默认情况下/usr/local/etc/openssl/cert.pem 仅包含公共(public) CA,我必须将证书从我的钥匙串(keychain)(系统和系统根)导出到 OpenSSL 的 cert.pem:security查找证书-a -p/Library/Keychains/System.keychain/System/Library/Keychains/SystemRootCertificates.keychain | sudo tee/usr/local/etc/openssl/cert.pem

现在 file_get_contents() 适用于内部和外部证书/CA。

但是 Composer 没有查看 /usr/local/etc/openssl/cert.pem,所以我不得不将 openssl.cafile php.ini 属性设置为 的路径证书.pem:

[openssl] openssl.cafile =/usr/local/etc/openssl/cert.pem

关于php - 将 Satis 与 HTTPS(内部 CA)结合使用时,Composer 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38379651/

相关文章:

php - 轮播播放列表中的缩略图顺序

php - 使用php表单将图片上传到mysql

ssl - 导入到根存储中的非自签名证书是否需要(自签名)颁发者也导入到根存储中?

python - Python 中的 SSL : Why it doesn't send certificate to server?

asp.net - Asp.NET Web 应用程序中的 session 标识符未更新

php - 无法 self 更新 Composer ?

docker - 在 docker 容器中运行 Composer install

php - 安装 Composer 错误 : Incorrect function

php - laravel 一对一关系

php - 在没有 Composer 的情况下安装 php-css-parser