将 Satis 与 HTTPS(内部 CA)一起使用时,作曲器失败


Composer fails when using Satis with HTTPS (internal CA)

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

我知道我可以在我的 php 中指定"openssl.capath".ini但是为什么它可以在不指定路径的情况下与 Curl 一起使用?

我终于弄清楚出了什么问题:

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

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

由于/usr/local/etc/openssl/cert.pem 默认只包含公共 CA,我不得不将证书从我的钥匙串(系统和系统根)导出到 OpenSSL 的 cert.pem 中: security find-certificate -a -p /Library/Keychains/System.keychain /System/Library/Keychains/SystemRootCertificates.keychain | sudo tee /usr/local/etc/openssl/cert.pem

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

但是作曲家不研究/usr/local/etc/openssl/cert.pem,所以我不得不将openssl.cafile php.ini属性设置为cert.pem的路径:

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