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

PHP 5.6上的SSL证书验证

高老师5年前 (2020-10-31)PHP1152

我最近将本地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生成cookie数组,PHP删除cookie数组

PHP生成cookie数组,PHP删除cookie数组

<?php   //设置Cookies数组 setcookie('Datatype[a]', '1');  setcookie('Datatype[b]', '2');  set...

php无限查询下级,php递归统计下级总数,php 获取无限子级

php无限查询下级,php递归统计下级总数,php 获取无限子级

因项目需要需要统计用户无限下级计算分销佣金,计算每月分红,计算无限下级团队的业绩,需要先获得某个会员的无限下级成员。先看看数据库中的member表字段id            username       &...

php引用变量的完全理解

php引用变量的完全理解

在PHP中,大部分变量类型,如字符串,整型,浮点,数组等都是值类型的,而类和对象是引用类型.和其他语言有点差距.(1).在值类型中我们直接使用&符号表示指向对应变量的内存地址,当前变量和被指向的变量只要有1个的值被修改都会直接影响另外一个变量的值发生变化。(ps:还是非常节省内存的,可以使用...

php迭代器学习

php迭代器学习

php官方已经提供了Iterator(迭代器)接口,通过网上资料的学习,目前看适合超大集合或者数组提取使用。学习一个函数的实现对比内存占用差距.使用迭代器和普通循环实现range()函数。(1).普通循环实现range()函数。function newrange($low, $h...

PHP二维数组排序,PHP多维数组排序, array_multisort()

PHP二维数组排序,PHP多维数组排序, array_multisort()

使用php函数array_multisort()即可实现和SQL一样的order by排序. 例如我们需要对会员表按照主键降序排列,年龄升序排列://会员表数据 $list = []; $list[] = ['mid' =>&n...

全方位认识PHP的SESSION

全方位认识PHP的SESSION

【一】.介绍session由于HTTP是无状态的请求,创建一个会话需要保持必须需要身份标识。当用户第一次访问,PHP会为用户创建一个唯一的sessionid,并将sessionid通过cookie发送给浏览器,并在服务器的临时文件创建一个以sessionid为名的文件用来保存这个sessionid保...