【发布时间】:2014-04-21 04:36:24
【问题描述】:
今天早上我的 HTTP 客户端 (HTTParty) 突然抛出错误 OpenSSL::SSL::SSLError: hostname does not match the server certificate
首先我无法理解是哪一个,所以今天我们在过去 2 年中几乎整天都在进行 API 调用,没有任何问题
其次我不明白如何解决它,因为它是 HTTParty 内部的
我唯一知道的是我无法在ENV 中设置SSL_CERT_FILE,但正如我所说,我的/etc/ssl/certs (SSL_CERT_DIR) 中已经列出了ROOT CA
这是我的输出
irb(main):001:0> require "openssl"
=> true
irb(main):002:0> puts OpenSSL::OPENSSL_VERSION
OpenSSL 1.0.1 14 Mar 2012
=> nil
irb(main):003:0> puts "SSL_CERT_FILE: %s" % OpenSSL::X509::DEFAULT_CERT_FILE
SSL_CERT_FILE: /usr/lib/ssl/cert.pem
=> nil
irb(main):004:0> puts "SSL_CERT_DIR: %s" % OpenSSL::X509::DEFAULT_CERT_DIR
SSL_CERT_DIR: /usr/lib/ssl/certs
最后,正如所说,Openssl 没有任何变化,代码方面唯一发生的事情是 openssl 版本引用 HEARTBLEED 漏洞的补丁
请注意,我们只是修补了 openssl 版本,但 didnt recompile the RUBY 这可能是个问题
有问题的 Ruby 是 ruby 1.9.3p327
Net::HTTP 库是版本 httparty-0.13.0
注意:- 作为一种解决方案,我除了在 OPENSSL 中有 VERIFY_NONE 选项
【问题讨论】:
-
请张贴网址,以便我们检查。
-
“作为一个解决方案,我除了在 OPENSSL 中有 VERIFY_NONE 选项外没有其他选择” - 是的,这可能是最不理想的选择。您不妨使用匿名 Diffie-Hellman 并保存服务器证书旋转。
-
“突然 HTTParty 抛出主机名与服务器证书不匹配错误... OpenSSL 1.0.1 2012 年 3 月 14 日”。 OpenSSL 1.0.1 和之前的版本不执行主机名匹配。主机名匹配是 1.0.2 的功能,该版本的 OpenSSL 尚未发布。所以 HTTParty 或 Ruby 发生了一些变化。
-
jww 我已经检查了我们的 ruby 版本和 httparty gem,它几乎一年都一样,现在不知道该说什么