2016-07-14 5 views
0

HTTPS(証明書が内部CAによって署名されている)を介して到達可能な内部Satisサーバを設定しようとしています。 Linuxでは、CAのルート証明書が証明書ストア(例:/etc/ssl/certs/ca-certificates.crt)に追加されると、すべて正常に動作します。 私のMacでは、証明書をOS X Keychainに追加した後でも、「コード1でSSL操作が失敗しました」というエラーが表示されます。 PHPでlibcurlをコマンドラインで使用すると、HTTPS URLを取得できますが、Composerとfile_get_contents(Composerで使用される)は常に「コード1で失敗したSSL操作」エラーをスローします。HTTPS(内部CA)でSatisを使用すると、Composerが失敗する

私は "openssl.capath"をphp.iniに指定できますが、パスを指定せずにCurlで動作するのはなぜですか?

答えて

1

私は最終的に間違っているものを考え出した:それは直接(私はしましたOS Xのキーチェーンを使用したため、パブリックCAによって署名された証明書だけでなく、社内CAと連携していますので、

カールは、はsecureTransportの代わりに、OpenSSLを使用しています前にSystemキーチェーンに追加した)。

file_get_contentsは、/usr/local/etc/openssl/cert.pemにある独自のCAバンドルを使用するOpenSSLを使用しています。

/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に見ていないので、私はcert.pemのパスにopenssl.cafile php.iniのプロパティを設定する必要がありました:

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

関連する問題