我正在使用Ruby on Rails 3,我希望有一个“中心位置”,可以在我的应用程序中明确设置SSL证书。
几乎在代码中的任何地方我都有这样的HTTPS请求
e = Typhoeus::Request.get("https://example.com/action",
:ssl_cacert => "ca_file.cer",
:ssl_cert => "acert.crt",
:ssl_key => "akey.key",
[...]
end
因此,为了为我的所有请求指定SSL证书,我想设置一个全局变量(我听说全局变量可能很危险......)或类似的东西以安全的方式。
答案 0 :(得分:2)
您可以构建一个SSL帮助程序类,并使用它(我将它放在lib中,但这主要只是用户首选项):
class MySSL
SSL_DEFAULTS = {
:ssl_cacert => 'ca_cert.cer',
:ssl_cery => 'acert.crt',
:ssl_key => 'akey.key'
}
def self.get(uri, options = {})
options.reverse_merge!(SSL_DEFAULTS)
Typhoeus::Request.get(uri, options)
end
# And so forth for post, etc.
end
其中reverse_merge!是一个方便的Rails扩展,为哈希提供默认选项(如果原始哈希已经具有这些键,则不会覆盖它们)。您也可以通过使用类常量来避免设置全局变量。在其余代码中,您可以调用
MySSL.get('https://example.com/action')
或
MySSL.get('https://example.com/action', :other => :options)
相比之下,它更清洁了。
希望这有帮助!
答案 1 :(得分:0)
您可以使用OpenSSL::SSL::SSLContext::DEFAULT_CERT_STORE
方法#add_file
和#add_path
将其设置在默认的证书存储区中;这将被几乎所有不会覆盖它的东西所吸引,特别是Net :: HTTP。我不确定Typhoeus,但它应该有效,只要它不会改变它。