cURL 错误 60:SSL 证书问题:证书已过期
Posted
技术标签:
【中文标题】cURL 错误 60:SSL 证书问题:证书已过期【英文标题】:cURL error 60: SSL certificate problem: certificate has expired 【发布时间】:2020-09-18 06:58:26 【问题描述】:我们在亚马逊 ec2 上运行 2 个应用程序(backend.abc.com 和 frontend.abc.com)。对于该应用程序,我们使用了付费 SSL 证书。该证书的到期日期为 2021 年 6 月。但是今天,我们遇到了一个错误-
cURL error 60: SSL certificate problem: certificate has expired (see http://curl.haxx.se/libcurl/c/libcurl-errors.html)
我们检查证书到期日期,但没有问题(2021 年 6 月)。然后我们关注这个帖子 - curl: (60) SSL certificate problem: unable to get local issuer certificate(@Dahomz 回答)
之后,当我们通过 - curl -v --url https://backend.abc.com --cacert /etc/ssl/ssl.cert/cacert.pem
卷曲 abc.com 时,它工作正常。回复喜欢 -
* Rebuilt URL to: https://backend.abc.com/
* Trying 127.0.0.1...
* Connected to backend.abc.com (127.0.0.1) port 443 (#0)
* found 139 certificates in /etc/ssl/ssl.cert/cacert.pem
* found 600 certificates in /etc/ssl/certs
* ALPN, offering http/1.1
* SSL connection using TLS1.2 / ******_RSA_***_***_GCM_*****
* server certificate verification OK
* server certificate status verification SKIPPED
* common name: *.abc.com (matched)
* server certificate expiration date OK
* server certificate activation date OK
* certificate public key: RSA
* certificate version: #3
* subject: OU=Domain Control Validated,OU=PositiveSSL Wildcard,CN=*.abc.xyz
* start date: Mon, 04 May 2019 00:00:00 GMT
* expire date: Wed, 07 June 2021 23:59:59 GMT
* issuer: C=GB,ST=Greater Manchester,L=Salford,O=Sectigo Limited,CN=Sectigo RSA Domain Validation Secure Server CA
* compression: NULL
* ALPN, server accepted to use http/1.1
但是当我们通过 curl 从 frontend.abc.com 到 backend.abc.com 时,它会抛出这个错误 -
* Rebuilt URL to: https://backend.abc.com/
* Trying 127.0.0.1...
* Connected to backend.abc.com (127.0.0.1) port 443 (#0)
* ALPN, offering http/1.1
* Cipher selection: ALL:!EXPORT:!EXPORT40:!EXPORT56:!aNULL:!LOW:!RC4:@STRENGTH
* successfully set certificate verify locations:
* CAfile: /etc/ssl/ssl.cert/cacert.pem
CApath: /etc/ssl/certs
* SSL connection using TLSv1.2 / *****-RSA-*****-GCM-******
* ALPN, server accepted to use http/1.1
* Server certificate:
* subject: OU=Domain Control Validated; OU=PositiveSSL Wildcard; CN=*.abc.com
* start date: Mar 4 00:00:00 2019 GMT
* expire date: Apr 7 23:59:59 2021 GMT
* issuer: C=GB; ST=Greater Manchester; L=Salford; O=Sectigo Limited; CN=Sectigo RSA Domain Validation Secure Server CA
* SSL certificate verify result: certificate has expired (10), continuing anyway.
我的 curl 代码 -
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://backend.abc.com");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_VERBOSE, 1);
curl_setopt($ch, CURLOPT_STDERR, fopen(public_path("c.log"), 'w'));
curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
$output = curl_exec($ch);
$error = curl_error($ch);
$info = curl_getinfo($ch);
curl_close($ch);
【问题讨论】:
检查整个链条而不仅仅是叶子。 Sectigo-was-Comodo,在根存储接受 USERTrust 根之前,也从 AddTrust 链接,并且如果您在“后端”上的 curl 仍在使用已过期的 AddTrust 链。见support.sectigo.com/Com_KnowledgeDetailPage?Id=kA03l00000117LT。 你能给我们任何提示如何解决这个问题吗? 【参考方案1】:如果您在 Ubuntu 16 系统上遇到“curl”(或类似问题)问题,我们将按照以下方法解决:
在托管失败的 curl / 应用程序的 Ubuntu 16 系统上:
纳米 /etc/ca-certificates.conf 删除指定 AddTrust_External_Root.crt 的行(或注释) apt update && apt install ca-certificates update-ca-certificates -f -v 使用之前失败的 URL 再次尝试 curl - 希望它现在可以工作 :)【讨论】:
它不工作。当我们通过 curl 从 frontend.abc.com 到 backend.abc.com 时,它显示相同的错误。 @HasanHafizPasha 你有 curl 的问题吗(就像我的帖子中提到的那样)? 是的@mrmuggles,来自前端应用程序的 curl 调用 好吧,如果您使用的是 Ubuntu 16,它应该可以工作。您在运行上述程序时是否收到任何错误消息?此外,如果您可以访问后端,@Manu 的答案会更好,因为您将“修复”源代码。 我很确定并感谢您解决了我的问题,但是在我的 Debian 系统上,我认为sudo dpkg-reconfigure ca-certificates
可能是“nano /etc/ca-certificates.conf”的推荐方式取消选择 AddTrust_External_Root,以确保将文件保持为工具可以理解的格式。【参考方案2】:
要解决此问题,请从您的域证书中删除过期的根证书。
-
转到https://whatsmychaincert.com
测试您的服务器
如果他们确认您的根证书已过期,请下载并使用没有此证书的 .crt。
【讨论】:
谢谢。我建议编辑您的答案以首先进行完整修复,因为真正设置 curl 选项并不是一个修复,因为访问相同证书的其他(旧)客户端仍然存在该问题。 whatsmychaincert.com 网站非常适合诊断此问题 - 谢谢! 我同意@BlueC:证书修复应该首先突出显示,然后为 OP 添加临时 curl 修复 这些步骤解决了服务器端的问题。请注意,您将在第 3 步下载的证书将用于代替旧的 CA 证书。 我应该在哪里输入这些命令?...在哪个文件中? 请勿使用 SSL_VERIFYPEER = 0,这会打开您对中间人攻击的请求。这不是一个解决方案,只是一个临时测试,绝不应该在生产中使用!【参考方案3】:您的信任库似乎没有使用最新的受信任根进行更新。了解它从昨天 5 月 30 日开始发生在你身上。我假设您将 Sectigo 作为您的 CA。
更新您的信任,您应该能够连接。
https://support.sectigo.com/articles/Knowledge/Sectigo-AddTrust-External-CA-Root-Expiring-May-30-2020
【讨论】:
【参考方案4】:永久的解决方案是从您的提供商处重新颁发 SSL 证书并将其重新安装到您的服务器上。
重新颁发的证书将更新 CA 包。
干杯!
【讨论】:
【参考方案5】:我们有同样的错误。为了解决您的问题,请使用您受信任的 SSL 站点的最新版本更新您的“SSLCertificateChainFile”。在我们的例子中是 comodo。
您需要访问您信任的站点并在您的证书下找到“CA-CRT”。复制内容。
-
转到您的 /etc/apache2/sites-available
找到带有“SSLCertificateChainFile”的行。
接下来编辑文件并将内容替换为新的 CA-CRT 值。
然后重新启动您的 Web 服务器,在我们的例子中是 apache:
服务 apache2 重启
要么
systemctl 重启 apache2
如果您无法重新启动 apache,简单的方法是重新启动您的实例。
【讨论】:
【参考方案6】:对于 ubuntu 14.04
打开你的终端
sudo su
wget https://support.sectigo.com/Com_KnowledgeDetailPage?Id=kA01N000000rfBO -O SHA-2_Root_USERTrust_RSA_Certification_Authority.crt --no-check-certificate
cp SHA-2_Root_USERTrust_RSA_Certification_Authority.crt /usr/share/ca-certificates/mozilla/
然后
dpkg-reconfigure ca-certificates
和 取消选中 mozilla/AddTrust_External_Root.crt 并选中 mozilla/2_Root_USERTrust_RSA_Certification_Authority.crt
或运行sudo update-ca-certificates
取消选中这些。
【讨论】:
今天DST_Root_CA_X3.crt
证书已过期,Let's Encrypt 证书无效。要修复它,只需使用 sudo dpkg-reconfigure ca-certificates
工具停用证书即可。
谢谢。我已经尝试解决此问题 5 天了!
Grazie mille caro :-),您的提示结束了为期两天的噩梦。只是一个让我有点犹豫的小补充:在 dpgk-reconfigure 的第一个屏幕中......正确的答案是“询问”,然后会显示可用证书的列表。滚动到 DST_Root_CA_X3.crt,取消选中并按 Tab 键选择“确定”。【参考方案7】:
我们遇到了同样的问题,经过一些故障排除后,我们发现 COMODO 的根证书已过期。
Valid until Sat, 30 May 2020 10:48:38 UTC (expired 3 days, 5 hours ago) EXPIRED
我们通过以下方式对此进行了测试:https://www.ssllabs.com/ssltest/index.html。 我们通过从经销商处下载新证书解决了这个问题。
This is the result we received about the COMODO certificates
【讨论】:
【参考方案8】:我必须在基于 debian 的服务器上解决此问题
这是由于系统使用了openssl(curl依赖于openssl)
事情是这样的:
-
从您的系统中删除 AddTrust_External_Root.crt(通常在
/etc/ssl/certs
中找到)
-
从
/etc/ca-certificates.conf
中删除或注释“mozilla/AddTrust_External_Root”行
运行sudo update-ca-certificates
更新openssl使用的证书
也许对你有帮助?
【讨论】:
【参考方案9】:昨天我遇到了@finesse 上面报告的问题。由于在我们的系统上 ca-certificates 会自动更新,所以我很困扰,因为证书是有效的
在命令行中使用 curl 在 php-cli 中使用 php 脚本但它在网站上不起作用。
解决方案很简单:
只需重启 php-fpm :/
最好的问候,
威利
【讨论】:
【参考方案10】:您可以启用insecure
连接,将此选项添加到您的
$HOME/.curlrc
文件:
$ echo "insecure" >> ~/.curlrc
不建议永久保留它,但是,对于快速和临时的解决方案,这是一个不错的选择。
参考:How to apply the changes for all HTTPS connection
【讨论】:
我找到了一个没有 insecure 配置的更好方法,我在这里分享了步骤:***.com/a/70011298/5078874以上是关于cURL 错误 60:SSL 证书问题:证书已过期的主要内容,如果未能解决你的问题,请参考以下文章
facebook auth cURL 错误 60:SSL 证书
WORDPRESS : cURL 错误 60: SSL 证书
cURL 错误 60 - SSL 证书问题 - 无法获取本地颁发者