【发布时间】:2020-05-30 13:26:16
【问题描述】:
存储在 /etc/ssl/cert.pem 中的证书今天在我的 Mojave 计算机上过期,这导致我的 curl 命令出现问题。反正有更新吗?我看到我的 Catalina 计算机具有更新的证书。我可以把它复制到我的 Mojave 电脑上吗?
【问题讨论】:
标签: ssl ssl-certificate
存储在 /etc/ssl/cert.pem 中的证书今天在我的 Mojave 计算机上过期,这导致我的 curl 命令出现问题。反正有更新吗?我看到我的 Catalina 计算机具有更新的证书。我可以把它复制到我的 Mojave 电脑上吗?
【问题讨论】:
标签: ssl ssl-certificate
昨天,Let's Encrypt DST Root CA X3 根证书过期,这导致了与您遇到的类似问题:curl 显示 SSL 证书问题:证书已过期 尝试使用新的 Let's Encrypt ISRG Root X1 证书访问网站时出错。
在 macOS Mojave(可能还有其他,但这是我使用的)上,默认 curl 在验证 TLS 连接时使用 /etc/ssl/cert.pem 中的证书(您可以通过运行 curl -v https://example.com 2>&1 | grep CAfile 来确认这一点)。
最简单的修复方法是从/etc/ssl/cert.pem 文件中删除过期的根证书,假设文件中已经存在替换它的内容。这足以修复过期的DST Root CA X3,因为它的替换ISRG Root X1 已经存在于/etc/ssl/cert.pem 文件中。删除从### Digital Signature Trust Co. 到-----END CERTIFICATE----- 的所有行。
如果您需要将/etc/ssl/cert.pem 完全替换为更新的证书,您可以将其替换为从 macOS System Roots 钥匙串导出的证书:
/etc/ssl/cert.pem:sudo cp /etc/ssl/cert.pem{,-orig}
/etc/ssl/cert.pem的内容:security find-certificate -a -p /System/Library/Keychains/SystemRootCertificates.keychain | sudo tee /etc/ssl/cert.pem >/dev/null
或者,您可以告诉 curl 使用不同的证书文件,如下所示:
curl -I --cacert /path/to/certificates.pem https://example.com/
或者使用CURL_CA_BUNDLE=/path/to/certificates.pem环境变量配置这个文件的位置。
【讨论】:
我试过Quinn Comendant's solution,但没用。
我最终通过安装 OpenSSL 并将 cert.pem 文件链接到 OpenSSL 下的文件(在 MacOS Mojave 中)解决了这个问题:
$ sudo cp /etc/ssl/cert.pem /etc/ssl/cert.pem.bak
$ brew install openssl
$ brew info openssl
openssl@3: stable 3.0.0 (bottled) [keg-only]
Cryptography and SSL/TLS Toolkit
https://openssl.org/
/usr/local/Cellar/openssl@3/3.0.0 (6,415 files, 28MB)
Poured from bottle on 2021-10-04 at 11:13:17
From: https://github.com/Homebrew/homebrew-core/blob/HEAD/Formula/openssl@3.rb
License: Apache-2.0
==> Caveats
A CA file has been bootstrapped using certificates from the system
keychain. To add additional certificates, place .pem files in
/usr/local/etc/openssl@3/certs
...
由此我们可以知道配置在/usr/local/etc/openssl@3,那么:
$ sudo rm /etc/ssl/cert.pem
$ sudo ln -s /usr/local/etc/openssl@3/cert.pem /etc/ssl/cert.pem
这解决了我的问题。
【讨论】:
对于 2022/02 年的 Mojave,这里有一个简单的解决方案:
/etc/ssl/cert.pem 的当前版本。cert.pem。sudo mv cert.pem /etc/ssl/cert.pem。【讨论】:
我认为您对 AddTrust CA 有疑问
你需要做什么 对于大多数用例,包括服务于现代客户端或服务器系统的证书,无需任何操作,无论您是否颁发了跨链到 AddTrust 根的证书。
自 2020 年 4 月 30 日起:对于依赖于非常旧系统的业务流程,Sectigo 提供了(默认情况下在证书包中)用于交叉签名的新旧根,即“AAA 证书服务”根。但是,对于依赖于非常旧的遗留系统的任何进程,请格外小心。未收到支持更新根(如 Sectigo 的 COMODO 根)所需更新的系统将不可避免地缺少其他重要的安全更新,应被视为不安全。如果您仍想交叉签名到 AAA 证书服务根,请直接联系 Sectigo。
【讨论】:
到目前为止,我能找到的唯一可行的解决方案就是升级到 Catalina。以上建议都不起作用,因为即使 Homebrew 也被破坏了,因为他们的大多数镜像都使用 Let's Encrypt 证书。将新的 ISRG Root X1 证书文件从 http://x1.i.lencr.org/ 添加到系统钥匙串并导出到新的 /etc/ssl/cert.pem 甚至不能解决问题。
【讨论】: