当社では、Windows Server 2019 上で Microsoft 証明機関を実行しています。MDM 経由で Android デバイスに証明書を発行しています。Android デバイスのユーザーは、クライアント証明書を必要とする Chrome Web ブラウザー (Android 上) を使用して、Web アプリケーション (Apache でホストされ、PHP 8 で実装) を参照します。
Apache Web サーバーに提示されたクライアント証明書が有効であることを検証/確認するために、Microsoft OCSP Responder ロールを持つ別の Windows Server 2019 インスタンスをインストールしています。Apache には、OCSP 検証を処理するためのディレクティブがいくつかあります。さらにセキュリティを強化するために、PHP で証明書を検証することも考えています。
いくつかの RFC と Microsoft の技術文書を読んで調べたところ、Microsoft OCSP Responder は失効ステータスの CRL を参照して証明書を検証しているようです。
証明書が CA から失効ではなく削除された場合、Microsoft OCSP Responder は証明書をどのように検証しますか? 削除されても失効していない場合、証明書は CRL に表示されません。
何か見落としているのでしょうか? Microsoft OCSP Responder は、シリアル番号とその失効ステータスを CA データベースに対して検証しますか?
答え1
Microsoft OCSP レスポンダーは、シリアル番号とその失効ステータスを CA データベースに対して検証しますか?
デフォルトでは、Microsoft OCSP はこのようなシリアル番号を「良好」として報告します。Windows Server 2008 R2 以降では、決定論的な OCSP 応答機能が Microsoft OCSP に追加されています。つまり、CA はこれまでに発行された証明書のすべてのシリアル番号を公開し、OCSP もこのディレクトリを調べるように構成されています。新しい動作は次のようになります。
- シリアル番号がフォルダ内に存在しない場合、OCSPは
UNKNOWN
ステータスで応答します。これは、要求されたシリアル番号がCAによって発行されていないことを意味します。 - フォルダ内にシリアル番号が存在する場合、CRLがチェックされます
- シリアルが CRL にリストされている場合は
REVOKED
ステータスで応答し、GOOD
そうでない場合は で応答します。
詳細については、Microsoft KB をご覧ください。オンライン レスポンダー サービスは、CRL に含まれていないすべての証明書に対して決定論的な GOOD を返しません。
KB には、発行された証明書のすべてのシリアル番号を構成済みフォルダーにダンプするスクリプトが含まれています。ただし、このスクリプトには少し欠陥があります。スクリプトの実行時に CA データベースに存在するシリアル番号のみをエクスポートします。CA データベースは維持され、CA データベースの過成長を防ぐために古いエントリが削除されます。これにより、UNKNOWN
証明書が発行されてどこかに存在しているにもかかわらず、削除された証明書で誤検知状態が発生します。CA のメンテナンスに関係なく発行されたものはすべて保持し、GOOD
証明書が CA から削除された場合でも応答することを好みます。この欠陥に対処するには、スクリプトから次の行を削除することをお勧めします。
dir | foreach {
remove-item $_ -force
}
これにより、スクリプトの実行間で CA に存在しなくなったシリアル番号が保持されます。