file_get_contents 访问 https 协议报错

| 选择喜欢的代码风格  

OpenSSL Error messages: error:14090086


在调用 file_get_contents 获取一个 https 协议内容,遇到报错: Warning: file_get_contents(): SSL operation failed with code 1. OpenSSL Error messages: error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed in ...,及 Warning: file_get_contents(): Failed to enable crypto in ...,可以跳过 https 验证解决办法:

$stream_opts = [
    "ssl" => [
        "verify_peer"=>false,
        "verify_peer_name"=>false,
    ]
]; 

$response = file_get_contents("https://xxx.xxx.xxx", false, stream_context_create($stream_opts));

Stream wrappers now verify peer certificates and host names by default when using SSL/TLS


之所以报这个的原因,是从 PHP 5.6.x 起,使用 SSL / TLS 时,流包装器现在默认验证对等证书和主机名,具体看 PHP 官方文档(更多阅读)。

但请注意,跳过具有非常重要的安全影响。 禁用验证可能会允许 MITM 攻击者使用无效证书来窃听请求。 虽然在本地开发中这样做可能有用,但在生产中应该使用其他方法。

PHP file_get_contents 扩展阅读:




发表评论