gpt4 book ai didi

ruby-on-rails-3 - OpenSSL + 自签名证书 = OpenSSL::SSL::SSLError: SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed

转载 作者:太空宇宙 更新时间:2023-11-03 12:56:57 32 4
gpt4 key购买 nike

我一直在尝试为我们的内部 Rails 应用程序使用 SSL (SAN) 证书。

我已经使用 OpenSSL 创建了证书文件,并让它们与 Apache 很好地协同工作:

<VirtualHost *:443>
ServerName server-name
RailsEnv uat

DocumentRoot /var/www/server-name/current/public
<Directory /var/www/server-name/current/public>
AllowOverride All
Options -MultiViews
</Directory>

SSLEngine on
SSLCertificateFile /etc/apache2/ssl/hostname.cer
SSLCertificateKeyFile /etc/apache2/ssl/hostname.key
</VirtualHost>

这很好用。

我的问题是在使用 open-uri 与某些 Rails Controller 通信时,我收到错误消息:

require "net/https"

uri = URI.parse("https://server-name.domain.com/controller.json?date=2013-09-03")
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
http.start {
http.request_get(uri.path) {|res|
print res.body
}
}

OpenSSL::SSL::SSLError: SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed

我看过很多 StackOverflow 文章,建议简单地关闭 SSL 验证,使用:

http.verify_mode = OpenSSL::SSL::VERIFY_NONE

但我不认为这是一种令人满意的方法。我还看到一些文章建议我需要将 open-uri 指向 /etc/ssl/certs/ca-certificates.crt ,这显然是针对公共(public)证书的。因此,对于我的自签名证书,我尝试了以下操作:

uri = URI.parse("https://server-name.domain.com/controller.json?date=2013-09-03") 
http = Net::HTTP.new(uri.host, uri.port)
if uri.scheme == "https" # enable SSL/TLS
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_PEER
http.ca_file = "/etc/apache2/ssl/host-name.cer"
end
http.start {
http.request_get(uri.path) {|res|
print res.body
}
}

哪个有效。

我的问题是,除了当前搜索路径之外,我如何告诉 OpenSSL/OpenURI 始终查看 /etc/apache2/ssl/ 目录?我不想在我发出的每个请求中指定路径(这将随着主机名的变化而变化,具体取决于我们工作的位置)。

谢谢

最佳答案

摘自here :

If there’s already a CA bundle on disk that you want to use, point SSL_CERT_FILE or SSL_CERT_DIR environment variables to it, or set the ca_file= or ca_path= properties in Net::HTTP.

所以你所要做的就是这个

ENV['SSL_CERT_FILE'] = "your certificate path"

一切都应该有效。

您可能会发现此资源很有用:

关于ruby-on-rails-3 - OpenSSL + 自签名证书 = OpenSSL::SSL::SSLError: SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18592650/

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