web-dev-qa-db-ja.com

curlが自己署名SSL証明書を認識しないのはなぜですか?

PEMファイルを/ usr/local/share/ca-certificates /にコピーし、update-ca-certificatesを実行し、結果の証明書が/etc/ssl/certs/ca-certificates.crtに含まれていることを確認しました。 curl-config--caによって出力されたファイル。また、openssl s_client -connect example.com:443によって印刷された証明書が、私のPEMファイルと同一であることを確認しました。それでも、「エラー:14090086:SSLルーチン:SSL3_GET_SERVER_CERTIFICATE:証明書の検証に失敗しました」というメッセージが表示され続けます。これは、 http://curl.haxx.se/docs/sslcerts.html で説明されているcurlの--cacertオプションを使用して、使用する証明書を指定した場合でも発生します。

Curl -kを使用して証明書の検証を完全に無効にすると機能しますが、SSLを適切にテストすることになっているテストハーネスを作成しようとしているため、これは実行したくありません。

Lynxで同じURLにアクセスすると、正常に機能します。通常、SSLエラーがあると文句を言います。しかし、TornadoのAsyncHTTPClientにlibcurlの代わりにLynxを使用させる方法が見つからない限り、このテストハーネスにLynxを使用することはできません。そして、自己署名証明書をインストールすることはLynxを満足させるが、カールを満足させないことは意味がないようです。

Vagrantを利用したVirtualBoxでUbuntu12.04LTSを使用しています。カール7.22.0があります。 SSL終了プロキシは同じマシンで実行されているnginx/13.13であり、ドメイン名は/ etc/hostsのエントリによって127.0.0.1を指します。

何が問題なのかについての手がかりはありますか?ありがとう。

22
Silas S. Brown

cURL を使用して CA署名付き証明書 を使用していないHTTPSサイトを取得すると、次の問題が発生します。

curl https://example.selfip.com
curl: (60) SSL certificate problem, verify that the CA cert is OK. Details:
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
More details here: http://curl.haxx.se/docs/sslcerts.html

-kオプションを使用してこれを簡単に克服できますが、より安全で永続的な解決策があります。

ステップ1
OpenSSLインストールで使用するディレクトリを特定します。

openssl version -d
OPENSSLDIR: "/usr/lib/ssl"

ステップ2
そのディレクトリに移動し、ディレクトリの内容を一覧表示します。 certsというディレクトリが表示されます。

cd /usr/lib/ssl && ls -al

ステップ3
そのディレクトリに移動します。

cd certs

ディレクトリの内容を一覧表示します。シンボリックリンクから、証明書が実際に/usr/share/ca-certificatesに格納されていることがわかります。

ステップ4
/usr/share/ca-certificatesディレクトリに移動し、そこに自己署名証明書を追加します(例:your.cert.name.crt)

ステップ5
/etcディレクトリに移動し、ファイルca-certificates.confを編集します。

root@ubuntu:# cd /etc
root@ubuntu:# nano ca-certificates.conf

your.cert.name.crtをファイル(ca-certificates.conf)に追加して保存します。

最後のステップ:

プログラムupdate-ca-certificates –freshを実行します。
注:コマンドを実行する前に、/etc/ssl/certsをバックアップすることをお勧めします。

root@ubuntu:# update-ca-certificates --fresh
Clearing symlinks in /etc/ssl/certs...done.
Updating certificates in /etc/ssl/certs....done.
Running hooks in /etc/ca-certificates/update.d....done.

ターゲットHTTPSサイトでcurlを使用してテストすると、正常に機能するはずです。

ソース

24
Pedro Lobito