web-dev-qa-db-ja.com

https(SSL)のCurlコマンド

次のCURLコマンドを実行しようとしていますが、SSL証明書エラーが表示されます。

curl https://example.com:8443/cli/agentCLI -u username:password

エラー:

curl:(60)SSL証明書の問題。CA証明書に問題がないことを確認してください。詳細:エラー:14090086:SSLルーチン:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed詳細はこちら: http://curl.haxx.se/docs/sslcerts.html

curlはデフォルトで、認証局(CA)公開鍵(CA証明書)の「バンドル」を使用してSSL証明書の検証を実行します。デフォルトのバンドルはcurl-ca-bundle.crtという名前です。 --cacertオプションを使用して代替ファイルを指定できます。このHTTPSサーバーがバンドルで表されるCAによって署名された証明書を使用する場合、証明書の問題が原因で証明書の検証が失敗した可能性があります(有効期限が切れているか、URLのドメイン名と一致しない可能性があります)。 curlによる証明書の検証を無効にする場合は、-k(または--insecure)オプションを使用します。

SSL URLを許可するためにこの問題を修正するにはどうすればよいですか?

9
Kalaiyarasan

サーバーで自己署名証明書を使用している場合は、次を使用できます。

curl -k https://example.com:8443/cli/agentCLI -u username:password

ただし、通信がセキュリティで保護されなくなり、あらゆる種類の中間者攻撃が可能になるため、サーバーへの非SSL接続を使用するよりも優れていることに注意してください。

あなたへの私のアドバイスは、サーバーから.pemをダウンロードすることです:

  • サーバーにアクセスできる場合は、通常/etc/ssl/にあります
  • またはあなたがダウンロードできること、

使用して:

echo "HEAD / HTTP/1.0\n Host: example.com\n\n EOT\n" | openssl s_client -prexit -connect example.com:8443 > cert.pem

コンピューターに、ファイル内のBEGIN CERTIFICATEEND CERTIFICATEの間の部分(BEGIN/END行を含む)のみを保持し、--cacertオプションのパラメーターとしてそれをダウンロードすることもできます。 。その後、接続するたびにサーバーを認証します!

curl --cacert cert.pem https://example.com:8443/cli/agentCLI -u username:password

自分の自己署名サーバーでテストすると、うまく機能しています:

% openssl s_client -showcerts -connect example.com:443 </dev/null 2>/dev/null | sed -n '/-----BEGIN CERTIFICATE-----/,/-----END CERTIFICATE-----/p' | grep -m1 -B-1 -- '-----END CERTIFICATE-----'  > cert.pem
% curl --cacert cert.pem https://example.com

動作するはずの例:

% openssl s_client -showcerts -connect git.cryptolib.org:443 </dev/null 2>/dev/null | sed -n '/-----BEGIN CERTIFICATE-----/,/-----END CERTIFICATE-----/p' | grep -m1 -B-1 -- '-----END CERTIFICATE-----'  > cert.pem
% curl --cacert cert.pem https://git.cryptolib.org
curl: (51) SSL: certificate verification failed (result: 5)

しかし、悲しいことにそうではありません。

提案されたように、私もやろうとしました こちら

% openssl x509 -inform PEM -in cert.pem -text -out certdata.pem
% curl --cacert certdata.pem https://git.cryptolib.org

私がテストに使用しているサイト(git.cryptolib.org)は自己署名されていないため、これは機能していませんが、CACertチェーンからのものであり、これに続くCACertルート証明書を使用して解決できます [〜#〜] faq [〜#〜]


digへのいくつかのリソース:

しかし、これまで決定的な答えはありません:-s

15
zmo