Curl openssl 返回 CURLE_PEER_FAILED_VERIFICATION

当遇到PHP GuzzleHttp请求因SSL证书过期导致的错误时,可以通过检查服务器SSL证书、更新本地CA证书库或禁用SSL验证来解决。在本文中,详细介绍了如何使用openssl命令检查证书、将新的CA证书添加到系统信任库以及如何在curl命令中禁用SSL验证。实践部分提到,作者通过更新CA证书并转换文件格式成功解决了问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

具体问题:

PHP Fatal error:  Uncaught GuzzleHttp\\Exception\\RequestException: cURL error 60: SSL certificate problem:  certificate has expired (see https://curl.haxx.se/libcurl/c/libcurl-errors.html)。

Curl openssl 返回 CURLE_PEER_FAILED_VERIFICATION 的原因是服务器的 SSL 证书无法验证。这可能是由于以下几种原因造成的:

  • 服务器的 SSL 证书已过期或已吊销。
  • 服务器的 SSL 证书颁发机构 (CA) 不受信任。
  • 本地系统缺少必要的 CA 证书。

要解决此问题,可以尝试以下几种方法:

  • 检查服务器的 SSL 证书是否有效。
  • 将服务器的 CA 证书添加到本地系统信任库中。
  • 禁用 SSL 证书验证。

检查服务器的 SSL 证书

可以使用 openssl 命令检查服务器的 SSL 证书。例如,要检查 https://www.google.com 的 SSL 证书,可以运行以下命令:

openssl s_client -connect www.google.com:443 -showcerts

如果服务器的 SSL 证书有效,则输出将显示证书的信息,包括颁发机构、有效期等。

将服务器的 CA 证书添加到本地系统信任库中

如果服务器的 SSL 证书是由受信任的 CA 颁发的,则可以将服务器的 CA 证书添加到本地系统信任库中。这将允许 curl 验证服务器的 SSL 证书。

在 Linux 系统上,可以使用以下命令将服务器的 CA 证书添加到本地系统信任库中:

sudo cp /path/to/ca.crt /etc/ssl/certs/ca-certificates.crt

在 Windows 系统上,可以使用以下命令将服务器的 CA 证书添加到本地系统信任库中:

certmgr.exe -add /s /r /c /n "CA Name" /f /path/to/ca.crt

禁用 SSL 证书验证

如果无法解决服务器的 SSL 证书问题,则可以禁用 SSL 证书验证。这将允许 curl 连接到服务器,但安全性会降低。

在 curl 命令中,可以使用以下选项禁用 SSL 证书验证:

--insecure

例如,要禁用 SSL 证书验证并连接到 https://www.google.com,可以运行以下命令:

curl --insecure https://www.google.com

注意:禁用 SSL 证书验证会降低安全性,应谨慎使用。

上述内容是解决方式,下文是我在项目中的实践:

项目中具体问题:

PHP Fatal error:  Uncaught GuzzleHttp\\Exception\\RequestException: cURL error 60: SSL certificate problem:  certificate has expired (see https://curl.haxx.se/libcurl/c/libcurl-errors.html)。

解决方法:

查看curl报错 ,之后按照报错给的链接看了下步骤,查找 CURL 正在使用哪个 CA 证书包

# 引号内的url为你自己的网站链接
strace curl "url" |& grep open 

在最后,看到证书包的地址(以自己服务器的情况为准): /etc/pki/tls/certs/ca-bundle.crt。

因为我本地CA证书太旧导致的,我重新下载了CA文件:下载地址,下载的文件是pem格式的,下文是转换为crt格式的方法:

PEM格式和CRT格式都是用于存储SSL证书的文件格式。PEM格式是文本格式,而CRT格式是二进制格式。

使用OpenSSL进行转换

可以使用OpenSSL命令将PEM格式转换为CRT格式。例如,要将名为server.pem的PEM格式证书转换为CRT格式,可以运行以下命令:

openssl x509 -in server.pem -out server.crt -outform DER

使用其他工具

也可以使用其他工具将PEM格式转换为CRT格式。例如,可以使用以下工具:

注意事项

  • 转换PEM格式到CRT格式不会改变证书的内容。
  • 转换后的CRT格式证书可以使用与PEM格式证书相同的用途。

转换完成后替换相应的证书就可以了,如果有报错相同的小伙伴可以参考:如何强制旧版 debian 忘记 DST Root CA X3 Expiration 并使用 ISRG Root X1 – SSL 证书问题:证书已过期 - 代码日志

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值