gpt4 book ai didi

ruby-on-rails - Rails.application.initialize 后 Rails ssl 证书验证失败

转载 作者:太空宇宙 更新时间:2023-11-03 14:40:13 25 4
gpt4 key购买 nike

从 Rails 控制台(或一般的 Rails 环境)对 SSL 站点运行 get 调用时,我收到 SSL 验证错误。

OpenSSL::SSL::SSLError: SSL_connect returned=1 errno=0 state=error: certificate verify failed

我从头到尾跟踪了整个 Rails 应用程序初始化过程,从 config.ru 一直到需要环境文件等。

SSL 错误仅在我在 config/environment.rb 中运行 Rails.application.initialize! 后才开始发生

我从系统中清除了所有 ruby​​ gem,并且只从 Gemfile 安装了那些,因此在初始化过程之前/之后不可能需要不同的 gem 版本。

我知道短期解决方案是将我的 HTTPS 调用设置为不验证它获得的证书,但由于生产环境中的安全问题,这是不可能的。

鉴于我运行时,问题似乎与 SNI(服务器名称指示)有关

openssl s_client -connect sub.domain.com:443 -showcerts -servername sub.domain.com

我获得了正确的 CERT,但是当我运行时

openssl s_client -connect sub.domain.com:443 -showcerts

我获得了 sub2.domain.com 的证书,这就是验证失败的原因。 Rails init 进程如何更改这些内容?如果是,是否可以选择告诉 Rails 使用 SNI?

  • Rails v4.2.5.2
  • ruby 2.3.3p222(2016-11-21 修订版 56859)[x86_64-linux]
  • 操作系统:Fedora 25
  • ca-certificates-2017.2.11-1.1.fc25_2017.2.14-1.0.fc25.noarch.drpm:完成

最佳答案

最终这不是 Rails 问题,而是 google-api-client gem 问题。为了在 Windows 环境中工作,我们通过初始化文件从 google api gem 加载了 cacerts.pem 文件。

config/initializers/ga.rb:

cert_path = Gem.loaded_specs['google-api-client'].full_gem_path+'/lib/cacerts.pem'
ENV['SSL_CERT_FILE'] = cert_path

这会将 CA 文件解析为

"/home/user/appname/vendor/bundle/ruby/2.3.0/gems/google-api-client-0.11.1/lib/cacerts.pem"

并且不支持 LetsEncrypt 生成的 SSL 证书的 SNI。

关于ruby-on-rails - Rails.application.initialize 后 Rails ssl 证书验证失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43896200/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com