使用带有HTTPS的Satis(内部CA)时,Composer失败

时间:2016-07-14 16:35:31

标签: 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?

1 个答案:

答案 0 :(得分:1)

我终于弄明白了什么:

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

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

由于/usr/local/etc/openssl/cert.pem默认只包含公共CA,因此我必须将证书从我的Keychain(系统和系统根)导出到OpenSSL的cert.pem:{{1} }

现在security find-certificate -a -p /Library/Keychains/System.keychain /System/Library/Keychains/SystemRootCertificates.keychain | sudo tee /usr/local/etc/openssl/cert.pem适用于内部证书和外部证书/ CA.

但是Composer不会查看file_get_contents(),所以我必须将openssl.cafile php.ini属性设置为/usr/local/etc/openssl/cert.pem的路径:

cert.pem