Erro open-uri do Ruby: SSL_connect SYSCALL retornado = 5 errno = 0 state = SSLv2 / v3 servidor de leitura olá A

2

Estou percebendo um erro de handshake ssl quando estou usando open-uri module de ruby no Debian: Squeeze, mas está funcionando bem no Debian: Wheezy e Debian: Jessie

Aqui está o que eu estou percebendo:

Debian Squeeze

root@0fdf024c8c42:/# cat /etc/issue
Debian GNU/Linux 6.0 \n \l

root@0fdf024c8c42:/# irb
irb(main):001:0> require 'open-uri'
=> true
irb(main):002:0> open("https://www.openssl.org")
OpenSSL::SSL::SSLError: SSL_connect SYSCALL returned=5 errno=0 state=SSLv2/v3 read server hello A
    from /usr/lib/ruby/1.9.1/net/http.rb:799:in 'connect'
    from /usr/lib/ruby/1.9.1/net/http.rb:799:in 'block in connect'
    from /usr/lib/ruby/1.9.1/timeout.rb:54:in 'timeout'
    from /usr/lib/ruby/1.9.1/timeout.rb:99:in 'timeout'
    from /usr/lib/ruby/1.9.1/net/http.rb:799:in 'connect'
    from /usr/lib/ruby/1.9.1/net/http.rb:755:in 'do_start'
    from /usr/lib/ruby/1.9.1/net/http.rb:744:in 'start'
    from /usr/lib/ruby/1.9.1/open-uri.rb:306:in 'open_http'
    from /usr/lib/ruby/1.9.1/open-uri.rb:775:in 'buffer_open'
    from /usr/lib/ruby/1.9.1/open-uri.rb:203:in 'block in open_loop'
    from /usr/lib/ruby/1.9.1/open-uri.rb:201:in 'catch'
    from /usr/lib/ruby/1.9.1/open-uri.rb:201:in 'open_loop'
    from /usr/lib/ruby/1.9.1/open-uri.rb:146:in 'open_uri'
    from /usr/lib/ruby/1.9.1/open-uri.rb:677:in 'open'
    from /usr/lib/ruby/1.9.1/open-uri.rb:33:in 'open'
    from (irb):2
    from /usr/bin/irb:12:in '<main>'irb(main):003:0>

Debian Wheezy

root@d6d7e1af56d0:/# cat /etc/issue
Debian GNU/Linux 7 \n \l

root@d6d7e1af56d0:/# irb
irb(main):001:0> require 'open-uri'
=> true
irb(main):002:0> open("https://www.openssl.org")
=> #<StringIO:0x000000022aaec0>

Debian Jessie

root@405c251f32df:/# cat /etc/issue
Debian GNU/Linux 8 \n \l

root@405c251f32df:/# irb2.1
irb(main):001:0> require 'open-uri'
=> true
irb(main):002:0> open("https://www.openssl.org")
=> #<StringIO:0x00000001e45b78 @base_uri=#<URI::HTTPS:0x00000001e45ec0 URL:https://www.openssl.org>, @meta={"date"=>"Wed, 26 Aug 2015 11:56:57 GMT", "server"=>"Apache/2.4.7 (Ubuntu)", "strict-transport-security"=>"max-age=31536000; includeSubDomains", "accept-ranges"=>"bytes", "vary"=>"Accept-Encoding", "content-length"=>"2456", "content-type"=>"text/html; charset=UTF-8"}, @metas={"date"=>["Wed, 26 Aug 2015 11:56:57 GMT"], "server"=>["Apache/2.4.7 (Ubuntu)"], "strict-transport-security"=>["max-age=31536000; includeSubDomains"], "accept-ranges"=>["bytes"], "vary"=>["Accept-Encoding"], "content-length"=>["2456"], "content-type"=>["text/html; charset=UTF-8"]}, @status=["200", "OK"]>

Eu sei que isso não tem nada a ver com a versão Ruby, porque eu tentei atualizar a versão Ruby, mas isso não ajudou.

    
por pradeepchhetri 26.08.2015 / 13:59

1 resposta

2

A máquina do Squeeze tem o pacote ca-certificates instalado? Sem isso, não há um conjunto confiável de certificados raiz que possa ser usado para validar se um certificado apresentado é válido.

Assumindo que ca-certificates esteja instalado corretamente, você pode estar tendo problemas com a compatibilidade do protocolo TLS. O Squeeze, sendo bastante antigo, tem uma versão do OpenSSL que não está de acordo com os padrões modernos. Alguns sites, como www.openssl.org , que você testou, podem configurar sua pilha TLS de tal forma que limita a compatibilidade com pilhas TLS mais antigas, como a que vem com o squeeze.

Em um sistema de teste, estou obtendo os mesmos resultados que você ao tentar open("https://www.openssl.org") , mas a conexão com alguns outros sites funciona Just Fine. Este relatório ssllabs indica que www.openssl.org faz não suporta TLS 1.0, que é o que uma conexão do Squeeze está relatando como a versão mais alta que suporta. Portanto, neste caso em particular, esse é o problema que você está tendo - incompatibilidade de versão simples do TLS.

    
por 26.08.2015 / 14:14