"sslv3 alert handshake failure" 在 ruby 2
"sslv3 alert handshake failure" on ruby 2
我正在尝试将 Web 服务与 ruby 一起使用,但这似乎是它的 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"
with 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 配置 returns 这个错误:"Assessment failed: Unexpected failure",因为我可以使用 ruby 2 访问几个类似的网络服务,我猜他们有一些东西配置错误。
关于如何使用 ruby 2 访问此 Web 服务的任何想法?
服务器只支持很少的密码,大部分完全不安全(导出密码,DES-CBC-SHA)和唯一至少有点安全的密码(DES-CBC3-SHA)被认为是不安全的,因为Sweet32。由于这种不安全性,客户端中的现代 TLS 堆栈很可能会因握手而失败。
对于服务器来说,这是一个非常糟糕的配置。 Comodo's SSL Analyzer 似乎更宽松,并显示了四个受支持的密码套件。
另外,服务器支持TLSv1.0。
现在,我无法在网上找到指示这些密码套件是否在 Ruby 2 中默认禁用的资源,但您可以尝试以下操作:
使用 OpenSSL::SSL::SSLContext::DEFAULT_PARAMS[:ciphers] = "DES-CBC3-SHA"
启用最佳密码
从OpenSSL ciphers.
获得的密码名称
现在尝试连接应该显示此错误,因为站点的 CA 不受信任:
OpenSSL::SSL::SSLError: SSL_connect returned=1 errno=0 state=SSLv3
read server certificate B: certificate verify failed
您可以使用 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 }
你也可以给Net::HTTP一个机会。
我正在尝试将 Web 服务与 ruby 一起使用,但这似乎是它的 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"
with 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 配置 returns 这个错误:"Assessment failed: Unexpected failure",因为我可以使用 ruby 2 访问几个类似的网络服务,我猜他们有一些东西配置错误。
关于如何使用 ruby 2 访问此 Web 服务的任何想法?
服务器只支持很少的密码,大部分完全不安全(导出密码,DES-CBC-SHA)和唯一至少有点安全的密码(DES-CBC3-SHA)被认为是不安全的,因为Sweet32。由于这种不安全性,客户端中的现代 TLS 堆栈很可能会因握手而失败。
对于服务器来说,这是一个非常糟糕的配置。 Comodo's SSL Analyzer 似乎更宽松,并显示了四个受支持的密码套件。
现在,我无法在网上找到指示这些密码套件是否在 Ruby 2 中默认禁用的资源,但您可以尝试以下操作:
使用
OpenSSL::SSL::SSLContext::DEFAULT_PARAMS[:ciphers] = "DES-CBC3-SHA"
启用最佳密码 从OpenSSL ciphers. 获得的密码名称
现在尝试连接应该显示此错误,因为站点的 CA 不受信任:
OpenSSL::SSL::SSLError: SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed
您可以使用
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 }
你也可以给Net::HTTP一个机会。