2009-05-25 6 views
6

Soy muy nuevo en SSL, en realidad, diría que no sé nada al respecto.Problema al obtener la descripción del error después de que SSL_CTX_new haya devuelto NULL

Estoy utilizando el método "SSL_CTX_new" para crear un objeto SSL_CTX. El método devuelve null. La documentación dice que puedo verificar la pila de errores para obtener la causa de esto.

Así que tengo la función "int SSL_get_error (SSL * s, int ret_code)" que (según tengo entendido) tengo que usar para obtener el mensaje de error. la documentación del método no dice nada sobre el primer parámetro de la función. Solo dice que el segundo parámetro ("ret") debe ser igual al código de retorno de la operación fallida que puede ser cualquiera de los siguientes:

SSL_connect(), SSL_accept(), SSL_do_handshake(), SSL_read() , SSL_peek() o SSL_write()

Así que ahora estoy teniendo dos problemas. La primera es que no utilicé ninguna de esas funciones, sino que uso SSL_CTX_new que no devuelve ningún tipo de código de retorno (devuelve un puntero al objeto SSX_CTX). Así que no sé qué poner como el "ret" parámetro. El segundo problema es que no sé qué significa el primer parámetro y qué debería poner allí, porque el documento no dice nada al respecto.

+0

¿Puedes mostrar algún código al que llamas SSL_CTX_new? –

Respuesta

6

Necesita un contexto válido para crear el objeto SSL.

Como no puede crear un contexto, no puede usar SSL_get_error.

Trate de usar ERR_print_errors para ver lo que ha salido mal

#include "openssl/err.h" 
... 

SSL_CTX * ctx = SSL_CTX_new(....); 
if(!ctx) { 
    ERR_print_errors_fp(stderr); 
    //throw or return an error 
} 

simplemente tuve una lectura de los documentos SSL. Si necesita obtener programáticamente el código de error/cadena de error, debe usar las funciones ERR_get_error y ERR_error_string.

Tener una mirada here y here

8

Según http://www.mail-archive.com/[email protected]/msg51543.html, es posible que falte una llamada a SSL_library_init(). Agregar esto antes de la llamada SSL_CTX_NEW (..) solucionó el problema de valor NULL para mí.

+1

Gracias @Jay Taylor, guarde el día –

+0

Incluso si la llamada de falta falta fue el problema, esta respuesta no aborda la pregunta real, que es cómo obtener el mensaje de error. Sería bueno también señalar a las personas hacia el uso de 'ERR_get_error' (3) y amigos. –

Cuestiones relacionadas