ばか女の技術ブログ

大阪のばかすぎる女子プログラマーがばかな知識を載せていくばか向けばかブログです。

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証明書の問題:ローカル発行者証明書を取得できません

 

というエラーらしい。

ほんとむり。リスカしよ。と思ったけどバカなりに頑張りましてどうにかなりました。

 

 

 

調べてみてわかった原因

WindowsPHPではcurlを使って通信する際、CA証明書がないというエラーが起こることがあるらしい(PHP5.5以降がなるらしい?ちなみに今回使用していたのはPHP5.6でした)

Windows 上で cURL を使うと、SSL サイトで証明書の検証に失敗することがあるらしい

 

 

とりあえずwindowsphp側の問題のようですね。

 

 

いろいろ試行錯誤し一応解決はしたので載せておきます。

ローカルのテスト環境などで開発している方の参考になりますように。

 

 

※なぜ解決したのかは私がばかゆえによくわかっていません!

 

 

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.通常通り処理を実行します!

ぱらっぱっぱっぱー

動くはずです!

おめでとうございます❀

 

 

以下参考にしたサイト様たち…