今天早上我的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 { p>
这是我的输出
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 选项之外我没有
答案 0 :(得分:1)
如果不知道主机你也在连接,很难确定,但我猜他们只是在服务器端更改了证书。问题可能是,您的脚本不支持SNI(服务器名称指示,例如同一IP后面的多个主机名和证书),但服务器提供商现在更改了此站点的默认证书(如果客户端使用的话,则使用该证书)不支持SNI)。
但就像我说的那样,很难确定这个问题缺乏细节。