运行 在 ruby 中安装 rails 应用程序时无法验证 SSL 证书错误
Could not verify the SSL certificate error when running bundle install in ruby on rails app
我在 rails 应用程序上有一个 ruby,在我尝试 运行 捆绑安装时抛出错误。错误如下:
bundle stdout:无法验证 https://rails-assets.org/ 的 SSL 证书 您有可能遇到中间人攻击,但大多数
可能您的系统没有验证所需的 CA 证书
我们的 SSL 证书是几天前更新的,我们没有对应用程序进行任何更改。它开始突然抛出这个错误。
我们是否需要更新系统中的根证书?我的意思是像 运行ning sudo update-ca-certificates 之类的?这样做安全吗?
该应用程序在 digitalOcean 中,我们使用 capist运行o 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:
中从链中删除
差异 ~/certificatesBackup/ca-certificates-backup.crt
ca-certificates.crt
它显示了新证书
在执行了上述所有步骤后它仍然抛出错误,所以我意识到我没有 ISRG 根 CA 证书。为了添加 ISRG Root 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 命令没有显示任何变化所以我猜
未添加证书,错误仍然存在
我是不是做错了什么?上述步骤是否正确添加新证书?我开始对此感到沮丧:(
我检查了 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
- 运行 以下命令为您自己的受信任 ca 证书创建一个目录:
sudo mkdir /usr/local/share/ca-certificates/extra
- 将根证书复制到新目录:
sudo cp rootCA.crt /usr/local/share/ca-certificates/extra/
确保证书文件具有 .crt 扩展名。
- 运行执行以下命令更新系统证书:
sudo update-ca-certificates
我在 rails 应用程序上有一个 ruby,在我尝试 运行 捆绑安装时抛出错误。错误如下:
bundle stdout:无法验证 https://rails-assets.org/ 的 SSL 证书 您有可能遇到中间人攻击,但大多数 可能您的系统没有验证所需的 CA 证书
我们的 SSL 证书是几天前更新的,我们没有对应用程序进行任何更改。它开始突然抛出这个错误。
我们是否需要更新系统中的根证书?我的意思是像 运行ning sudo update-ca-certificates 之类的?这样做安全吗?
该应用程序在 digitalOcean 中,我们使用 capist运行o 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:
中从链中删除差异 ~/certificatesBackup/ca-certificates-backup.crt ca-certificates.crt
它显示了新证书
在执行了上述所有步骤后它仍然抛出错误,所以我意识到我没有 ISRG 根 CA 证书。为了添加 ISRG Root 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 命令没有显示任何变化所以我猜 未添加证书,错误仍然存在
我是不是做错了什么?上述步骤是否正确添加新证书?我开始对此感到沮丧:(
我检查了 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
- 运行 以下命令为您自己的受信任 ca 证书创建一个目录:
sudo mkdir /usr/local/share/ca-certificates/extra
- 将根证书复制到新目录:
sudo cp rootCA.crt /usr/local/share/ca-certificates/extra/
确保证书文件具有 .crt 扩展名。 - 运行执行以下命令更新系统证书:
sudo update-ca-certificates