rwb*_*rwb 3 openssl ruby-on-rails ssl-certificate ruby-on-rails-3
关于使用SSL证书部署Rails应用程序,我有几个问题.
背景:
根据https://gist.github.com/fnichol/867550,使用Ruby的Windows客户端net/http不信任Ubuntu服务器上的证书.我假设这是因为SSL_CERT_FILE没有设置环境变量(尽管内部根证书安装在Ubuntu服务器上并通过组策略部署到Windows客户端..?)
我希望能够从我的应用程序的任何客户端(Windows或Ubuntu)运行以下代码片段
require 'net/http'
uri = URI.parse('https://ubuntu-server.internal.com/')
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
http.start { |agent| agent.get(uri.path) }
Run Code Online (Sandbox Code Playgroud)
我应该将内部CA根证书(和中间证书,以及CURL证书捆绑的其余部分)与应用程序捆绑在一起,然后ENV['SSL_CERT_FILE']在代码中设置吗?)
我应该只在应用程序中包含内部CA根证书,并使用初始化程序在使用前设置net/http吗?这似乎是RubyInstaller https://github.com/oneclick/rubyinstaller/blob/master/rake/contrib/uri_ext.rb#L287-295的方法,但我真的不知道如何编写这个?
别的什么?
到目前为止,选项2对我来说似乎是最好的,但正如我所说,我不知道我将如何设置
http.use_ssl = true
http.ca_file = "#{Rails.root}/config/internal-ca.crt"
Run Code Online (Sandbox Code Playgroud)
在Rails初始化程序中.
任何帮助/建议将不胜感激.
谢谢
所以,通过一些进一步的谷歌搜索,我提出了以下解决方案:
# /config/initializers/ssl.rb
require 'open-uri'
require 'net/https'
module Net
class HTTP
alias_method :original_use_ssl=, :use_ssl=
def use_ssl=(flag)
store = OpenSSL::X509::Store.new
store.set_default_paths
store.add_cert(OpenSSL::X509::Certificate.new(File.read("#{Rails.root}/config/ssl/root.crt")))
store.add_cert(OpenSSL::X509::Certificate.new(File.read("#{Rails.root}/config/ssl/intermediate.crt")))
self.cert_store = store
self.verify_mode = OpenSSL::SSL::VERIFY_PEER
self.original_use_ssl = flag
end
end
end
Run Code Online (Sandbox Code Playgroud)
来源
这似乎对我有用,但我对其他建议持开放态度.
| 归档时间: |
|
| 查看次数: |
1257 次 |
| 最近记录: |