2016-07-28 21 views
0

OpenSSLでハンドシェイク中に証明書チェーンをチェックしようとしています。
クライアントは、私は、私は検証コールバックにOpenSSLが証明書の検証エラーで自分自身をkill

SSL_set_verify(_ssl, SSL_VERIFY_PEER | SSL_VERIFY_CLIENT_ONCE | SSL_VERIFY_FAIL_IF_NO_PEER_CERT, verify_callback); 

を設定し、その関数に、私は

int verify_callback(int preverify_ok, X509_STORE_CTX *x509_ctx) { 
    bool ok = false; 
    [...] 
    return ok ? 1 : 0; 
} 

を持っている(私はGitHubの例からコードをコピーしCHE SSL_CTX*SSL*を作成して接続しています)
関数が1を返す場合はすべて正常ですが、0(別名失敗)を返すとプロセス全体が停止します(終了コード0)

現在、Win10 x64のCygwin64で最新のものをコンパイル中です

私がやっていることに何が間違っていますか?だから、多分あなたは例外または何かが欠けている https://www.openssl.org/docs/manmaster/ssl/SSL_CTX_set_verify.html

The return value of verify_callback controls the strategy of the further verification process. If verify_callback returns 0, the verification process is immediately stopped with "verification failed" state. If SSL_VERIFY_PEER is set, a verification failure alert is sent to the peer and the TLS/SSL handshake is terminated.

から撮影:

+0

OpenSSL wikiの[TLS Client](http://wiki.openssl.org/index.php/SSL/TLS_Client)も参照してください。サンプルコードには、証明書を出力するコールバックがあります。 – jww

答えて

0

ドキュメントが答えを持っています。

+0

ドキュメントでは、プロセスを強制終了するようなことについては言及していません。 4294956672:エラー:14089086:SSLルーチン:ssl3_get_client_certificate:証明書の検証に失敗しました:s3_srvr.c:3270: ' – full98

+0

あなたはコードをステップ実行しようとしましたか?デバッガ?スローされた例外もチェックします。 –

+0

Ops ...私はtry ... catchステートメントの中にいくつかのコードを書いたと思ったが、実際はそうではなかった。私の間違い!とにかくありがとう – full98

関連する問題