file_get_contents(): SSL operation failed に対処した
APIで月次データを取得しているPHPプログラムがエラーを吐くようになりました。
file_get_contents(): SSL operation failed with code 1. OpenSSL Error messages:
error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed {"exception":"[object] (ErrorException(code: 0): file_get_contents(): SSL operation failed with code 1. OpenSSL Error messages:
error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed at /var/www/html/xxx.php:35)
エラーはfile_get_contents()
でAPIを叩いている箇所で起こっています。
$json = file_get_contents("https://example.com/api/v1/get/$code", false, $context);
同じことをcurl
で行うと成功するので、API提供元の不具合では無さそうです。
curl -s https://example.com/api/v1/get/999
以下のようにして、サーバ証明書の検証をしないことで回避できそうですが、これは最後の手段としたいです。
$context = stream_context_create([
'ssl' => [
'verify_peer' => false,
'verify_peer_name' => false
]
]);
$json = file_get_contents("https://example.com/api/v1/get/$code", false, $context);
まず疑うべきは証明書の有効期限切れです。
API提供元は Let's Encrypt を使っています。
そういえば、Let's Encrypt が使用しているルート証明書が9月30日に期限切れになっていたことを思い出しました。
このAPIは月末近くに発動するので、今回その影響を受けた可能性が高いです。
そこでca-certificates
パッケージを最新にしたところ、解消されました!
yum -y update ca-certificates
Author And Source
この問題について(file_get_contents(): SSL operation failed に対処した), 我々は、より多くの情報をここで見つけました https://qiita.com/mindwood/items/fd23ddcb94fb4eefa99c著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .