安全な通信路を確保するためには、通信相手から提示されたTLS証明書が現在も失効していないと確認することが非常に重要です。これには、2つの方法があります。
証明書失効リスト(Cretificate Revocation List, CRL)は、失効した証明書のシリアル番号リストです。認証局によって署名・公開されており、クライアントがダウンロードしてオフラインでチェックします。きちんと機能させるためには、クライアントが定期的に最新のCRLを入手して更新する必要があります。
CRLの利点は、処理がシンプルでプライバシー上の懸念を生じさせない点です。しかし時間の経過とともにサイズが大きくなることが見込まれ、また失効が必ずしもリアルタイムに反映されるとは限らないため、わずかではあるものの攻撃の余地を残してしまいます。
オンライン証明書ステータスプロトコル(Online Certificate Status Protocol, OCSP)を使用すると、認証局が提供するレスポンダーに対してクライアントから都度「この証明書が現在も有効であるか」を問い合わせます。
OCSPの利点は、完全なCRLをダウンロードするよりも少ない帯域幅で使用できること、そして常に最新の検証結果を取得できることです。しかし使用には有効なネットワーク接続が必要であり、クライアントが都度問い合わせると遅延やプライバシーの懸念を引き起こす可能性があります。
なお、この問題はOCSPステープリングを用いることで緩和できます。証明書を提示するサーバー側が最近のOCSPレスポンスをTLSハンドシェイクに「ステープルする(ホッチキスで留める)」ことで、パフォーマンス向上やクライアントのプライバシー保護を実現します。
wolfSSLは、CRLとOCSPチェックの両方、さらにOCSPステープリングもサポートしています。これにより、あらゆる用途に対して最適な証明書検証を提供します。キャッシュされた失効リストに対して証明書を検証するためにCRLサポートを有効にすることも、リアルタイムで最新のステータスチェックを行うためにOCSPを有効にすることもできます。より高いセキュリティレベルを実現したい場合には、両方を有効化してください。CRLはオフラインまたは初期チェックを処理し、OCSPはシステムに直近の失効を検知させます。
wolfSSLでは、これらの機能を簡単に有効化できます。
// CRLを有効化してロード
wolfSSL_CTX_EnableCRL(ctx, WOLFSSL_CRL_CHECKALL);
wolfSSL_CTX_LoadCRL(ctx, "crl.pem", WOLFSSL_FILETYPE_PEM, 0);
// OCSPチェックとステープリングを有効化
wolfSSL_CTX_EnableOCSP(ctx, WOLFSSL_OCSP_CHECKALL);
wolfSSL_CTX_EnableOCSPStapling(ctx);
これらのAPIの詳細については、APIドキュメントをご参照ください。
ご質問がございましたら、ぜひ info@wolfssl.jp までお問い合わせください。
原文:https://www.wolfssl.com/crl-vs-ocsp-secure-certificate-revocation-with-wolfssl