Pregunta

Estoy intentando conseguir la implementación de Ruby Net::HTTP de trabajo con SNI.

Tanto mail.google.com y gmail.com en vivo en la misma dirección IP, por lo que cuando se conecta a través de SSL, las necesidades de los servidores de Google para saber qué certificado para su uso. Por defecto, devuelve el certificado mail.google.com, que es un problema si usted está tratando de poner en práctica WebFinger.

WebFinger se requiere para recuperar https://gmail.com/.well-known/host-meta para obtener la información LRDD, sin embargo, por razones de seguridad, es fundamental para verificar la información del certificado SSL.

Desde que Google sirve el certificado mail.google.com defecto en este caso, el post_connection_check SSL falla. La solución correcta en este caso sería para permitir Nombre del servidor Indicación para Net::HTTP, pero no es claro para mí cómo conseguir que el trabajo con los enlaces de Ruby para OpenSSL. Alguien más tiene una idea?

debe ser capaz de ver el problema ejecutando:

require 'open-uri'
open('https://gmail.com/.well-known/host-meta') { |f| f.read }

También he creado una esencia que presenta el problema utilizando una versión anterior de rizo y OpenSSL:

https://gist.github.com/7936ef38787092a22897

¿Fue útil?

Solución

Para obtener soporte para SNI, se necesita una nueva versión de OpenSSL (0.9.8f con --enable-tlsext o 0.9.8j o posterior) y OpenSSL::SSL::SSLSocket#hostname = 'hostname' llamada antes SSLSocket#connect. Net::HTTPS no soporta SNI, sin embargo, y abierto-uri no.

El registro de salida httpclient repositorio de desarrollo deben apoyar SNI.

Avísame si necesita liberado joya muy pronto ahora ...

Otros consejos

Rubí 2.0 se dirigirá a la TLS SNI (Servidor de Nombres Indicación) tema:

desde la red / http ..

#        ...
#           s.session = @ssl_session if @ssl_session
#           # Server Name Indication (SNI) RFC 3546
#           s.hostname = @address if s.respond_to? :hostname=
#           Timeout.timeout(@open_timeout, Net::OpenTimeout) { s.connect }
#           if @ssl_context.verify_mode != OpenSSL::SSL::VERIFY_NONE
#             s.post_connection_check(@address)
#           end
#           ...

Para hacer este trabajo en 1.9.2 (o superior) aplicar el parche similar al net / http

#         ...
# BEGIN:  SNI PATCH http://bugs.ruby-lang.org/issues/4351
#          s.hostname = @address if s.respond_to? :hostname=
# END:   SNI PATCH http://bugs.ruby-lang.org/issues/4351
#          timeout(@open_timeout) { s.connect }
#          if @ssl_context.verify_mode != OpenSSL::SSL::VERIFY_NONE
#            s.post_connection_check(@address)
#          end
#        ...

véase también: http://bugs.ruby-lang.org/issues/4351 http://en.wikipedia.org/wiki/Server_Name_Indication

Me hizo esta campaña en búsqueda del tema para financiar un backport en rubí 1.8.7 del SNI espero que la gente puede contribuir con una moneda de diez centavos o el arreglo y obtener todos nuestros problemas resueltos: D

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top