サーバーに接続した後、
SSL_get_verify_result()
マニュアルページを参照して証明書の検証結果を取得できます。
その後、SSL_get_session()
マニュアルページを介して接続に関連付けられたセッションを取得し、を介してセッションキャッシュから削除できますSSL_CTX_remove_session()
。
これにより、このセッションを使用している各接続がキャンセルされることはありませんが、新しい接続が古い(無効化および削除された)セッションを再利用していないことが保証されます。接続を閉じるには、を使用しますSSL_shutdown()
。
コードにOCSPおよびCRLチェックを追加することを忘れないでください。
使用済みセッションを本当に追跡したい場合、1つの方法は、独自のセッション処理コールバックを含めることです。セッション処理のドキュメントをSSL
参照して、終了する必要のあるオブジェクトを追跡します。
コメント後に編集:
このコードを使用すると、いつでも証明書を再確認し、CRLステータスを再確認できます。
X509_CRL *crl;
/* load crl */
FILE *fp = fopen(/*path to crl */, "r");
d2i_X509_CRL_fp(dp, &crl);
X509 *cert = SSL_get_peer_certificate(ssl); //ssl is your running connection
X509_STORE *store = SSL_CTX_get_cert_store(ctx);
/* add crls */
X509_STORE_add_crl(store, crl);
X509_VERIFY_PARAM *param = X509_VERIFY_PARAM_new();
X509_VERIFY_PARAM_set_flags(param, X509_V_FLAG_CRL_CHECK);
X509_STORE_set1_param(store, param);
X509_STORE_CTX *csc = X509_STORE_CTX_new();
X509_STORE_CTX_set_verify_cb(csc, /* your verify callback here */);
X509_STORE_init(csc, store, cert, NULL);
int ret = X509_verify_cert(csc);