curl
HTTPSサーバーに接続できない問題が発生しています。
$ curl https://the-problem-site.com (not the real URL!)
curl: (35) error:14077458:SSL routines:SSL23_GET_SERVER_HELLO:reason(1112)
1112はSSL_R_TLSV1_UNRECOGNIZED_NAME
にありssl.h
ます。
openssl s_client -connect the-problem-site.com:443
代わりに試してみると
CONNECTED(00000003)
depth=1 /C=US/O=GeoTrust, Inc./CN=GeoTrust SSL CA
verify error:num=20:unable to get local issuer certificate
verify return:0
Certificate chain
0 s:/serialNumber=xx/C=xx/ST=xx/L=xxxx/O=xx/OU=xx/CN=the-problem-site.com
i:/C=US/O=GeoTrust, Inc./CN=GeoTrust SSL CA
1 s:/C=US/O=GeoTrust, Inc./CN=GeoTrust SSL CA
i:/C=US/O=GeoTrust Inc./CN=GeoTrust Global CA
つまり、問題は信頼できないこと/C=US/O=GeoTrust Inc./CN=GeoTrust Global CA
です。ただし、その証明書はインストールされています:/etc/ssl/certs/GeoTrust_Global_CA.pem
あり、代わりに実行した場合
openssl s_client -connect the-problem-site.com:443 -CAfile /etc/ssl/certs/GeoTrust_Global_CA.pem
その後、すべてが機能します。証明書はまた、ハッシュという名前のファイルとして存在しb0f3e76e.0
、それがでますca-certificates.crt
。ただし、私の知る限りでは、curlもopensslも証明書を読み取ろうとしません。もし私がstrace
それらなら、エラーが発生したとしても、/usr/lib/ssl/certs
それを読んだり/etc/ssl/certs
、まったく読んだりする試みはありません。ただし、openssl.cnfは読み取ります。走りましたupdate-ca-certificates
。
これは、openssl 0.9.8kを備えたUbuntu 10.04です。2つの別々のインストールで問題を再現できます(一方が他方のクローンである可能性もあります)。openssl 0.9.8eを使用してCentOS VMで同じテストを試行すると、正常に機能し、証明書ファイルをで読み取っていることを確認できますstrace
。Ubuntu stracesの同じ時点で同等のファイルアクセスはありません。openssl.cnf
CentOS VMからUbuntuマシンにファイルをコピーしても、違いはありません。これを引き起こしている可能性のある環境または.rcファイルに明らかなものはありません。
私が間違っていることはありますか?これは機能する必要がありますか?つまり、opensslとcurlはインストールされたCAをコマンドラインから自動的に取得しますか?これはどのように構成されますか?ありがとう!
別のデータポイント:13サーバーのクリーンインストールではcurl
、証明書ファイルを取得して正常に動作します。openssl s_client
まだしません。なぜでしょうか?