本帖最后由 betrox 于 2017-3-28 01:46 编辑
一般遇到这样的问题,首先考虑升级OPENSSL。具体可见论坛内老帖:http://www.bt.cn/bbs/forum.php?m ... %E7%BA%A7%2BOPENSSL
在升级后无效,可以用以下方式解决:
这里只赘述Linux下的,Windows请自行百度。
首先,检查下PHP.INI里面有没有开启php_openssl.dll。大多数情况下只要开启了php_openssl.dll,就可以抓取Https链接。开启姿势:
- ;extension=php_openssl.dll
复制代码
去掉PHP.INI上面一句的前面引号。
我在实际操作中,开启后仍然有部分站点的链接无法返回请求。报错信息如下:
- <div>
- </div><div>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 /xxx/xxx.php on line 4</div><div>Warning: file_get_contents(): Failed to enable crypto in /xxx/xxx.php on line 4</div><div>Warning: file_get_contents(https://www.gaomeng.net.cn/2017/02/26/a569843a5c8c743c4369f8d9771b017d.jpg): failed to open stream: operation failed in /xxx/xxx.php on line 4</div>
复制代码
查了下OpenSSL错误14090086,发现全一些老外在叨叨。其实这个问题是由于目标网站证书较新造成的,解决很简单,SSH输入:
- php -r “print_r(openssl_get_cert_locations());”
复制代码
查看返回的默认证书位置。如:
- <div>[root@local]# php -r “print_r(openssl_get_cert_locations());”</div><div>Array</div><div>(</div><div>[default_cert_file] => /usr/ssl/cert.pem</div><div>[default_cert_file_env] => SSL_CERT_FILE</div><div>[default_cert_dir] => /usr/ssl/certs</div><div>[default_cert_dir_env] => SSL_CERT_DIR</div><div>[default_private_dir] => /usr/ssl/private</div><div>[default_default_cert_area] => /usr/ssl</div><div>[ini_cafile] => </div><div>[ini_capath] => </div><div>)</div>
复制代码
其中default_cert_file就是默认证书位置,如上面的就是/usr/ssl/cert.pem。从官方下载最新的开源证书,替换下即可。官方网址:https://curl.haxx.se/docs/caextract.html
至此,全部解决。看到网上很多人描述不清楚,误人子弟。故而记录下。
原帖链接:https://www.gaomeng.net.cn/351
打字老多,我的一个博客,留个链接吧。若感觉有用,请版主给个评价。
|
|