CakePHP利用 Google Spread Sheetsとの連携でSSLエラーになる問題が解決しました。
PHP と Sheets API を利用して Google Spread Sheets を操作する方法 — さめたすたすのお家
上記のサイトを参考にGoogle Spread Sheetsとの連携をCakePHPを利用してコーディングしていたところ、
実行時以下のようなエラーが発生しました。
cURL error 60: SSL certificate problem: unable to get local issuer certificate
google翻訳機にかけた↓
cURLエラー60:SSL証明書の問題:ローカル発行者証明書を取得できません
というエラーらしい。
ほんとむり。リスカしよ。と思ったけどバカなりに頑張りましてどうにかなりました。
調べてみてわかった原因
・WindowsのPHPではcurlを使って通信する際、CA証明書がないというエラーが起こることがあるらしい(PHP5.5以降がなるらしい?ちなみに今回使用していたのはPHP5.6でした)
・Windows 上で cURL を使うと、SSL サイトで証明書の検証に失敗することがあるらしい
いろいろ試行錯誤し一応解決はしたので載せておきます。
ローカルのテスト環境などで開発している方の参考になりますように。
※なぜ解決したのかは私がばかゆえによくわかっていません!
1.SSLの認証情報をインターネットから取得してきます。
http://curl.haxx.se/ca/cacert.pem
↑ここからダウンロードできます。
2.1でダウンロードしたファイルをphp\extras\ssl配下に格納します。
私の場合はC:\xampp\php\extras\sslでした。
3.php.iniに以下のソースを追加します。
[cURL]
curl.cainfo = "2で格納したファイルのパス"
openssl.cafile = "2で格納したファイルのパス"
私の場合
[cURL]
curl.cainfo = "C:\xampp\php\extras\ssl\cacert.pem"
openssl.cafile = "C:\xampp\php\extras\ssl\cacert.pem"
ですね。
4.処理を行うPHP側に以下文を追加します。
$client->setHttpClient(new GuzzleHttp\Client(array('verify' => false)));
私の場合は
$client = new Google_Client();
~
$service = new Google_Service_Sheets($client);
の間に今回は記述しました。
ClientがcURLを叩く際に証明書の検証はデフォルトでオンになっているので、
それを回避できる書き方だそうです。
これを書いたら回避できた時点でphp.iniの記述いらんかったんじゃないかって思ってる。
検証はしてない。
5.通常通り処理を実行します!
ぱらっぱっぱっぱー
動くはずです!
おめでとうございます❀
以下参考にしたサイト様たち…
- Google APIをPHPウェブアプリケーションから呼び出す(サービスアカウント) 第5回 - プログラミングノート
- GuzzleHttpのClientでリクエスト送る時に、証明書の検証を回避する方法 - Qiita
- cURL error 60: SSL certificate problem: unable to get local issuer certificate · Issue #788 · google/google-api-php-client · GitHub