こなさんち

しがないフリーランスエンジニアの備忘録。

PHPのcURLでSSL問題が発生する場合の対処

事象

cURL error 60: SSL certificate problem: unable to get local issuer certificate (see http://curl.haxx.se/libcurl/c/libcurl-errors.html)

というException

条件

localhostからcurlhttps通信を行う時

原因

証明書がない

対応

概要

オレオレ証明書php.iniに読み込ませればいい!

証明書の場所

see http://curl.haxx.se/libcurl/c/libcurl-errors.html と丁寧に書いてあるので以下公式サイトへ。 curl.se

  • ナビバーの [Documentation] をマウスオーバーして [CA bundle]
  • ナビバーの [Documentation] -> [Protocols] -> [CA bundled extracted]

上記どちらかで遷移したページの [cacert.pem] をクリックしてDL

面倒なら これポチってDL

http://curl.haxx.se/ca/cacert.pem

証明書設定

php.iniに書く。php.iniどこだ?ってなったら php --ini 叩けば教えてくれる。

php.iniの中に

[curl]
; A default value for the CURLOPT_CAINFO option. This is required to be an
; absolute path.
; curl.cainfo = 

となっている部分があるので、curl.cainfo = のコメントを外して 絶対パスでダウンロードしたパスを入れる。

注意

パス名をダブルクォーテーションで囲っている記事をよく見たので試した。 結果として、対話形式(Laravelでのtinker etc)での直接通信は可能だったが、アプリから呼んだ場合は本記事のエラーと同じになった。 なので、ダブルクォーテーション外そうね。 ※ パスにスペースがあったらどうするんだろう?詰むのかな。

最後に

以上で、無事通信完了。 今回はSlackのwebhookを試しました。

参考

blog.codebase.co.jp

tm23forest.com