【问题标题】:Why don't I need to specify a CA bundle to Net::HTTP SSL requests?为什么我不需要为 Net::HTTP SSL 请求指定 CA 捆绑包?
【发布时间】:2013-07-01 13:14:19
【问题描述】:

我在 SO 和博客文章中看到的很多内容是

  1. 默认情况下,Net::HTTP 不验证对等 SSL 证书
  2. 要强制 Net::HTTP 验证对等方,您也需要对其进行验证并提供包含受信任机构的 CA 证书文件

但是,我发现这并不是完全必要的。在我的 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_pathhttp.ca_file 的输出时,它们都是空白的。

我在 Ruby 1.9.3p374 中运行此代码。也许当在我的 Mac 上编译 Ruby 时,它会从 openssl 或其他什么地方拉入 CA 证书链的某个默认位置?

【问题讨论】:

    标签: ruby ssl openssl net-http


    【解决方案1】:

    看起来如果没有设置验证回调,则使用 OpenSSL 库默认回调。请参见the openssl module verify callback wrapper 中的第 217 行(ok 参数是默认回调的结果)。

    在 OS X 上,Apple 显然已经在其 OpenSSL 库中自定义了默认回调,以连接到 OS X 钥匙串设施。 Google 证书的根 CA 是 Equifax Secure Certificate Authority。如果您更改此 CA 的 Keychain 中的信任设置(例如,使用 Keychain Access 实用程序),那么您的 ruby​​ 测试会相应地运行。

    我相信您的问题的答案是,当需要对等证书验证但未配置时,OS X 附带的 ruby​​ 使用钥匙串进行验证。

    【讨论】:

      猜你喜欢
      • 2020-09-01
      • 1970-01-01
      • 2020-08-12
      • 1970-01-01
      • 1970-01-01
      • 2010-11-02
      • 2017-02-24
      • 2014-05-24
      • 1970-01-01
      相关资源
      最近更新 更多