OpenSSL :: SSL :: SSLError:hostname与服务器证书不匹配

时间:2014-04-21 04:36:25

标签: ruby ssl openssl httparty

今天早上我的HTTP客户端(HTTParty)突然发出错误OpenSSL::SSL::SSLError: hostname does not match the server certificate

首先我无法理解为什么今天我们几乎整天都在过去2年内拨打api电话而没有任何问题

其次我不明白如何解决它,因为它内部是HTTParty

我唯一知道的是我无法在SSL_CERT_FILE中设置ENV,但正如我所说的/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 选项之外我没有

1 个答案:

答案 0 :(得分:1)

如果不知道主机你也在连接,很难确定,但我猜他们只是在服务器端更改了证书。问题可能是,您的脚本不支持SNI(服务器名称指示,例如同一IP后面的多个主机名和证书),但服务器提供商现在更改了此站点的默认证书(如果客户端使用的话,则使用该证书)不支持SNI)。

但就像我说的那样,很难确定这个问题缺乏细节。