1

openssl では、次のコードを使用して証明書のエラー番号を取得できます。

if(SSL_get_peer_certificate(ssl) != NULL){
    if((error = SSL_get_verify_result(ssl)) != X509_V_OK){
        std::cout << "error no = " << error << std::endl;
    }
}

しかし、次のようにこのエラーからエラー文字列を取得しようとすると:

std::string temp = ERR_error_string(SSL_get_verify_result(ssl), NULL) ;

私が得るのは次のとおりです。

error:00000013:lib(0):func(0):reason(19)

ここで正確な理由を取得する方法はありますか? 次のコードを使用してエラー文字列をロードしました。

SSL_load_error_strings();

しかし、まだ正確な理由はわかりません。を使用しようとする std::string a = ERR_reason_error_string(19);と、プログラムがクラッシュします。私は何を間違っていますか?

4

1 に答える 1

2

関数X509_verify_cert_error_stringを使用して、OpenSSL の証明書の検証に関連するエラーを取得してください。ERR_error_string は、証明書検証の失敗に固有のエラーではなく、他の SSL lib 関連のエラーのエラー文字列を示します。

クラッシュに関しては、値 19 への理由コード マッピングはありません。すべての SSL エラー理由コードは 100 から始まります。したがって、ERR_reason_error_string は NULL を返す必要があり、コードがクラッシュする原因となっています。

于 2012-07-12T08:10:02.950 に答える