gpt4 book ai didi

Ruby SSL 错误 - sslv3 警报意外消息

转载 作者:数据小太阳 更新时间:2023-10-29 07:11:18 26 4
gpt4 key购买 nike

我正在尝试在 ruby​​ 脚本中连接到服务器 https://www.xpiron.com/schedule。但是,当我尝试连接时:

require 'open-uri'
doc = open('https://www.xpiron.com/schedule')

我收到以下错误消息:

OpenSSL::SSL::SSLError: SSL_connect returned=1 errno=0 state=SSLv2/v3 read server hello A:  sslv3 alert unexpected message         
from /usr/local/lib/ruby/1.9.1/net/http.rb:678:in `connect'
from /usr/local/lib/ruby/1.9.1/net/http.rb:678:in `block in connect'
from /usr/local/lib/ruby/1.9.1/timeout.rb:44:in `timeout'
from /usr/local/lib/ruby/1.9.1/timeout.rb:87:in `timeout'
from /usr/local/lib/ruby/1.9.1/net/http.rb:678:in `connect'
from /usr/local/lib/ruby/1.9.1/net/http.rb:637:in `do_start'
from /usr/local/lib/ruby/1.9.1/net/http.rb:626:in `start'
from /usr/local/lib/ruby/1.9.1/net/http.rb:1168:in `request'
from /usr/local/lib/ruby/1.9.1/net/http.rb:888:in `get'
from (irb):32
from /usr/local/bin/irb:12:in `<main>'

我正在运行 Ruby 1.9.2p180。它似乎在其他一些机器上工作,所以它可能是 OpenSSL 或 Ruby 的配置问题。我尝试重新安装所有 SSL 库,并从头开始重建 Ruby,但似乎没有任何效果。有人遇到过这个问题吗?

更新

在非工作机器上,openssl 版本是 0.9.8o 01 Jun 2010

在工作机器上,它是 0.9.8k 25 Mar 2009

所以最近的那个似乎坏了。

此外,如果我使用不同的 HTTP 客户端(Patron,基于 libcurl),它会起作用:

require 'patron'

sess = Patron::Session.new
sess.timeout = 5
url = 'https://www.xpiron.com/schedule'
resp = sess.get(url)
puts "#{resp.body}"

所以这似乎是 Ruby 的 OpenSSL 绑定(bind)的问题。

最佳答案

只是回答我自己的问题。

问题似乎与 Ruby 协商 SSL 连接的方式有关。 Xpiron 的 TLS 机制有错误,它抛出错误而不是重试其他 SSL 版本。

如果您将 SSL 版本强制设置为 3.0,它会起作用:

require 'net/http'
url = URI.parse('https://www.xpiron.com/schedule')
req = Net::HTTP::Get.new(url.path)
sock = Net::HTTP.new(url.host, 443)
sock.use_ssl = true
sock.ssl_version="SSLv3"
sock.start do |http|
response = http.request(req)
end

我还在 Ruby 的 bug tracker 上创建了一个问题.

关于Ruby SSL 错误 - sslv3 警报意外消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6821051/

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