【发布时间】: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