175

私は Curl と Cacerts の世界に不慣れで、サーバーへの接続中に問題に直面しています。基本的に、あるマシンから別のマシンへの https 経由の接続をテストする必要があります。マシン A (Linux マシン) から接続する必要がある URL があります。コマンド プロンプトでこれを試しました。

cmd> curl https://[my domain or IP address]

そして以下を得ました:

curl: (60) SSL certificate problem, verify that the CA cert is OK. Details:
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed

インターネットでいくつかの記事を読んで、私はこれをしました:

openssl s_client -connect <domain name or Ip address>:443

サーバー証明書を含むいくつかの応答を取得しました(内部-----BEGIN CERTIFICATE----- and -----END CERTIFICATE-----)。

ここから次はどうしよう。BEGIN CERTIFICATE & END CERTIFICATEテキストをコピーして内部に貼り付け、ファイルに保存する必要があると思い ます。しかし、ファイルの種類は何ですか?.pem.crt?.. その後どうすればいいですか?

私はこれを試しました-内部のテキストをコピーしBEGIN CERTIFICATE & END CERTIFICATEてファイルに保存しました.crt-名前を付けてmy-ca.crt(ファイルと名前を付けて同じことを試みましたmy-ca.pem)、これを行いました:

cmd>curl --cacert my-ca.crt https://[my domain or IP address]

しかし、同じエラーが発生しました。

4

12 に答える 12

183

私は同じ問題を抱えていました.HTTPS経由で提供された自分のサイトからページを取得していましたが、curlは同じ「SSL証明書の問題」メッセージを出していました. -k安全でない接続を許可するフラグを呼び出しに追加することで、この問題を回避しました。

curl -k https://whatever.com/script.php

編集:問題の根本を発見しました。私は SSL 証明書を使用していましたが (StartSSL からのものですが、それはあまり重要ではないと思います)、中間証明書を適切に設定していませんでした。上記の user1270392 と同じ問題が発生している場合は、修正に頼る前に、SSL 証明書をテストcurl -kして問題を修正することをお勧めします。

于 2014-02-10T17:57:43.330 に答える
66

基本的な証明書情報

それが私の毎日のスクリプトです:

curl --insecure -vvI https://www.example.com 2>&1 | awk 'BEGIN { cert=0 } /^\* SSL connection/ { cert=1 } /^\*/ { if (cert) print }'

出力:

* SSL connection using TLSv1.3 / TLS_AES_256_GCM_SHA384
* ALPN, server accepted to use h2
* Server certificate:
*  subject: C=US; ST=California; L=Los Angeles; O=Verizon Digital Media Services, Inc.; CN=www.example.org
*  start date: Dec 10 00:00:00 2021 GMT
*  expire date: Dec  9 23:59:59 2022 GMT
*  issuer: C=US; O=DigiCert Inc; CN=DigiCert TLS RSA SHA256 2020 CA1
*  SSL certificate verify ok.
* Using HTTP2, server supports multi-use
* Connection state changed (HTTP/2 confirmed)
* Copying HTTP/2 data in stream buffer to connection buffer after upgrade: len=0
* Using Stream ID: 1 (easy handle 0x5588e1f5ae30)
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
* old SSL session ID is stale, removing
* Connection state changed (MAX_CONCURRENT_STREAMS == 100)!
* Connection #0 to host www.example.com left intact

完全な証明書情報

openssl s_client -connect www.example.com:443 </dev/null 2>/dev/null | openssl x509 -inform pem -text
于 2016-01-15T13:22:05.213 に答える
41

curl には CA 証明書が同梱されなくなったため、証明書チェーン全体を curl に提供する必要があります。cacert オプションは 1 つのファイルしか使用できないため、完全なチェーン情報を 1 つのファイルに連結する必要があります。

証明書チェーンを (たとえば、ブラウザーから) DER エンコードされたバイナリ x.509 (.cer) にコピーします。各証明書に対してこれを行います。

証明書を PEM に変換し、それらを 1 つのファイルに連結します。

openssl x509 -inform DES -in file1.cer -out file1.pem -text
openssl x509 -inform DES -in file2.cer -out file2.pem -text
openssl x509 -inform DES -in file3.cer -out file3.pem -text

cat *.pem > certRepo

curl --cacert certRepo -u user:passwd -X GET -H 'Content-Type: application/json' "https//somesecureserver.com/rest/field"

ここでこれを行う方法についてブログを書きました: http://javamemento.blogspot.no/2015/10/using-curl-with-ssl-cert-chain.html

于 2015-10-21T09:09:29.383 に答える
25

--cacertファイルを指定するために使用し.crtます。 ca-root-nss.crt例えば。

于 2013-04-30T10:03:47.180 に答える
5

ここでは、Mozilla CA 証明書をダウンロードして変換する手順が記載された CA 証明書を見つけることができます。取得ca-bundle.crtまたはcacert.pem使用したら:

curl.exe --cacert cacert.pem https://www.google.com

また

curl.exe --cacert ca-bundle.crt https://www.google.com
于 2014-12-08T17:31:21.990 に答える
1

あなたはこれを使うことができます

curl_setopt($curl->curl, CURLOPT_SSL_VERIFYPEER, false);

于 2018-03-13T09:11:29.137 に答える
1

単一の証明書ではなく、証明書チェーンが必要です。Firefox を使用して簡単に入手できます。

  1. URL を Firefox で開きます。
  2. URL の左にあるアドレス ボックスのセキュリティ アイコンをクリックします。
  3. connection not secure、 をクリックしmore informationます。securityタブの下で、 を選択view certificateし、最後までスクロールします。の横にあるPEM(チェーン)downloadを選択して、証明書のチェーンをダウンロードします。

--cacertこれで、フラグの後に curl リクエストで使用できるファイルとして証明書のチェーンができました。
curl --cacert downloaded.pem -X POST https://the-url-to-access

于 2021-06-30T13:23:25.657 に答える