当前位置:首页 > PHP > 正文内容

PHP 5.6上的SSL证书验证

高老师4年前 (2020-10-31)PHP1140

我最近将本地OS X Zend Server安装更新为PHP 5.6,并且在运行composer self-update时收到以下错误消息:

[Composer\Downloader\TransportException]                                                                                       
The "https://getcomposer.org/version" file could not be downloaded: SSL operation failed with code 1. OpenSSL Error messages:  
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed                                              
Failed to enable crypto                                                                                                        
failed to open stream: operation failed

到处搜寻,我终于得出结论,PHP 5.6中对SSL进行了各种改进,问题是它在我的系统上找不到任何OpenSSL证书。这并不完全令人惊讶,因为OS X不再使用内部使用OpenSSL而是使用其自己的库。

有一个新的PHP函数openssl_get_cert_locations对此有所帮助,因此我运行了:

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

输出信息:

Array
(
    [default_cert_file] => /usr/local/openssl-0.9.8zb/ssl/cert.pem
    [default_cert_file_env] => SSL_CERT_FILE
    [default_cert_dir] => /usr/local/openssl-0.9.8zb/ssl/certs
    [default_cert_dir_env] => SSL_CERT_DIR
    [default_private_dir] => /usr/local/openssl-0.9.8zb/ssl/private
    [default_default_cert_area] => /usr/local/openssl-0.9.8zb/ssl
    [ini_cafile] => 
    [ini_capath] => 
)

我的系统上没有目录/usr/local/openssl-0.9.8zb,并且没有定义SSL_CERT_FILESSL_CERT_DIR,因此报错也就不足为奇了。

要修复它,我通过自制软件安装openssl:

brew install openssl

这会将openssl证书安装到/usr/local/etc/openssl/cert.pem,因此我们现在可以使用新的PHP 5.6 INI设置openssl.cafile告诉PHP在哪里可以找到证书:

php.ini配置如下:

openssl.cafile=/usr/local/etc/openssl/cert.pem

扫描二维码推送至手机访问。

版权声明:本文由高久峰个人博客发布,如需转载请注明出处。

本文链接:https://blog.20230611.cn/post/176.html

分享给朋友:

“PHP 5.6上的SSL证书验证” 的相关文章

PHP浮点数乘以整数还是浮点型

PHP浮点数乘以整数还是浮点型

<?PHP     $a=0.5*100;     if(is_int($a)){   echo'int'; } else{ echo'not int';   }    ...

php 经纬度获取城市,php 经纬度转城市

php 经纬度获取城市,php 经纬度转城市

通过经纬度转换为城市名称,并获得城市的编号,通常在全国类型的商城中比较通用。//经纬度转城市名称(返回城市id,城市名称) //$ak开发密钥,$lat纬度,$lng经度,$type返回数据类型 public function getCityName($ak,$lat,$lng)...

 php max input vars,max input vars限制,max input vars 设置

php max input vars,max input vars限制,max input vars 设置

在一个正式项目中操作人员提交239个产品信息进行保存,但是系统却提示没有提交239个产品,于是开启错误信息,显示如下:Warning: Unknown: Input variables exceeded 1000. To incr...

PHP中的ArrayAccess用法详解

PHP中的ArrayAccess用法详解

php arrayaccess 官方的说法是让你能以数组的形式访问对象,对于这种php内置接口一直不太明白有什么用,坚持多看文章,终于理解,特来分享,思路不同,更易于理解。(1).创建一个学生类,并且实现arrayaccess 接口。<?php class  studen...

Thinkphp Call Stack,PHP调用栈Call Stack的获取

Thinkphp Call Stack,PHP调用栈Call Stack的获取

ThinkPHP中有一个debug调试功能,能输出报错文件的信息,并能看到这个函数被哪些函数调用,从框架的启动开始记录,特别方便调试。于是研究了下它的底层给予了实现。<?php //--框架核心--Start //框架内置错误处理 function errDealWith($er...

PHP获取站点根目录,PHP获取应用根目录,cgi和cli都支持

PHP获取站点根目录,PHP获取应用根目录,cgi和cli都支持

重构框架的时候想要考虑支持下cli模式,于是参考了thinkphp的底层。/**  * 获取应用根目录  * @return string  */ public static function getRootP...