2

SSL を使用して安全な接続を作成し、CA によって認定された証明書を使用しています。SSL セッションを作成した後、証明書の有効性を確認したいのですが、有効でない場合は、進行中のすべてのセッションを中断する必要があります。

進行中の SSL セッションを追跡して、この証明書を使用して確立されたセッションの数を確認するにはどうすればよいですか。SSL アクティブ セッションを追跡する API はありますか。

SSL_CTX_remove_session() を使用して SSL セッションを終了しますか? または、openSSL で SSL セッションを終了するための特定の API はありますか。再開がサポートされている場合、このセッションの別のコピーが保持されます。

4

1 に答える 1

5

サーバーに接続した後、 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);
于 2012-05-09T10:01:56.843 に答える