我试图在ruby中使用webservice,但它的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配置将返回以下错误:“assessment failed:unexpected failure”(评估失败:意外失败),因为我可以使用ruby 2访问几个类似的web服务,我想它们可能配置有错误。
有什么办法可以用ruby 2访问这个web服务吗?

最佳答案

对于服务器来说,这是一个相当糟糕的配置。Comodo's SSL Analyzer似乎更为宽松,并显示了四个受支持的密码套件。
ruby -  ruby 2上的“sslv3警报握手失败”-LMLPHP此外,服务器支持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
读取服务器证书B:证书验证失败
您可以使用ssl_ca_cert添加此CA,也可以使用ssl_verify_mode: OpenSSL::SSL::VERIFY_NONE绕过验证(不推荐)。例如,open(“https://w390w.gipuzkoa.net/WAS/HACI/HFAServiciosProveedoresWEB/services/FacturaSSPPWebServiceProxyPort”,{ssl_u verify_mode:openssl::ssl::verify_none}){f p f.content_type}
你也可以试试net::http。

10-06 14:29
查看更多