Hello,
I cannot get the ‘https://www.rsa.com’ when accessing with SSL as in the
sample on this page (http://dev.ctor.org/doc/httpclient/).
The sample is :
uri=‘https://www.rsa.com’
client = HTTPClient.new()
client.get(uri).content
And I get the frame :
at depth 3 - 20: unable to get local issuer certificate
gems/1.8/gems/httpclient-2.1.5.2/lib/httpclient/session.rb:247:in
connect': SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed (OpenSSL::SSL::SSLError) from gems/httpclient-2.1.5.2/lib/httpclient/session.rb:247:in
ssl_connect’
from gems/httpclient-2.1.5.2/lib/httpclient/session.rb:639:in
connect' from gems/httpclient-2.1.5.2/lib/httpclient/timeout.rb:128:in
timeout’
from
gems/1.8/gems/httpclient-2.1.5.2/lib/httpclient/session.rb:631:in
connect' from gems/httpclient-2.1.5.2/lib/httpclient/session.rb:522:in
query’
from gems/httpclient-2.1.5.2/lib/httpclient/session.rb:147:in
query' from gems/httpclient-2.1.5.2/lib/httpclient.rb:953:in
do_get_block’
from gems/httpclient-2.1.5.2/lib/httpclient.rb:765:in
do_request' from gems/httpclient-2.1.5.2/lib/httpclient.rb:848:in
protect_keep_alive_disconnected’
from gems/httpclient-2.1.5.2/lib/httpclient.rb:764:in
do_request' from gems/httpclient-2.1.5.2/lib/httpclient.rb:666:in
request’
from gems/httpclient-2.1.5.2/lib/httpclient.rb:591:in `get’
So I get the certificate by Export from IE6 on a WINXP box and try with
this sample on Linux box:
uri=‘https://www.rsa.com’
ca=‘./RSACorporateCA.cer’
client = HTTPClient.new()
client.ssl_config.set_trust_ca(ca)
client.get(uri).content
with the same result and the same frame.
I try also on another url (‘https://login.yahoo.com/config/login?’) and
it fails
but it works if i add the good certificate
(‘EquifaxSecureCertificateAuthorith.cer’)
So i try to access the rsa site with wget 1.11.4 and it works without
giving any certificate only for TLSv1 or SSLv3 protocol (‘wget
–secure-protocol=TLSv1 https://www.rsa.com’). It doesn’t work with
SSLv1 and SSLv2.
So i check the protocol exchange with Wireshark an see those exchange
with a success in wget :
https SSL Client Hello
https TLSv1 Server Hello
https TLSv1 Client key exchange …
https TLSv1 Change Cipher Spec
https TLSv1 Application Data
…
With the Ruby sample i have :
https SSLv2 Client Hello
https TLSv1 Server Hello
https TLSv1 Alert Level Fatal
So it seems that the sample with the Ruby openssl library send a ‘Client
Hello’ message in SSLv2 protocol which doesn’t work with wget.
So i try to adjust the sample by setting SSL options with
client.ssl_config.options=OpenSSL::SSL::OP_NO_SSLv2
but it fails with the same frame error.
My old environnement is :
ruby 1.8.7 (2008-05-31 patchlevel 0) [i686-linux]
httpclient-2.1.5.2
OpenSSL 0.9.7a Feb 19 2003
Linux 2.6.5-1.358 #1 Sat May 8 09:04:50 EDT 2004 i686 i686 i386
GNU/Linux
So the question is : What i am doing wrong ?
Regards.