如何配置php的openssl证书位置?
发布于 作者:苏南大叔 来源:程序如此灵动~本文描述在php
环境中,使用代码(例如:file_get_contents()
)访问https
资源的时候,会有访问失败的提示。当然,从苏南大叔的经验上来看,这些报错信息具体消息是不同的。但是,解决方案总是一致的,那就是在php
服务器上面下载并配置好证书即可。
本文测试环境:win10
,phpstudy@
,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
的,一般来说是在浏览器里面访问php
的网站服务。但是,也有可能是在服务器上面的命令行下面,使用php
命令去执行某个php
文件。
当然,一般来说,命令行里面的php
和用于搭建www
容器里面的php
会是同一个。很少有苏南大叔这测试环境里面,不一致的情况的。
另外,是不是开启了openssl
扩展,也是个非常重要的问题。确定一下php.ini
中是不是开启了openssl.dll
/openssl.so
扩展,不做赘述。
相关文章:
下载并位置证书
根据错误提示,在下面的网址上,可以下载到ca
证书的最新版。网址是:
下载到的证书,是个pem
文件。
寻找ca
本地位置
既然思路明确了,就是需要配置一个ca
证书,那么问题来了,把证书放在那里呢?
默认位置
系统有个默认的位置,可以用下面的方法查找:
php -r "print_r(openssl_get_cert_locations()['default_cert_file']);"
系统返回的这个位置,苏南大叔表示很无语。居然在d盘下的tmp
目录里面,这究竟是怎么来的。
自定义位置
苏南大叔决定自定义这个位置,修改php.ini
中的条目curl.cainfo
。
注意去除句首的;
注释,注意使用绝对(absolute
)路径。
相关链接
放置好证书之后,重启环境,运行正常。那么,不同的操作环境下,基本上思路是一致的。本文里,苏南大叔仅仅是炒了个冷饭。下面是两个备选文章:
操作视角是macos
的文章:
操作视角是win10
的文章(本文):
两者的思路基本上是一致的。
总结
php
利用openssl
访问https
的信息,出错的话,就是没有配置好openssl
,而且这个openssl
需要一个本地证书,在有效期内的证书,没有的话,就去官方下载一个最新的!
更多相关文章,请参考:
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。