【问题标题】:Disable SNI Extension for Ruby net/http - Using IP address with SSL/TLS禁用 Ruby net/http 的 SNI 扩展 - 将 IP 地址与 SSL/TLS 一起使用
【发布时间】:2015-11-12 21:01:16
【问题描述】:

我有一个在 IP 范围内的一组服务器上运行的 Ruby 轮询脚本。我非常强烈更喜欢通过 IP 地址而不是主机名进行轮询,因为:

1) 我已经定义了要轮询的 IP 地址范围,并且主机名是任意的/更改很多

2) 因为它们变化很大,大多数主机名没有反向 DNS 查找,所以我无法设计来自 IP 的主机名列表

在我们的网络服务器对此轮询没有问题之前,但在不接受 SSLv3 通信的新服务器上,这是我运行轮询时遇到的错误:

/home/dashboard/.rvm/rubies/ruby-2.1.6/lib/ruby/2.1.0/net/http.rb:923:in `connect': SSL_connect returned=1 errno=0 state=unknown state: tlsv1 unrecognized name (OpenSSL::SSL::SSLError)

在服务器端,这是错误:

nss_engine_init.c(1802): start function ownSSLSNISocketConfig for SNI
nss_engine_init.c(1827): Search [val = 172.16.99.18] failed, unrecognized name

当我使用主机名运行投票时,一切正常。

这里是 Ruby 中 HTTP 客户端代码的关键:

def init_http(url)
  uri = URI.parse(url)
  http = Net::HTTP.new(uri.host, uri.port)
  http.verify_mode = OpenSSL::SSL::VERIFY_PEER
  http.read_timeout = 10
  http.use_ssl = true
  #http.ssl_version = 'TLSv1'
  return [http, uri]
end

如您所知,我一直在使用 TLS 和 SSL 版本,因为我认为这可能是问题所在。我的下一个想法(谷歌只有 Java 的证据)是,“在我的客户端上禁用 SNI 扩展有多容易?”更普遍的问题是,“我能否继续在 Ruby net/http 中使用 IP 地址,同时利用更新、更安全的通信协议?”

【问题讨论】:

    标签: ruby ssl httpclient


    【解决方案1】:

    ... tlsv1 无法识别的名称(OpenSSL::SSL::SSLError)

    在大多数情况下,这不是您可以通过在客户端禁用 SNI 来解决的问题。当您在同一个 IP 地址上有多个证书时需要 SNI,并且如果您只是通过 IP 地址连接并且不发送请求的主机名(即禁用 SNI),服务器将不知道它应该提供哪个证书 - 这会导致以上错误。

    我非常喜欢按 IP 地址进行轮询,而不是按主机名,...

    如果您必须处理需要 SNI 的服务器,那么您必须使用 SNI,并且您必须使用具有正确主机名的 SNI,这不一定与您从反向查找中获得的名称相同。

    【讨论】:

    • 嗯,我认为有希望的原因是因为我不相信服务器需要 SNI。我可以使用 IE 和 Chrome 通过 IP 访问服务器。到目前为止,只有 Ruby 民意调查存在此问题。所以在我看来,是客户端强制或建议使用 SNI。
    • @ZebGir:如果我正确理解代码,他们会将 SNI 主机名设置为您提供的任何地址,并且无法禁用 SNI。另见bug 10613 开放 10 个月。该错误还有一个补丁,因此您可以在安装中修复它。
    【解决方案2】:

    解决此问题的最简单方法是添加@steffenullrich 为bug 10613 提到的补丁。

    我所做的只是查看差异,并自己编辑文件,但如果您熟悉 Linux 补丁工具,则可以使用它。

    对于那些不确定 /net/http.rb 位于何处的人,它与您的其他 Ruby 源位于同一位置。例如,我在这里:

    /home/myuser/.rvm/rubies/ruby-2.1.6/lib/net/http.rb

    修补文件后,将 HTTP 对象的 .disable_sni 属性设置为 true,这样就不需要 SNI,从而允许在混合 TLS 通信中使用 IP 地址。

    【讨论】:

      猜你喜欢
      • 2015-05-05
      • 2020-09-28
      • 2013-08-01
      • 2017-07-14
      • 2017-04-16
      • 2021-01-03
      • 2015-07-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多