【问题标题】:cert in /etc/ssl/cert.pem expired today (MacOS Mojave)/etc/ssl/cert.pem 中的证书今天过期(MacOS Mojave)
【发布时间】:2020-05-30 13:26:16
【问题描述】:

存储在 /etc/ssl/cert.pem 中的证书今天在我的 Mojave 计算机上过期,这导致我的 curl 命令出现问题。反正有更新吗?我看到我的 Catalina 计算机具有更新的证书。我可以把它复制到我的 Mojave 电脑上吗?

【问题讨论】:

    标签: ssl ssl-certificate


    【解决方案1】:

    昨天,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 钥匙串导出的证书:

    1. 备份旧的/etc/ssl/cert.pem
    sudo cp /etc/ssl/cert.pem{,-orig}
    
    1. 导出系统钥匙串并替换/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环境变量配置这个文件的位置。

    【讨论】:

    • 我在 OSX Mojave 上,它通过从 /etc/ssl/cert.pem 中删除过期的根证书帮助我解决了这个问题。谢谢!
    【解决方案2】:

    我试过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
    

    这解决了我的问题。

    【讨论】:

    • 您不能使用 Homebrew 来修复您机器上的 Let's Encrypt 证书,因为 Let's Encrypt 证书不起作用,而且 Homebrew 的某些部分可能依赖它们。
    【解决方案3】:

    对于 2022/02 年的 Mojave,这里有一个简单的解决方案:

    1. 在您的 macOS 中备份/etc/ssl/cert.pem 的当前版本。
    2. 下载new CA certificatecurl.se官方推荐),重命名为cert.pem
    3. 用新的替换原来的:sudo mv cert.pem /etc/ssl/cert.pem

    【讨论】:

      【解决方案4】:

      我认为您对 AddTrust CA 有疑问

      你需要做什么 对于大多数用例,包括服务于现代客户端或服务器系统的证书,无需任何操作,无论您是否颁发了跨链到 AddTrust 根的证书。

      自 2020 年 4 月 30 日起:对于依赖于非常旧系统的业务流程,Sectigo 提供了(默认情况下在证书包中)用于交叉签名的新旧根,即“AAA 证书服务”根。但是,对于依赖于非常旧的遗留系统的任何进程,请格外小心。未收到支持更新根(如 Sectigo 的 COMODO 根)所需更新的系统将不可避免地缺少其他重要的安全更新,应被视为不安全。如果您仍想交叉签名到 AAA 证书服务根,请直接联系 Sectigo。

      https://support.sectigo.com/articles/Knowledge/Sectigo-AddTrust-External-CA-Root-Expiring-May-30-2020

      【讨论】:

        【解决方案5】:

        到目前为止,我能找到的唯一可行的解​​决方案就是升级到 Catalina。以上建议都不起作用,因为即使 Homebrew 也被破坏了,因为他们的大多数镜像都使用 Let's Encrypt 证书。将新的 ISRG Root X1 证书文件从 http://x1.i.lencr.org/ 添加到系统钥匙串并导出到新的 /etc/ssl/cert.pem 甚至不能解决问题。

        【讨论】:

        • 不是真的 Michael Lee 解决方案有帮助。无论如何,是时候创建支持 Mojave 的 Homebrew 替代品了,而无需升级到垃圾剥离的操作系统版本
        猜你喜欢
        • 1970-01-01
        • 2014-10-14
        • 2016-06-26
        • 2014-03-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-14
        • 2012-01-31
        相关资源
        最近更新 更多