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​​ 访问几个类似的 Web 服务2,我猜他们有一些错误配置。

任何想法如何使用 ruby​​ 2 访问此网络服务?

4

2 回答 2

2

服务器仅支持很少的密码,大多数完全不安全(导出密码,DES-CBC-SHA)和唯一至少有点安全的密码(DES-CBC3-SHA)自Sweet32以来被认为是不安全的。由于这种不安全性,客户端中的现代 TLS 堆栈很有可能会因握手而失败。

于 2016-09-29T09:15:23.613 回答
2

对于服务器来说,这是一个相当糟糕的配置。Comodo 的 SSL Analyzer似乎更宽松,并显示了四个受支持的密码套件。 SSL Analyzer 的密码套件部分此外,服务器支持 TLSv1.0。

现在,我在网上找不到资源来表明这些密码套件是否在 Ruby 2 中默认被禁用,但您可以尝试以下方法:

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

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

    OpenSSL::SSL::SSLError: SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed

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

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

你也可以试试 Net::HTTP。

于 2016-09-29T12:27:25.957 回答