> require "open-uri" => true >> open("https://-6ren">
gpt4 book ai didi

ruby - ruby 2 上的 "sslv3 alert handshake failure"

转载 作者:数据小太阳 更新时间:2023-10-29 08:36:05 25 4
gpt4 key购买 nike

我正在尝试使用带有 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"

对于 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 访问几个类似的网络服务,我猜他们配置错误。

关于如何使用 ruby​​ 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 returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed

  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 }

您也可以试一试 Net::HTTP。

关于ruby - ruby 2 上的 "sslv3 alert handshake failure",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39765080/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com