cURL および PHP の内部コマンドで使用するためにルート証明書を最新の状態に保ちたいのですがcurl
、現在、適切な安全な接続に必要な現在のファイルをダウンロードして最新の状態に保つためのパラメーターはありません。
curl
また、(リモート接続を検証するための PEM エンコードされた証明書チェーン)という名前のファイルを必要とする安全な接続のために PHPで使用する例はcacert.pem
次のとおりです。
$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 に設定しているため、問題を無視していますが、これは悪いことです。このファイルが最新でない場合、安全なサーバーに接続する唯一の方法は証明書のチェックを無効にすることであり、ピア検証を無効にすることの影響についてさらに警告することを証明機関が示している場所をここで確認できます。
私が要求しているのは、 のローカル コピーを維持する正当な方法です。これにより、PHP をcacert.pem
使用して他のサーバーと通信するときに、引き続き安全に通信を行うことができます。curl
これは、外部リソースやオフサイト リンクなどの要求ではありませんが、問題の性質上、証明書チェーンが失効するため継続的な更新が必要になるため、これが唯一の解決方法である可能性があります。今日まで、curl 自体、php、または php の curl ライブラリの配布の一部としてこのファイルを取得し、維持し続ける方法はありません。これが単純な更新コマンドのようなものではないことは落胆さcurl --update-root-ca
せられますが、いかなる形でも存在しません。