" sslv3警报握手失败"在红宝石2

时间:2016-09-29 08:23:14

标签: ruby ssl ruby-2.3

我正在尝试使用带有ruby的web服务,但它似乎是它的SSL配置和ruby 2的问题:

>> require "open-uri"
=> true
>> open("https://w390w.gipuzkoa.net/WAS/HACI/HFAServiciosProveedoresWEB/services/FacturaSSPPWebServiceProxyPort") {|f| p f.content_type }
OpenSSL::SSL::SSLError: SSL_connect returned=1 errno=0 state=SSLv2/v3 read server hello A: sslv3 alert handshake failure

我尝试过使用curl和openssl,但它确实有效:

curl https://w390w.gipuzkoa.net/WAS/HACI/HFAServiciosProveedoresWEB/services/FacturaSSPPWebServiceProxyPort
openssl s_client -connect w390w.gipuzkoa.net:443

它也适用于ruby 1.9:

irb(main):001:0> require "open-uri"
=> true
irb(main):003:0> open("https://w390w.gipuzkoa.net/WAS/HACI/HFAServiciosProveedoresWEB/services/FacturaSSPPWebServiceProxyPort") {|f| p f.content_type }
"text/html"

使用ruby 2,我尝试过使用TLS,但没有成功

>> OpenSSL::SSL::SSLContext::DEFAULT_PARAMS[:ssl_version] = :TLSv1
=> :TLSv1
>> open("https://w390w.gipuzkoa.net/WAS/HACI/HFAServiciosProveedoresWEB/services/FacturaSSPPWebServiceProxyPort") {|f| p f.content_type }
OpenSSL::SSL::SSLError: SSL_connect returned=1 errno=0 state=unknown state: sslv3 alert handshake failure

>> OpenSSL::SSL::SSLContext::DEFAULT_PARAMS[:ssl_version] = :TLSv1_2
=> :TLSv1_2
>> open("https://w390w.gipuzkoa.net/WAS/HACI/HFAServiciosProveedoresWEB/services/FacturaSSPPWebServiceProxyPort") {|f| p f.content_type }
OpenSSL::SSL::SSLError: SSL_connect returned=1 errno=0 state=unknown state: wrong version number

检查https://www.ssllabs.com/ssltest/analyze.html?d=w390w.gipuzkoa.net上的服务器SSL配置它会返回以下错误:"评估失败:意外失败",因为我可以使用ruby 2访问几个类似的Web服务,我猜他们有错误的配置

任何想法如何使用ruby 2访问此Web服务?

2 个答案:

答案 0 :(得分:2)

服务器仅支持非常少的密码,大多数完全不安全(导出密码,DES-CBC-SHA)和唯一至少一点安全密码(DES-CBC3-SHA)被认为是不安全的{{3} }。机会很高,因为这种不安全感,客户端中的现代TLS堆栈会因握手而失败。

答案 1 :(得分:2)

对于服务器来说,这是一个非常糟糕的配置。 Comodo's SSL Analyzer似乎更宽松,并显示了四个受支持的密码套件。 Cipher suites section from SSL Analyzer此外,服务器支持TLSv1.0。

现在,我无法在线找到一个资源,表明默认情况下这些密码套件是否在Ruby 2中被禁用,但您可以尝试这样做:

  1. 使用OpenSSL::SSL::SSLContext::DEFAULT_PARAMS[:ciphers] = "DES-CBC3-SHA"启用最佳密码 从OpenSSL ciphers获得的密码名称。

  2. 现在尝试连接会显示此错误,因为该网站的CA不受信任:

      

    OpenSSL :: SSL :: SSLError:SSL_connect返回= 1 errno = 0 state = SSLv3   读取服务器证书B:证书验证失败

  3. 您可以使用ssl_ca_cert添加此CA或使用ssl_verify_mode: OpenSSL::SSL::VERIFY_NONE绕过验证(不推荐)。例如,

    open("https://w390w.gipuzkoa.net/WAS/HACI/HFAServiciosProveedoresWEB/services/FacturaSSPPWebServiceProxyPort", {ssl_verify_mode: OpenSSL::SSL::VERIFY_NONE}) {|f| p f.content_type }
    

  4. 你也可以给Net :: HTTP一个镜头。