我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...

程序员最经常使用的curl,在php下面也是经常用的到。但是,苏南大叔友情提示您:用curl获取https的网页内容的时候,也是需要用到证书的。而这么多年,估计大家从来都没有察觉过任何更新证书的动作,证明这可能是有自动renew操作的。而目前苏南大叔手头的centos系统,却存在有使用curl无法获取https内容的问题。

苏南大叔:php无法获得https网页内容的解决方案 - php-openssl-cafile
php无法获得https网页内容的解决方案(图8-1)

本文测试环境:centos/php71

症状描述

利用curl或者file_get_contents获取远程http的内容时,成功。但是获取https的内容时,失败。错误提示文字类似于:

SSL operation failed with code 1. OpenSSL Error messages: error:14090086: SSL routines:ssl3_get_server_certificate:certificate vertify failed

苏南大叔:php无法获得https网页内容的解决方案 - openssl-error
php无法获得https网页内容的解决方案(图8-2)

开启openssl

保证php.ini里面的openssl扩展肯定要打开。这个操作比较基础,不做赘述。

extension=openssl.so

苏南大叔:php无法获得https网页内容的解决方案 - openssl-phpinfo
php无法获得https网页内容的解决方案(图8-3)

检测证书位置

查看一下openssl证书的默认位置,检测openssl的证书位置的代码:

php -r "print_r(openssl_get_cert_locations());"

default_cert_file是默认位置。

苏南大叔:php无法获得https网页内容的解决方案 - curl_https
php无法获得https网页内容的解决方案(图8-4)

当然,如果你不喜欢这个默认位置的话,也可以自定义证书位置。
修改方法为:php.ini中的openssl.cafile

[openssl]
; The location of a Certificate Authority (CA) file on the local filesystem
; to use when verifying the identity of SSL/TLS peers. Most users should
; not specify a value for this directive as PHP will attempt to use the
; OS-managed cert stores in its absence. If specified, this value may still
; be overridden on a per-stream basis via the "cafile" SSL stream context
; option.
openssl.cafile='/code/cacert.pem'

苏南大叔:php无法获得https网页内容的解决方案 - phpini-cafile
php无法获得https网页内容的解决方案(图8-5)

查找php.ini的方法为:

下载更新证书

证书的下载网址是:

苏南大叔:php无法获得https网页内容的解决方案 - download-perm
php无法获得https网页内容的解决方案(图8-6)

您也可以下载以往的perm证书文件:

苏南大叔:php无法获得https网页内容的解决方案 - download-perm2
php无法获得https网页内容的解决方案(图8-7)

选择一个最新的perm证书下载即可。下载好的证书要放置在上述默认位置或者自定义好的位置。重启php后,就应该可以解决问题了。

软链接特殊情况

centos下面,不过ll一下这个证书,可以发现是个软链接。所以,你真正的放置证书的位置其实是有变化的。

苏南大叔:php无法获得https网页内容的解决方案 - curl_cert
php无法获得https网页内容的解决方案(图8-8)

结论

PS一下:这个curl的官网的域名,真心耐人寻味啊...

更多有关https的相关话题,请点击查看:

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。

 【福利】 腾讯云最新爆款活动!1核2G云服务器首年50元!

 【源码】本文代码片段及相关软件,请点此获取更多信息

 【绝密】秘籍文章入口,仅传授于有缘之人   php    https