People,

I'm a Ruby newbie and also new to OpenSSL.

I'm trying to use Ruby to do Web services type stuff.

I'm starting my study with the simple task of connecting to an https web
site.

If any of you know Ruby, most of what I write below will make sense.

The Gregory Houston blog has an entry about using http-access2 to
talk with https websites:

http://ghouston.blogspot.com/2006/03/using-ssl-with-ruby-http-access2.html

Here is the 4-line-demo he offers:

require 'http-access2'
client = HTTPAccess2::Client.new()
client.ssl_config.set_trust_ca('ca.cert')
puts client.get('https://login.yahoo.com/config/login?').content

I fired up irb.
I verified that I got the same initial error that he did.

I dont have IE so I used opera to export the key.
It looks like it gave me a binary file.
I wrote a bin_to_base64.rb script to transform the binary file:

#! /usr/bin/env ruby

require "base64"

binfile =
'/pt/w/browser_certificates/equifax_secure_certificate_authority.bin'
b64file =
'/pt/w/browser_certificates/equifax_secure_certificate_authority.cer'

fhr = File.open binfile, "r"

bin_s = ""

fhr.each {|l| bin_s << l}
fhr.close

b64_s =  Base64.encode64 bin_s

fhw = File.open b64file, "w"

fhw.write b64_s
fhw.close

It gave me this:

MIIDIDCCAomgAwIBAgIENd70zzANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQG
EwJVUzEQMA4GA1UEChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1
cmUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MB4XDTk4MDgyMjE2NDE1MVoXDTE4
MDgyMjE2NDE1MVowTjELMAkGA1UEBhMCVVMxEDAOBgNVBAoTB0VxdWlmYXgx
LTArBgNVBAsTJEVxdWlmYXggU2VjdXJlIENlcnRpZmljYXRlIEF1dGhvcml0
eTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAwV2xWGcIYu6gmi0fCG2R
FGiYCh7+2gRvE4RiIcPRfM6fBeC4AfBONOziipUEZKzxa1NfBbPLZ4C/QgKO
/t0BCezhABRP/PvwDN1Dulsr4R+AcJkVV5MW8Q+XarfCaCMczE1ZMKxRHjuv
K9buY0V7xdlfUNLjUA86iOe/FP3gx7kCAwEAAaOCAQkwggEFMHAGA1UdHwRp
MGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEQMA4GA1UEChMHRXF1aWZheDEt
MCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5
MQ0wCwYDVQQDEwRDUkwxMBoGA1UdEAQTMBGBDzIwMTgwODIyMTY0MTUxWjAL
BgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUSOZo+SvSspXXR9gjIBBPM5iQn9Qw
HQYDVR0OBBYEFEjmaPkr0rKV10fYIyAQTzOYkJ/UMAwGA1UdEwQFMAMBAf8w
GgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUAA4GB
AFjOKer89961zgK5F7WF0bnj4JXMJTENAKaSbn+2kmOeUJXRmm/kEd5jhW6Y
7qj/WsjTVbJmcVfewCHrPSqnI0kBBIZCe/zuf6IWUrVnZ9NA2zsmWLIodz2u
FHdh1voqZiegDfqnc1zqcPGUIWVEX/r87yloqaKHee9570+sB3c4

I then tried it out in irb:

require 'http-access2'
client = HTTPAccess2::Client.new()
client.ssl_config.set_trust_ca
("/pt/w/browser_certificates/equifax_secure_certificate_authority.cer")
puts client.get('https://login.yahoo.com/config/login?').content



irb(main):011:0> OpenSSL::X509::StoreError:
   from
/Applications/Locomotive2/Bundles/standardRailsSept2006.locobundle/powerpc/lib/ruby/site_ruby/1.8/http-
access2.rb:532:in `add_file'
   from
/Applications/Locomotive2/Bundles/standardRailsSept2006.locobundle/powerpc/lib/ruby/site_ruby/1.8/http-
access2.rb:532:in `set_trust_ca'
   from (irb):11
irb(main):012:0> at depth 0 - 20: unable to get local issuer certificate
OpenSSL::SSL::SSLError: certificate verify failed
   from
/Applications/Locomotive2/Bundles/standardRailsSept2006.locobundle/powerpc/lib/ruby/site_ruby/1.8/http-
access2.rb:1001:in `connect'
   from
/Applications/Locomotive2/Bundles/standardRailsSept2006.locobundle/powerpc/lib/ruby/site_ruby/1.8/http-
access2.rb:1001:in `ssl_connect'
   from
/Applications/Locomotive2/Bundles/standardRailsSept2006.locobundle/powerpc/lib/ruby/site_ruby/1.8/http-
access2.rb:1363:in `connect'
   from
/Applications/Locomotive2/Bundles/standardRailsSept2006.locobundle/powerpc/lib/ruby/1.8/timeout.rb:56:in
`timeout'
   from
/Applications/Locomotive2/Bundles/standardRailsSept2006.locobundle/powerpc/lib/ruby/1.8/timeout.rb:76:in
`timeout'
   from
/Applications/Locomotive2/Bundles/standardRailsSept2006.locobundle/powerpc/lib/ruby/site_ruby/1.8/http-
access2.rb:1351:in `connect'
   from
/Applications/Locomotive2/Bundles/standardRailsSept2006.locobundle/powerpc/lib/ruby/site_ruby/1.8/http-
access2.rb:1209:in `query'
   from
/Applications/Locomotive2/Bundles/standardRailsSept2006.locobundle/powerpc/lib/ruby/site_ruby/1.8/http-
access2.rb:892:in `query'
   from
/Applications/Locomotive2/Bundles/standardRailsSept2006.locobundle/powerpc/lib/ruby/site_ruby/1.8/http-
access2.rb:434:in `do_get_block'
   from
/Applications/Locomotive2/Bundles/standardRailsSept2006.locobundle/powerpc/lib/ruby/site_ruby/1.8/http-
access2.rb:370:in `conn_request'
   from
/Applications/Locomotive2/Bundles/standardRailsSept2006.locobundle/powerpc/lib/ruby/site_ruby/1.8/http-
access2.rb:285:in `request'
   from
/Applications/Locomotive2/Bundles/standardRailsSept2006.locobundle/powerpc/lib/ruby/site_ruby/1.8/http-
access2.rb:260:in `get'
   from (irb):12
irb(main):013:0> irb(main):014:0*

I looked at the code near line 532 of

/Applications/Locomotive2/Bundles/standardRailsSept2006.locobundle/powerpc/lib/ruby/site_ruby/1.8/http-
access2.rb

I see:


 def set_trust_ca(trust_ca_file_or_hashed_dir)
   if FileTest.directory?(trust_ca_file_or_hashed_dir)
     @cert_store.add_path(trust_ca_file_or_hashed_dir)
   else
     @cert_store.add_file(trust_ca_file_or_hashed_dir) # line 532
   end
   change_notify
 end

I found the creation of @cert_store about 1/2 page above line 532:

   @cert_store = OpenSSL::X509::Store.new

So, I'm about to go nose around in the ruby OpenSSL code, demos, test-cases.

But, have any of you bumped into this issue?

Can you give me any hints on how to get http-acces2 talking to
an https website?

Thanks.

...Peter

--
Peter Smith
[EMAIL PROTECTED]

Reply via email to