问题背景
今天PHP发布通过Composer进行拉取代码依赖包的时候报错了,因为最近代码没有做改动,发布流程也没有做改动,所以分析可能是服务器环境有问题,经过一番排查。找到了原因
产生原因
php中openssl的ssl证书过期了
关于openssl
PHP OpenSSL是一个开源的加密和安全库,它提供了一系列的函数、类和工具,使开发者可以使用各种加密算法和协议来保护敏感数据。
PHP OpenSSL支持许多常见的加密算法,如AES、RSA、DSA、DH等,并提供了诸如数字证书管理、SSL/TLS连接、PKCS#12导入/导出和X.509证书签名/验证等功能,可以实现对双方之间进行加密、签名以及身份验证等复杂的安全操作。PHP OpenSSL非常适合用于开发Web应用程序、电子商务平台以及其他大型系统,它为用户提供了一种可靠的保护机制,防止恶意攻击和数据泄露。
解决方案
- 先通过命令
php -r "print_r(openssl_get_cert_locations());"
输出目前所用的证书文件。从输出结果中定位到文件位置,即default_cert_file
的指向。然后替换掉这个证书。
cd ~ && wget http://curl.haxx.se/ca/cacert.pem
- 然后用
cacert.pem
的内容替换default_cert_file
所指向的文件内容。 - 继续编辑
php.ini
。 - 然后找到
openssl.cafile
然后指向刚刚下载的文件。
openssl.cafile ="xxxx/cacert.pem"
- 重启服务这个问题应该就好了。
其他可能的解决方案
这个错误提示是 SSL 握手时服务器证书校验失败所导致的,可能是以下原因:
服务器证书失效或未经受信任的颁发机构签发。
本地 SSL/TLS 客户端未安装正确的根证书。
本地系统时间与服务器时间不同步。
可以按照以下步骤尝试解决该问题:
检查服务器证书是否真实有效,并且是由受信任的颁发机构(CA)签发的。可以使用 OpenSSL 工具进行相关检测。
确认是否安装了正确的根证书。可以尝试手动下载并安装相应的根证书,以确保本地 SSL/TLS 客户端可以正确识别和验证服务器证书。
确认本地系统时间是否与服务器时间同步。如果两者时间不同步,可能会导致 SSL 握手失败。
如果以上步骤都无法解决该问题,建议联系服务器管理员或证书颁发机构寻求进一步帮助。
总结
以上就是routines:ssl3_get_server_certificate:certificate verify failed的解决方案。如果您还没有解决这个问题,可以留言或者私信我讨论哟。