Net-https error on x509 certs

Hello,

I am trying to send a GET request to a https URL which requires passing
certificate, key and ca certificate to authenticate and getting below
error:

/usr/lib/ruby/1.8/net/http.rb:567:in initialize': can't convert OpenSSL::X509::Certificate into String (TypeError) from /usr/lib/ruby/1.8/net/http.rb:567:innew’
from /usr/lib/ruby/1.8/net/http.rb:567:in connect' from /usr/lib/ruby/1.8/net/http.rb:553:indo_start’
from /usr/lib/ruby/1.8/net/http.rb:542:in `start’
from tp2:18

Code:

#!/usr/bin/ruby
require ‘net/https’
require ‘openssl’

server = “serverdomainname”
crt = File.read “crtfile”
ca = File.read “cafile”
key = File.read “keyfile”

uri = URI.parse(“https://#{server}:8140”)
session = Net::HTTP.new(uri.host, uri.port)
session.use_ssl = true
session.verify_mode = OpenSSL::SSL::VERIFY_NONE
session.ca_file = OpenSSL::X509::Certificate.new ca
session.cert = OpenSSL::X509::Certificate.new crt
session.key = OpenSSL::PKey::RSA.new key
res = session.start do |http|
http.get("/v1")
end

OpenSSL reads the certificate properly, format is pem, but net-https
gives error.

-Tuj

Tuj www wrote in post #1076663:

/usr/lib/ruby/1.8/net/http.rb:567:in `initialize’: can’t convert
OpenSSL::X509::Certificate into String (TypeError)

Hint: you passed an OpenSSL::X509::Certificate to a method which was
expecting a String.

session.ca_file = OpenSSL::X509::Certificate.new ca

That’s the problem. ca_file needs to be a string which contains the
filename of a CA certificate.

If you read /usr/lib/ruby/1.8/net/https.rb (or wherever it is on your
system) you’ll find the docs inline:

: ca_file, ca_file=((|path|))
Sets path of a CA certification file in PEM format.
The file can contrain several CA certificats.

: ca_path, ca_path=((|path|))
Sets path of a CA certification directory containing certifications
in PEM format.

Thanks Brian, that solved the issue.

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs