Curl:SSL証明書の問題、CA証明書に問題がないことを確認してください
2006年4月7日
Curlで安全なURLを開くと、次のエラーが発生する場合があります。
SSL証明書の問題、CA証明書に問題がないことを確認してください
エラーの理由と対処方法を説明します。
エラーを取り除く最も簡単な方法は、次の2行をスクリプトに追加することです。このソリューションには、セキュリティ上のリスクがあります。
//WARNING: this would prevent curl from detecting a 'man in the middle' attack
curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, 0);
この2つのパラメーターの機能を見てみましょう。マニュアルを引用。
CURLOPT_SSL_VERIFYHOST:1は、SSLピア証明書内の共通名の存在を確認します。2は、一般名の存在を確認し、提供されたホスト名と一致することを確認します。
CURLOPT_SSL_VERIFYPEER:CURLがピアの証明書を検証しないようにする場合はFALSE。検証する代替証明書は、CURLOPT_CAINFOオプションで指定するか、CURLOPT_CAPATHオプションで証明書ディレクトリを指定できます。CURLOPT_SSL_VERIFYPEERが無効になっている場合(デフォルトは2)、CURLOPT_SSL_VERIFYHOSTもTRUEまたはFALSEにする必要があります。CURLOPT_SSL_VERIFYHOSTを2(これはデフォルト値です)に設定すると、提示されている証明書に、リモートリソースへのアクセスに使用しているURNと一致する「共通名」があることが保証されます。これは健全なチェックですが、プログラムが騙されていないことを保証するものではありません。
「真ん中の男」を入力してください
代わりに、プログラムが別のサーバーと通信するように誤解される可能性があります。これは、DNSやARPポイズニングなどのいくつかのメカニズムによって実現できます(これは別の日の話です)。侵入者は、プログラムが予期しているのと同じ「コモン名」で証明書に自己署名することもできます。通信は引き続き暗号化されますが、あなたの秘密は詐欺師に渡されます。この種の攻撃は「中間者」と呼ばれます
「真ん中の男」を倒す
まあ、私たちに提示されている証明書が実際に良いことを確認する必要があります。これは、妥当な*信頼できる証明書と比較することで行われます。
リモートリソースがVerisignやGeoTrustなどのメインCAのいずれかによって発行された証明書で保護されている場合は、http://curl.haxx.se/docs/caextractから取得できるMozillaのCA証明書バンドルと安全に比較でき
ます。 .html
cacert.pem
サーバーのどこかにファイルを保存し、スクリプトで次のオプションを設定します。
curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, TRUE);
curl_setopt ($ch, CURLOPT_CAINFO, "pathto/cacert.pem");