【问题标题】:Composer fails when using Satis with HTTPS (internal CA)将 Satis 与 HTTPS(内部 CA)一起使用时,Composer 失败
【发布时间】:2016-07-14 16:35:31
【问题描述】:

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

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

【问题讨论】:

    标签: php ssl composer-php satis


    【解决方案1】:

    我终于弄明白了:

    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。

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

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

    【讨论】:

      猜你喜欢
      • 2016-12-23
      • 1970-01-01
      • 2017-12-23
      • 1970-01-01
      • 1970-01-01
      • 2019-04-28
      • 1970-01-01
      • 2015-01-10
      • 2018-02-11
      相关资源
      最近更新 更多