2012-03-22 15 views
5

Ho un errore di comunicazione occasionale in un'implementazione SSL spinta ASIO, il messaggio di errore super disponibile restituito da boost è 'asio.ssl: 336458004'Come decifrare un codice di errore asio ssl?

Ho il sospetto che la cifra numerica è una sorta di costrutto aggregato composto di flag SSL, dico che poiché i codici di errore di Linux, i codici di errore boost asio ei codici di errore ssl non hanno alcun riferimento a '336458004', quindi presumibilmente deve essere costruito dinamicamente.

Qualcuno può fornire alcune informazioni su come dovrei decifrare questo codice di errore ?, Grazie.

risposta

11

usano ERR_PACK da crypto/err/err.h

questo permetterà la conversione di errore per stringa

#include <crypto/err/err.h> 

string err = error.message() 
if (error.category() == boost::asio::error::get_ssl_category()) { 
    err = string(" (") 
      +boost::lexical_cast<string>(ERR_GET_LIB(error.value()))+"," 
      +boost::lexical_cast<string>(ERR_GET_FUNC(error.value()))+"," 
      +boost::lexical_cast<string>(ERR_GET_REASON(error.value()))+") " 
    ; 
    //ERR_PACK /* crypto/err/err.h */ 
    char buf[128]; 
    ::ERR_error_string_n(error.value(), buf, sizeof(buf)); 
    err += buf; 
} 

Probabilmente non incluso nella spinta così ASIO non ha bisogno di link per SSL quando si utilizza i socket puri

+0

Grazie per aver postato questo. +1 –

3

Alla fine ho ottenuto alcune informazioni sul problema costruendo openssl nel debug e inserendo un punto di interruzione nella funzione di segnalazione degli errori OpenSSL ERR_put_error.

Il callstack ha mostrato che il problema era originato da SSL_read, causato dal fatto che la funzione di handshake non era stata inizializzata. Il numero di errore effettivo utilizzato dalla funzione ERR_put_error è 276, in che modo boost riesce a manipolare questo in 336458004 è oltre me. Il bug stesso era causato da un flag globale che stavo usando per commutare le funzioni SSL mentre eseguivo il tunneling attraverso un proxy su un server HTTPS remoto.

Spero che questo aiuti qualcuno.

Problemi correlati