本博客不欢迎:各种镜像采集行为,请尊重知识产权法律法规。大家都是程序员,不要闹得不开心。

本文描述在php环境中,使用代码(例如:file_get_contents())访问https资源的时候,会有访问失败的提示。当然,从苏南大叔的经验上来看,这些报错信息具体消息是不同的。但是,解决方案总是一致的,那就是在php服务器上面下载并配置好证书即可。

苏南大叔:如何配置php的openssl证书位置? - php-ssl-ca
如何配置php的openssl证书位置?(图6-1)

本文测试环境:win10phpstudy@php@5.6.9。本文的测试环境是win10,其他的操作环境下,思路也是一致的。本文的内容,并不因为测试环境win10,而产生错误的价值。

报错信息

本次实验报错信息如下:

Fatal error: Uncaught GuzzleHttp\Exception\RequestException: cURL error 60: SSL certificate problem: unable to get local issuer certificate (see https://curl.haxx.se/libcurl/c/libcurl-errors.html) 
in E:\www\sms\vendor\guzzlehttp\guzzle\src\Handler\CurlFactory.php:211

错误码是60,根据官方提示,以前的错误码是51,官方错误码说明如下:

CURLE_PEER_FAILED_VERIFICATION (60)
The remote server's SSL certificate or SSH md5 fingerprint was deemed not OK. This error code has been unified with CURLE_SSL_CACERT since 7.62.0. Its previous value was 51.

苏南大叔:如何配置php的openssl证书位置? - libssl-error-code
如何配置php的openssl证书位置?(图6-2)

开启扩展

首先,要清楚自己是怎么使用php的,一般来说是在浏览器里面访问php的网站服务。但是,也有可能是在服务器上面的命令行下面,使用php命令去执行某个php文件。
当然,一般来说,命令行里面的php和用于搭建www容器里面的php会是同一个。很少有苏南大叔这测试环境里面,不一致的情况的。

另外,是不是开启了openssl扩展,也是个非常重要的问题。确定一下php.ini中是不是开启了openssl.dll/openssl.so扩展,不做赘述。

苏南大叔:如何配置php的openssl证书位置? - php-ini-openssl
如何配置php的openssl证书位置?(图6-3)

相关文章:

下载并位置证书

根据错误提示,在下面的网址上,可以下载到ca证书的最新版。网址是:

下载到的证书,是个pem文件。

苏南大叔:如何配置php的openssl证书位置? - ca-download
如何配置php的openssl证书位置?(图6-4)

寻找ca本地位置

既然思路明确了,就是需要配置一个ca证书,那么问题来了,把证书放在那里呢?

默认位置

系统有个默认的位置,可以用下面的方法查找:

php -r "print_r(openssl_get_cert_locations()['default_cert_file']);"

系统返回的这个位置,苏南大叔表示很无语。居然在d盘下的tmp目录里面,这究竟是怎么来的。

苏南大叔:如何配置php的openssl证书位置? - default-ca-file
如何配置php的openssl证书位置?(图6-5)

自定义位置

苏南大叔决定自定义这个位置,修改php.ini中的条目curl.cainfo

注意去除句首的;注释,注意使用绝对(absolute)路径。

苏南大叔:如何配置php的openssl证书位置? - php-ini-cainfo
如何配置php的openssl证书位置?(图6-6)

相关链接

放置好证书之后,重启环境,运行正常。那么,不同的操作环境下,基本上思路是一致的。本文里,苏南大叔仅仅是炒了个冷饭。下面是两个备选文章:
操作视角是macos的文章:

操作视角是win10的文章(本文):

两者的思路基本上是一致的。

总结

php利用openssl访问https的信息,出错的话,就是没有配置好openssl,而且这个openssl需要一个本地证书,在有效期内的证书,没有的话,就去官方下载一个最新的!

更多相关文章,请参考:

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