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
のような単純な更新コマンドが良いものではないことは落胆しますが、どのような形でも存在しません。
この記事を最初に書いた後(したがってこの書き直し)、維持するためにonlyの正当なソースへのリンクを直接含めることで自分の問題を解決することができましたcurl
の作者が管理しているサイトで提供されているこのファイル この場所
さらに、テクノロジーが進歩するにつれて、この質問は更新され、PHPでcurl
を使用し、TLS v1.2接続を強制する方法(特定のトランザクションプロバイダーが必要または推奨するものであり、これを行う方法に関する情報を提供しないでください)。
認証局に関しては、次のようないくつかの主要なルート認証局があります。
だけでなく、その性質による他の当局
これは、独自のcacert.pemを維持しようとしている人にとってはフレームになる可能性があります。適切な信頼メカニズムを維持するには、それぞれのcrlから失効リスト(違反または期限切れの証明書)をダウンロードする必要がありますが、ルート証明書チェーンをダウンロードしてそれらを使用するだけで済ますことができるはずです。 cacert.pemとしてローカルの信頼できるファイルとして。
cacert.pem
はcurl
によって使用されます。証明書を信頼する最終的な権限はありませんが、Webブラウザーで使用されるリストは優れたソースです。これらのリストは、CAの変更およびセキュリティ慣行の変更により、常に更新されます。
curl
の作成者は、Firefoxからcacert.pem
を抽出し、サイトに適度に最新の出力を投稿できるツールを維持しています。
curl
の作成者によって生成されました