cURLを使用したプログラムでhttpsのサイトにアクセスしたとき、下記の例外が発生しました。
この問題を解消するために、調べた事・行ったことののメモを書いておきます。
環境: Windows10, PHP7.0.14, GuzzleHttp経由でcURLライブラリを利用
Fatal error:
Uncaught exception 'GuzzleHttp\Exception\RequestException' with message
'cURL error 60: SSL certificate problem:
unable to get local issuer certificate
エラーの理由
このエラーは、SSL暗号化されているhttpsのサイトにアクセスしようとした際にそのサーバが信頼できるか否かの証明書(ca証明書)が取得できなかった時に発生します。
行ったこと
- SSLの認証情報をファイルに保存する
下記のURLの出力結果をダウンロードし、適当なファイルにに保存します。
今回は、C:\path\to\cacert.pem
に保存したものとして説明します。
http://curl.haxx.se/ca/cacert.pem php.iniを書き換える
curlのセクションに、コメントアウトされたcurl.cainf定義があるので、ここに先ほどのファイルを指定します
[curl]
curl.cainfo = "C:\path\to\cacert.pem"
- php.iniを書き換えたくない/変更できない場合
phpプログラム上に以下のような形で証明書ファイルの場所を指定しても大丈夫です。
$http = new GuzzleHttp\Client([
'verify' => 'c:\path\to\cacert.pem'
];
Google Client SDKを使っているときにこのエラーが出たときは…
Google Client SDKを使っているときは、先ほど作った$httpを下記の形で指定できるらしいです。
(実際に使っていないので未検証の情報です)
$google = new Google_Client;
$google->setHttpClient($http);
参考:StackOverflow.comでの情報
StackOverflow.comによると、上記の処理を行ったにもかかわらず、エラーが解消されない場合は下記のチェックを行うとよいそうです。
http://stackoverflow.com/questions/29822686/curl-error-60-ssl-certificate-unable-to-get-local-issuer-certificate
php.iniファイルにopenssl.cafileのパラメータが指定されているか
php.iniファイルにcurl.cainfoのパラメータが指定されているか
Red Hat, CentOS, Fedoraを使っている場合...
/etc/pki/tls/certs/ca-bundle.crtがあれば
このファイルを見に行くので、ファイルが存在しているか確認する。
Ubuntu, Debianを使っている場合...
/etc/ssl/certs/ca-certificates.crtがあればこのファイルを見に行くので...(以下同様)
FreeBSDの場合
/usr/local/share/certs/ca-root-nss.crtがあれば...
OS Xの場合
/usr/local/etc/openssl/cert.pemがあれば...
Windowsの場合
C:\windows\system32\curl-ca-bundle.crt があれば...
C:\windows\curl-ca-bundle.crt があれば...
php.iniファイルにopenssl.cafileやcurl.cainfoのパラメータが正しくセットできているかは、下記のプログラムで確認できます。一台のPCに複数バージョンのPHPがインストールされている場合は、念のために確認しておいた方が良いです。
echo "openssl.cafile: ", ini_get('openssl.cafile'), "\n";
echo "curl.cainfo: ", ini_get('curl.cainfo'), "\n";
関連記事
こんにちは。
「Google Client SDKを使っているときにこのエラーが出たときは…」の節での方法ですが、実践してみたところ、できました。
一応、報告させていただきます。
https://qiita.com/rev84/items/729167a5b5ba36bf262b
[…] 参考:http://nanoappli.com/blog/archives/7992 […]