Indicación de soporte nombre del servidor en Net :: HTTP?
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:
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