ruby - ruby docker 映像中过期的 ca 证书(2.6.8-bullseye)
问题描述
上周五,我开始在这个docker 镜像上的 ruby 上看到问题(在一个已经运行了几个月的环境中)这个问题:
RestClient::SSLCertificateNotVerified: SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed
然后我继续尝试添加自定义 PEM ( wget https://curl.se/ca/cacert.pem
) 以链接环境变量SSL_CERT_FILE
(如许多其他堆栈溢出问题中所述)。
但我得到:
bash-4.4# wget https://curl.se/ca/cacert.pem
Connecting to curl.se (151.101.2.49:443)
ssl_client: curl.se: certificate verification failed: certificate has expired
wget: error getting response: Connection reset by peer
我尝试将文件保存在本地计算机上,然后docker cp
将其保存到容器中,但这也无济于事。
我尝试使用以下命令运行控制台:
bash-4.4# SSL_CERT_FILE=/cacert.pem bundle exec rails c
irb(main):001:0> RestClient.get('https://curl.se/ca/cacert.pem', headers={})
RestClient.get "https://curl.se/ca/cacert.pem", "Accept"=>"*/*", "Accept-Encoding"=>"gzip, deflate", "User-Agent"=>"rest-client/2.0.2 (linux-musl x86_64) ruby/2.3.8p459"
RestClient::SSLCertificateNotVerified: SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed
我尝试update-ca-certificates
在控制台和 dockerfile 中手动运行,但我得到:
bash-4.4# update-ca-certificates
WARNING: ca-certificates.crt does not contain exactly one certificate or CRL: skipping
当我尝试将 cacert.pem 复制到上述容器中时,update-ca-certificates
也向该文件添加了警告,类似于 ca-certificates.crt 。
这个问题似乎没有任何改善。
跑步
curl -Lks 'https://git.io/rg-ssl' | ruby
说一切都好,并且所有(3)个绿色检查
有任何想法吗?
谢谢。
更新
我认为这个问题可能与让加密过期他们的根证书有关,我尝试了他们推荐的第一个解决方法,通过删除容器上的文件,并在 dockerfile 上删除它,然后运行update-ca-certificates
它也没有帮助。我不确定如何处理其他两种解决方法。
解决方案
如果您使用的是 debian 9,我建议您更新它。否则,这是我的图像的解决方案。
# Temporarily fix wrong let's encrypt R3 chain because it's chained to an expired old root CA (DST Root CA X3) on debian 9
RUN sed -i -E 's/(.*DST_Root_CA_X3.*)/!\1/' /etc/ca-certificates.conf
ADD https://letsencrypt.org/certs/isrgrootx1.pem /usr/local/share/ca-certificates/isrgrootx1.pem
RUN update-ca-certificates
仅供参考:OpenSSL 1.0.2g 上有一个错误会导致问题https://www.openssl.org/blog/blog/2021/09/13/LetsEncryptRootCertExpire/一些平台已经发布了解决方法,您只需要升级最新的 ca 证书和最新的 libgnutls30。如果您可以升级到更新的 OpenSSL,那就更好了。
推荐阅读
- android - macOS Catalina 上的 AOSP 存储库同步失败
- php - php静态函数类保存以前的函数调用数据
- java - 无法使用 XPath 定位嵌套文本
- c++ - 当 Table1.COL = Table2.Col 时从 Table1 中删除行
- visual-studio-2019 - 当 Configuration 设置为 RELEASE 时,为什么 Visual Studio 2019 在构建期间会在 DEBUG 文件夹中查找文件?
- firebase - Firebase 规则限制写入不起作用
- css - 如何使 Ant Design 表响应式
- swift - 在 Combine 中按顺序链式网络调用
- javascript - How to call a function using variable in javascript without using window?
- javascript - JS 文件未正确链接到 HTML 文件