Estoy tratando de buscar un recurso a través de SSL usando Net::HTTP
. Aquí está el fragmento de código relevante:Ruby 1.8.7 y Net :: HTTP: ¿Cómo hacer una solicitud SSL GET con el certificado del cliente?
req = Net::HTTP::Get.new(ContentURI.path)
https = Net::HTTP.new(ContentURI.host, ContentURI.port)
https.use_ssl = true
https.cert = OpenSSL::X509::Certificate.new(@cert_raw)
https.key = OpenSSL::PKey::RSA.new(@cert_key_raw)
https.verify_mode = OpenSSL::SSL::VERIFY_PEER
https.ca_file = File.join(TestDataPath, 'cacert.pem')
resp = https.start { |cx| cx.request(req) }
o con la última línea alternativa:
resp = https.get(ContentURI.path)
I han verificado que los diferentes bits (cert, llave, CA cert, etc.) son correctos .
El problema es que el cx.request(req)
se emite una excepción:
OpenSSL::SSL::SSLError: SSL_connect SYSCALL returned=5 errno=0 state=SSLv3 read server session ticket A
El registro de errores de Apache SSL en el servidor contiene lo siguiente:
[Tue Jan 24 11:47:26 2012] [debug] ssl_engine_kernel.c(1876): OpenSSL: Loop: SSLv3 read finished A
[Tue Jan 24 11:47:26 2012] [debug] ssl_engine_kernel.c(1905): OpenSSL: Exit: error in SSLv3 write session ticket A
[Tue Jan 24 11:47:26 2012] [debug] ssl_engine_kernel.c(1905): OpenSSL: Exit: error in SSLv3 write session ticket A
[Tue Jan 24 11:47:26 2012] [info] [client 10.11.88.53] SSL handshake interrupted by system [Hint: Stop button pressed in browser?!]
[Tue Jan 24 11:47:26 2012] [info] [client 10.11.88.53] Connection closed to child 0 with abortive shutdown (server _SERVERNAME_:443
El cert, clave, y el trabajo de archivos cert CA con este host SSL a través de otras herramientas; Solo estoy teniendo problemas para reproducir ese éxito programáticamente usando Net::HTTP[S]
.
¡Gracias a todos los que pueden identificar lo que estoy haciendo mal!
mirando a la fuente de OpenSSL, el mensaje de error está relacionado con la falta vale de sesión (datos proporcionados por el cliente requerido para reanudar la sesión de ssl); ninguna pista de por qué está sucediendo esto en este caso ... – Wejn