curlHTTPSサーバーに接続できない問題が発生しています。
$ 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.cnfCentOS VMからUbuntuマシンにファイルをコピーしても、違いはありません。これを引き起こしている可能性のある環境または.rcファイルに明らかなものはありません。
私が間違っていることはありますか?これは機能する必要がありますか?つまり、opensslとcurlはインストールされたCAをコマンドラインから自動的に取得しますか?これはどのように構成されますか?ありがとう!
別のデータポイント:13サーバーのクリーンインストールではcurl、証明書ファイルを取得して正常に動作します。openssl s_clientまだしません。なぜでしょうか?