2012年8月23日木曜日

[PHP][cURL] cURLでSSL(https)のCA証明書警告の回避や設定

PHPは柔軟な言語で特定のサイトを取得するのに様々な手法がある。
その中でcURLという選択をとる人は多い。
色々と便利なcURLだが、SSL(つまりhttps)で外部のサイトへアクセスした場合

SSL certificate problem, verify that the CA cert is OK. Details:
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed

というエラーが出る場合がある。
これはcURLの–with-ca-bundleオプションで指定されたパスか特定パスにCA証明書がないと起こるエラーだ。
もちろん–with-ca-bundleオプションでCA証明書を指定してもいいのだが、
できない環境(レンタルサーバ)などもあるだろう。
これを回避するには

//URLを指定する
$url='https://www.google.co.jp/';

//cURLを初期化して使用可能にする
$curl=curl_init();

//オプションにURLを設定する
curl_setopt($curl,CURLOPT_URL,$url);
//CA証明書の検証をしない
curl_setopt($curl,CURLOPT_SSL_VERIFYPEER,false);

//URLにアクセスし、結果を表示させる
curl_exec($curl);

//cURLのリソースを解放する
curl_close($curl);

としてやればよい。
また、CA証明書を持っているなら

//URLを指定する
$url='https://www.google.co.jp/';
//CA証明書へのパス
$path='./cacert.pem';

//cURLを初期化して使用可能にする
$curl=curl_init();

//オプションにURLを設定する
curl_setopt($curl,CURLOPT_URL,$url);
//CA証明書ファイルを指定
curl_setopt($curl,CURLOPT_CAINFO,$path);

//URLにアクセスし、結果を表示させる
curl_exec($curl);

//cURLのリソースを解放する
curl_close($curl);

としてやればよい。

ポイントとなる関数
  • curl_init ・・・ cURL セッションを初期化する
  • curl_setopt ・・・ cURL 転送用オプションを設定する
  • curl_exec ・・・ cURL セッションを実行する
  • curl_close ・・・ cURL セッションを閉じる

0 件のコメント:

コメントを投稿