curl 说有效证书已过期

curl 说有效证书已过期

我在一台服务器上托管了一个 gitlab 社区版,当在这台服务器上使用 curl 获取本地 gitlab 网站时,即使日期有效,也会出现证书过期错误:

curl --insecure -vvI https://gitlab.mysite.com 2>&1 | awk 'BEGIN { cert=0 } /^\* Server certificate:/ { cert=1 } /^\*/ { if (cert) print }'
* Server certificate:
*  subject: CN=gitlab.mysite.com
*  start date: Nov 12 14:36:12 2021 GMT
*  expire date: Feb 10 14:36:11 2022 GMT
*  issuer: C=US; O=Let's Encrypt; CN=R3
*  SSL certificate verify result: certificate has expired (10), continuing anyway.

但是,当我从浏览器加载网站或在另一台服务器上使用 curl 时,我没有收到此证书过期错误。 仅在托管 gitlab ce 实例的服务器上本地使用 curl 时才会出现此错误。

这是在另一台服务器上使用 curl 时的结果:

* Server certificate:
*  subject: CN=gitlab.mysite.com
*  start date: Nov 12 14:36:12 2021 GMT
*  expire date: Feb 10 14:36:11 2022 GMT
*  issuer: C=US; O=Let's Encrypt; CN=R3
*  SSL certificate verify ok.

是否有可能因为 curl 解析为本地网站(解析的 ip = 127.0.1.1)而出现问题?

答案1

我的 Ubuntu 16.04 机器 curl 7.47.0 上出现了这些症状(在浏览器上有效,在 Curl 上失败)。

就我的情况而言,该问题确实是由 Let's Encrypt 证书过期引发的(正如 Bob 所提到的),但实际上是由漏洞关于 OpenSSL 处理多路径证书树。

Ubuntu 16.04

OpenSSL 上的这个问题已在 Ubuntu 16.04 软件包的 1.0.2g-1ubuntu4.20 版本(截至今天的最新版本)中得到修补(请参阅更新日志这里)。

如果您使用的是 Ubuntu 16.04,请尝试将 OpenSSL 更新到最新版本。如果您使用的是其他系统,请检查您的 OpenSSL 版本。1.1.x 之前的版本存在问题并需要“修补”(如上文提到的 Ubuntu 发行版所做的那样)。如果您无法转而使用修复了问题的 OpenSSL 版本,那么您可以禁用导致问题的证书。如何禁用证书将取决于您的操作系统/发行版。

Debian 9.3

(更新答案 - 一旦 OP 将操作系统标识为 Debian 9.3)
对于 Debian 9.3,这似乎是一个重复的问题(我没有足够的权限将其标记为这样)。
Debian 9 上的客户端错误地报告 letsencrypt 颁发的域的证书已过期
并且 OP 成功应用了这个答案(这相当于我上面针对 Ubuntu 16.04 的建议):
https://serverfault.com/a/1080278/473319

更多信息

以下页面可以提供更多背景信息和指示,以便更好地理解该问题。https://scotthelme.co.uk/lets-encrypt-old-root-expiration/

相关内容