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