Ruby SSL error - sslv3 alert unexpected message

前端 未结 5 2116
青春惊慌失措
青春惊慌失措 2020-12-10 18:05

I\'m trying to connect to the server https://www.xpiron.com/schedule in a ruby script. However, when I try connecting:

require \'open-uri\'
doc          


        
5条回答
  •  独厮守ぢ
    2020-12-10 18:32

    I think it's because of the https URL. There's a mean, completely insecure hack for bypassing this, but please google for it at your own risk. I will rather show you the secure way of doing it, using Net::HTTP:

    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
    store = OpenSSL::X509::Store.new
    store.add_cert OpenSSL::X509::Certificate.new(File.new('addtrust_ca.pem'))
    store.add_cert OpenSSL::X509::Certificate.new(File.new('utn.pem'))
    store.add_cert OpenSSL::X509::Certificate.new(File.new('user_first_ca.pem'))
    store.add_cert OpenSSL::X509::Certificate.new(File.new('xpiron.pem'))
    sock.cert_store = store
    sock.start do |http|
      response = http.request(req)
    end
    

    You may obtain the certificate files by entering your URL in the browser (e.g. Firefox), and then clicking on the icon left of the URL/More Information/View Certificate/Details -> there click on each certificate in the chain and export it as a PEM file under the names I used above. Put these files in the same directory as the script referencing them. That should do the magic. But I noticed that a cookie is required to login to that page, so it might require a bit more effort of modifying your request appropriately.

提交回复
热议问题