web-dev-qa-db-ja.com

curlを使用する場合、セキュリティ上の理由からcacert.pemを最新の状態に保つにはどうすればよいですか?

CURLとPHPの内部curlコマンドで使用するためにルート証明書を最新の状態に保ちたいのですが、適切な安全な接続に必要な現在のファイルをダウンロードして最新の状態に保つためのパラメーターは現在ありません。

また、cacert.pem(リモート接続を検証するためのPEMエンコード証明書チェーン)という名前のファイルを必要とする安全な接続のためにPHPでcurlを使用する例は次のとおりです。

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://www.google.com");
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 15);
curl_setopt($ch, CURLOPT_TIMEOUT, 15);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1);
curl_setopt($ch, CURLOPT_CAINFO, "pathto/cacert.pem");
curl_setopt($ch, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_2);
if (!($data = curl_exec($ch))) {
    echo "No data received";
} else {
    echo strlen($data) + " total byte(s)";
}
curl_close($ch);

ほとんどの人は単にCURLOPT_SSL_VERIFYPEERをfalseに設定しているので、問題を無視しますが、 これは悪いです 。次のことができます 認証局が、このファイルが最新でない場合、安全なサーバーに接続する唯一の方法は、証明書のチェックを無効にし、ピア検証を無効にすることの背後にある影響についてさらに警告することを示しています

私が要求しているのは、cacert.pemのローカルコピーを維持するための合法的な方法であり、PHPでcurlを使用して他のサーバーと通信するときに、引き続き安全に

これは外部リソースやオフサイトリンクなどの要求ではありませんが、問題の性質上、証明書チェーンが取り消されるため継続的に更新する必要があるため、これを解決する唯一の方法である可能性があります。現在まで、curl自体、php、またはphpのcurlライブラリの配布の一部としてこのファイルを取得し、それを維持し続ける方法はありません。これがcurl --update-root-caのような単純な更新コマンドが良いものではないことは落胆しますが、どのような形でも存在しません。

10
Kraang Prime

この記事を最初に書いた後(したがってこの書き直し)、維持するためにonlyの正当なソースへのリンクを直接含めることで自分の問題を解決することができましたcurlの作者が管理しているサイトで提供されているこのファイル この場所

さらに、テクノロジーが進歩するにつれて、この質問は更新され、PHPでcurlを使用し、TLS v1.2接続を強制する方法(特定のトランザクションプロバイダーが必要または推奨するものであり、これを行う方法に関する情報を提供しないでください)。

認証局に関しては、次のようないくつかの主要なルート認証局があります。

  • ノートンライフロック
  • RapidSSL
  • 解凍
  • ジオトラスト
  • コモド

だけでなく、その性質による他の当局

  • マイクロソフト
  • Mozilla
  • グーグル

これは、独自のcacert.pemを維持しようとしている人にとってはフレームになる可能性があります。適切な信頼メカニズムを維持するには、それぞれのcrlから失効リスト(違反または期限切れの証明書)をダウンロードする必要がありますが、ルート証明書チェーンをダウンロードしてそれらを使用するだけで済ますことができるはずです。 cacert.pemとしてローカルの信頼できるファイルとして。

22
Kraang Prime

cacert.pemcurlによって使用されます。証明書を信頼する最終的な権限はありませんが、Webブラウザーで使用されるリストは優れたソースです。これらのリストは、CAの変更およびセキュリティ慣行の変更により、常に更新されます。

curlの作成者は、Firefoxからcacert.pemを抽出し、サイトに適度に最新の出力を投稿できるツールを維持しています。

  • cacert.pemcurlの作成者によって生成されました
  • caextract :セキュリティを最も重視する場合は、ツールをダウンロードし、ソースコードを調べて、独自のFirefoxに対して実行します。
12
Roman Starkov