程序员最经常使用的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的相关话题,请点击查看:

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

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

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

本站的忠实读者小伙伴,正在阅读下面这些文章:

本站采用创作共用版权协议, 要求署名、非商业用途和相同方式共享。
转载本站内容必须也遵循“署名-非商业用途-相同方式共享”的创作共用协议。
未经许可,规模化镜像抄袭本站内容的行为,将会根据有关法律法规进行维权。
程序如此灵动~》下所有原创文章,如被用于商业用途,请您按规定支付稿费。

苏南大叔需要你的支持

感谢您的打赏,让我更有动力,将更多精彩教程文章,呈现给大家!谢谢!