1

我有一个 ruby​​ on rails 应用程序,当我尝试运行捆绑安装时抛出错误。错误如下:

捆绑标准输出:无法验证https://rails-assets.org/的 SSL 证书您有可能遇到中间人攻击,但很可能您的系统没有所需的 CA 证书用于验证

我们的 SSL 证书在几天前刚刚更新,我们没有更改应用程序中的任何内容。它开始突然抛出这个错误。

我们是否需要更新系统中的根证书?我的意思是像运行 sudo update-ca-certificates 或类似的东西?这样做安全吗?

该应用程序位于 digitalOcean 中,我们使用 capistrano gem 来部署该应用程序

@lingYan 非常感谢您指引我正确的方向!我阅读了您发布的链接,但就我而言,我不得不稍微更改步骤,因为我不在 Centos-7 上。所以这正是我所做的:

  • 在 /etc/ssl/certs 中备份了证书文件:

    cp ca-certificates.crt ~/certificatesBackup/ca-certificates-backup.crt

  • 在 /etc 中备份了配置文件:

    cp ca-certificates.conf ~/certificatesBackup/ca-certificates-backup.conf

  • 在 /etc/ssl/certs 中备份了过期证书:

    cp DST_Root_CA_X3.pem ~/certificatesBackup/DST_Root_CA_X3_backup.pem

  • 从 ca-certificates.conf 中删除了 DST_Root_CA_X3.pem:

    我用 vim 打开文件并删除了该行

  • 删除了 /etc/ssl/certs 中的过期证书:

    sudo rm DST_Root_CA_X3.pem

  • 更新的证书:

    更新 CA 证书 -f -v

  • 检查是否已从 ca-certificates.crt 中的链中删除过期证书:

    diff ~/certificatesBackup/ca-certificates-backup.crt ca-certificates.crt

    它显示了新证书

完成上述所有步骤后它仍然抛出错误,所以我意识到我没有 ISRG 根 CA 证书。为了添加 ISRG 根 CA,我执行了以下操作(我认为这是不正确的,或者我可能遗漏了一些东西):

  • 转到此页面https://letsencrypt.org/certificates/并下载名为 ISRG Root X1 的文件(自签名/pem 格式)
  • 去 /usr/local/share/ca-certificates/
  • 创建了一个名为 isrgrootx1 的新文件夹
  • 将我之前下载的pem文件复制到isrgrootx1文件夹中
  • 确保权限正常(文件夹为 755,文件为 644)
  • 使用 update-ca-certificates -f -v 更新证书
  • 检查是否使用 diff 命令添加了证书:当我运行 diff 命令时,它没有显示任何更改,所以我猜证书没有添加并且错误仍然存​​在

我做错了吗?上述步骤是否正确添加新证书?我开始对此感到沮丧:(

4

1 回答 1

0

我检查了https://rails-assets.org/的证书,它由 LetsEncrypt 签名,并且来自 LetsEncrypt 的根 CA 之一已过期,这将是您的问题的原因。

要理解这个问题:

https://www.openssl.org/blog/blog/2021/09/13/LetsEncryptRootCertExpire/ https://letsencrypt.org/docs/dst-root-ca-x3-expiration-september-2021/

可能的解决方案: https ://blog.devgenius.io/rhel-centos-7-fix-for-lets-encrypt-change-8af2de587fe4

基本上,如果这是原因,您需要删除 DST 根 CA 并确保 ISRG 根 CA 在您的证书存储中。

对于 ubuntu 或 Debian 系统,以下文档描述了如何更新证书:/usr/share/doc/ca-certificates/README.Debian

  1. 运行以下命令为您自己的受信任的 ca 证书创建目录: sudo mkdir /usr/local/share/ca-certificates/extra
  2. 将根证书复制到新目录: sudo cp rootCA.crt /usr/local/share/ca-certificates/extra/ 确保证书文件具有 .crt 扩展名。
  3. 运行以下命令以更新系统证书: sudo update-ca-certificates
于 2021-10-28T04:48:02.593 回答