我在SO和博客文章中看到的很多内容都是
但是,我发现这不是完全必要的。在我的Mac上,我有以下代码
http = Net::HTTP.new('www.google.com', 443)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_PEER
http.start do
http.request_get('/') do |response|
puts response.body
end
end
这很有效。但Ruby使用什么来验证对等体?当我查看http.ca_path
和http.ca_file
的输出时,它们都是空白的。
我在Ruby 1.9.3p374中运行此代码。也许当Ruby在我的Mac上编译时,它从openssl或其他东西中提取了一些CA证书链的默认位置?
答案 0 :(得分:1)
如果没有设置验证回调,则使用OpenSSL库默认回调。参见the openssl module verify callback wrapper中的第217行(ok
参数是默认回调的结果。)
在OS X上,Apple显然已经在其OpenSSL库中定制了默认回调以挂接到OS X Keychain工具。 Google证书的根CA是Equifax安全证书颁发机构。如果您更改此CA的Keychain中的信任设置(例如,使用Keychain Access实用程序),那么您的ruby测试会相应地运行。
我相信您的问题的答案是,当需要对等证书验证但未配置时,OS X附带的ruby会使用Keychain进行验证。