问题背景

今天PHP发布通过Composer进行拉取代码依赖包的时候报错了,因为最近代码没有做改动,发布流程也没有做改动,所以分析可能是服务器环境有问题,经过一番排查。找到了原因

产生原因

php中openssl的ssl证书过期了

可以用如下命令查看当前cacert的过期时间

openssl x509 -in /cert.pem -text -noout

关于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的解决方案。如果您还没有解决这个问题,可以留言或者私信我讨论哟。

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐