Jul*_*ien 5 openssl ruby-on-rails lets-encrypt
我有一个小型 Rails 应用程序,可以在我们的平台上执行各种检查,并在出现问题时向我发送电子邮件。一切都运行良好,直到今天我开始收到有关以下错误的警报:
SSL_connect returned=1 errno=0 state=error: certificate verify failed (certificate has expired)
Run Code Online (Sandbox Code Playgroud)
现在的问题是,有问题的证书是有效的,它会自动更新(让我们加密),并且此代码已经好几年没有被修改过,之前从未出现过任何问题,突然之间就开始发生这种情况。
抛出异常的代码:
def get_request url
uri = URI.parse(url)
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
#more than 10 seconds this is too slow
http.open_timeout = 10
http.read_timeout = 10
request = Net::HTTP::Get.new(uri.request_uri)
response = http.request(request)
if response.code.to_i == 200
return true
else
puts "Failed to GET #{url}: #{response.code.to_i}"
return false
end
end
Run Code Online (Sandbox Code Playgroud)
如果我在浏览器中打开该站点,它会显示安全连接,没有问题,并显示正在使用有效的证书,此外,如果我检查,certbot我会得到以下信息:Expiry Date: 2021-11-22 17:48:58+00:00 (VALID: 52 days)很明显,证书是有效的,为什么 Rails 突然发脾气它?
请注意,我已经重新启动了 Nginx,以防万一,但这没有帮助。
其他信息:Ubuntu 16.04.5、OpenSSL 1.0.2g 2016 年 3 月 1 日、Rails 4.2、Ruby 2.6.5
编辑:
使用不同的 url(也具有有效证书)也会发生此错误。
编辑2:
我已经隔离了该问题,它与已过期的 Let's Encrypt DST Root CA X3 有关。很多人都在处理这个问题,一旦找到解决方案,我会报告我的解决方案。
因此,在阅读了 Let's Encrypt 社区的这个长帖子之后,我的案例的解决方案最终是删除证书DST Root CA X3:
sudo rm /usr/share/ca-certificates/mozilla/DST_Root_CA_X3.crt
sudo update-ca-certificates
Run Code Online (Sandbox Code Playgroud)
之后 openssl 就不再出现错误。
| 归档时间: |
|
| 查看次数: |
2796 次 |
| 最近记录: |