sslv3使用Linux上的Ruby中的Net :: HTTP警告非法参数

时间:2011-02-27 14:56:53

标签: ruby ssl https openssl

我正在尝试使用远程系统进行用户身份验证。当我在MacOSX上运行时,这段代码会得到响应,但在我的机器上失败了:

  def create
    uri = URI.parse('https://ourclient.example.com/')
    http = Net::HTTP.new(uri.host, uri.port)
    http.use_ssl = true
    http.verify_mode = OpenSSL::SSL::VERIFY_NONE

    request = Net::HTTP::Post.new('/login.jsp')
    request.set_form_data({'login_name' => params[:login], 'password' => params[:password]})
    response = http.request(request)
    puts "Response BODY: #{response.body.inspect}"
  end

关闭转动验证功能可以消除Mac上的警告。在我的机器上,http.request引发了这个异常:

OpenSSL::SSL::SSLError (SSL_connect returned=1 errno=0 state=SSLv2/v3 read server hello A: sslv3 alert illegal parameter):
  app/controllers/sessions_controller.rb:16:in `create'

我在没有Rails的情况下使用IRB获得相同的行为。昨天我做了一个干净的Fedora 14安装,安装了所需的开发工具和库。我使用的是Ruby 1.9.2-p180和Rails 3.0.4。我以为我可能错误配置了我的库(我已经升级了几次Fedora 12),但现在这是一个新安装。

远程系统可能是微软的IIS,但我不确定。也许我可以使用较旧的SSL协议,但我的Google-fu无法找到咒语。

我很感激有关解决此问题的任何提示。谢谢,

克里斯

2 个答案:

答案 0 :(得分:0)

如何在服务器上创建ssl证书?自签名还是签名? 如果删除VERIFY_NONE,则会收到错误?

答案 1 :(得分:0)

使用Mechanize gem

gem install mechanize

并尝试

require 'mechanize'
page = Mechanize.new{|a| a.ssl_version, a.verify_mode = 'SSLv3', OpenSSL::SSL::VERIFY_NONE}.get "**YOUR HTTPS LINK HERE**"