10

C アプリケーションで libcurl を使用して、セットアップした HTTPS サーバーと通信しています。そのサーバーで、curl で使用したい自己署名証明書を生成しました。

CURLOPT_SSL_VERIFYPEER を 0 に設定して SSL 検証をバイパスすることは承知していますが、生成された証明書を curl の「有効な」CA 証明書に追加したいと考えています。

CURLOPT_CAPATH と CURLOPT_SSLCERT をサーバー SSL 公開鍵の場所に設定しようとしましたが、検証に失敗します。

libcurl が正常に検証できるように、独自の CA/自己署名証明書を追加するにはどうすればよいですか?

4

2 に答える 2

4

自己署名証明書を追加するには、CURLOPT_CAINFOを使用します

サイトの SSL 公開証明書を取得するには、次を使用します。

openssl s_client -connect www.site.com:443 | tee logfile

----BEGIN CERTIFICATE----とで示した部分が証明書です
---END CERTIFICATE----

その証明書をファイルに保存し、次のように curl を使用します。

CURL* c = curl_easy_init();
curl_easy_setopt(c, CURLOPT_URL, "https://www.site.com");
curl_easy_setopt(c, CURLOPT_CAINFO, "/path/to/the/certificate.crt");
curl_easy_setopt(c, CURLOPT_SSL_VERIFYPEER, 1);
curl_easy_perform(c);
curl_easy_cleanup(c);
于 2014-07-08T18:38:36.143 に答える
0

まず、「認証局」ファイルと「証明書」ファイルを混在させて混乱させます。

libcurl が正常に検証できるように、独自の CA/自己署名証明書を追加するにはどうすればよいですか?

これは、上記の回答に対する補足的な回答と見なされる場合があります。libcurl が CA によって生成された Web サイトの証明書を正常に検証できるように、自己署名 CA (すべてのルート CA が自己署名) を追加する場合は、読み続けてください。

CURLOPT_CAINFO を使用して、検証するサイトの (非 CA) 証明書を生成するときに使用された「認証局」ファイル (CA) を渡す必要があります。

(このオプションが非CA証明書を渡すことで機能するかどうかはわかりません。ドキュメントはこれについて明確ではなく、前の回答には2つの賛成票があるため、誰かがテストした場合はコメントしてください)

ルート CA ではない場合に備えて、使用された CA を含む認証局チェーン ファイルを渡すこともできます。

ソリューションをテストするのに役立つ、私が見つけた小さなチュートリアルを次に示します。

プライベート ルート CA の作成: http://www.flatmtn.com/article/setting-openssl-create-certificates

サイト証明書の作成: http://www.flatmtn.com/article/setting-ssl-certificates-apache

于 2016-05-16T07:52:17.220 に答える