今天早上,我的HTTP客户端(HTTParty)突然抛出了一个错误OpenSSL :: SSL :: SSLError:主机名与服务器证书不匹配
首先,我无法理解是什么原因,因为我们过去两年中几乎每天都会进行该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 版本,但没有重新编译 RUBY,这可能会成为一个问题。
所涉及的 Ruby 版本是
ruby 1.9.3p327
。Net::HTTP 库的版本是 httparty-0.13.0。
注意:作为解决方案,我不希望在 OpenSSL 中使用 VERIFY_NONE 选项。