2009-05-25 11 views
6

Sono molto nuovo di SSL, in realtà direi che non ne so nulla.Problema con ottenere la descrizione dell'errore dopo SSL_CTX_new restituito NULL

Sto utilizzando il metodo "SSL_CTX_new" per creare un oggetto SSL_CTX. Il metodo restituisce null. La documentazione dice che posso controllare lo stack degli errori per ottenere la causa.

Quindi ho la funzione "int SSL_get_error (SSL * s, int ret_code)" che (come ho capito) devo usare per ottenere il messaggio di errore. la documentazione del metodo non dice nulla sul primo parametro della funzione. Dice solo che il secondo parametro ("ret") dovrebbe essere uguale al codice di ritorno dall'operazione fallita che può essere una delle seguenti:

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

Quindi ora ho due problemi. Il primo è che non ho usato nessuna di queste funzioni, ma piuttosto uso SSL_CTX_new che non restituisce alcun tipo di codice di ritorno (restituisce un puntatore all'oggetto SSX_CTX) Quindi non so cosa mettere come "ret" parametro. Il secondo problema è che non so cosa significhi il primo parametro e cosa dovrei inserire lì, perché il doc non dice nulla al riguardo.

+0

Puoi mostrare qualche codice in cui chiami SSL_CTX_new? –

risposta

6

È necessario un contesto valido per creare l'oggetto SSL.

Poiché non è possibile creare un contesto non è possibile utilizzare SSL_get_error.

Provare a utilizzare ERR_print_errors per vedere cosa è andato storto

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

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

Ho appena avuto una lettura dei documenti SSL. Se è necessario ottenere il codice di errore/stringa di errore in modo programmatico, utilizzare le funzioni ERR_get_error e ERR_error_string.

Date un'occhiata here e here

8

Come da http://www.mail-archive.com/[email protected]/msg51543.html, si può mancare una chiamata a SSL_library_init(). Aggiungendo questo prima che la chiamata SSL_CTX_NEW (..) risolva il problema del valore NULL per me.

+1

Grazie a @Jay Taylor, si salva il giorno –

+0

Anche se la chiamata di init mancante era il problema, questa risposta non risolve la domanda effettiva, che è come ottenere il messaggio di errore. Sarebbe bene anche indirizzare le persone verso l'uso di 'ERR_get_error' (3) e amici. –

Problemi correlati