解决SSL routines:ssl3_get_server_certificate:certificate verify failed


问题背景

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

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黑夜开发者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值