証明書の失効とは?CDP と OCSP の仕組みを解説!

  • 2021年3月19日
  • 2021年3月21日
  • AD CS, PKI

デジタル証明書はコンピューターやユーザーの身分証明として利用されます。
例えば、Web サーバーの SSL 証明書や、社内 LAN のネットワークに接続する際のアカウント認証などに証明書が利用され、信頼できる証明機関から発行された証明書であることが確認できれば認証に成功します。

証明機関(CA)で証明書を発行した後は、有効期間の間は有効な証明書として利用できています。

もし、ある会社の社員が退職した後、その社員のユーザー アカウントに配布された証明書が退職した後も利用できてしまうとセキュリティ的に重要な問題が発生します。

証明機関は一度発行した証明書を利用されないように、証明書を失効させることができます。
今回は証明書の失効の仕組みについて紹介します。

 

証明書の失効とは?

“証明書の失効” とは、証明機関が発行した証明書を有効期間が切れる前に、証明書を利用できないように失効することです。

証明書を失効する一般的なシナリオとしては、①社員が退職してユーザーに発行していた証明書を利用できないようにする、② Web サーバーの HTTPS サイト用のサーバー証明書の秘密キーが漏洩した等です。

一度証明書を発行してしまうと、基本的には有効期間が切れるまでは証明書は利用できてしまいます。
しかし、上記のようなシナリオで証明書の有効期間が切れるのを待たずに、証明書を利用できないようにするには、証明書を “失効” して利用できない証明書とします。

証明書の失効は、対象の証明書を発行した証明機関上で行います。

Active Directory 証明書サービスで構築した証明機関で、発行した証明書を失効する方法は以下の通りです。

証明書の失効手順

1) 証明機関に管理者権限をもつユーザーでログオンします。

2) [Windows 管理ツール] より [証明機関] をクリックして certsrv の管理ツールを開きます。

3) 画面の左ペインより、[発行した証明書] から対象の証明書を右クリックして [すべてのタスク] – [証明書の失効] をクリックします。

 

4) [証明書の失効] の画面にて、[理由コード] にて証明書を失効する理由と、証明書を失効させる日時を指定して [はい] をクリックします。

 

5) [失効した証明書] の一覧に、失効した証明書が追加されます。

 

証明書失効リスト

証明書失効リストとは、証明機関が発行した証明書の中から失効させた証明書の一覧(リスト)が記載されたファイルです。
証明書失効リストは CRL(Certificate Revocation List) と呼ばれることも多く、この記事でも以降は CRL と記載します。

CRL のファイルのサンプルは以下の図の通りです。

上図の CRL のサンプルからもわかるように、失効した証明書のシリアル番号と失効した日時が記載されています。

証明書が有効かを検証する側は、証明機関から CRL を入手して検証中の証明書が CRL に記載されている失効された証明書の一覧に含まれてないかを確認します。
このように証明書が失効していないかを確認することを、”証明書の失効確認” と呼びます。

証明機関は発行した証明書が失効確認できるように、CRL を誰でもアクセスできる場所に公開しています。
CRL を公開している場所のことを CDP (CRL Distribution Point:CRL 配布ポイント) と呼びます。
CDP は HTTP もしくは LDAP の URL であることが多いです。

以下のように、証明書の “CRL 配布ポイント” の項目に、CRL を入手できる URL が記載されています。
証明書が有効かを検証する側は、CDP にアクセスして CRL を入手して失効確認を行います。

 

また、CDP の仕組みとは別に、証明書の失効確認は OCSP と呼ばれる証明書の失効状態を問い合わせるためのプロトコルを利用することもできます。
CDP と OCSP による失効確認の仕組みの詳細を以下に紹介します。

 

CDP による証明書の失効の仕組み

HTTPS の Web サイトへのアクセスや、VPN サーバーへの VPN 接続要求を行う時など、 接続先のサーバーの信頼性を検証するために、サーバー証明書の検証を行います。

証明書の検証にあたり、証明書の失効確認を行って、証明書が失効されていないか確認を行います。
証明書に記載されている CDP にアクセスして、証明書の失効確認を行う流れは以下の通りです。

上記の図の通り、証明機関は失効した証明書の一覧を記載した CRL を CDP に公開しています。

ユーザーは HTTPS サイトにアクセスした時に、Web サーバーから提示されたサーバー証明書を検証します。
サーバー証明書の検証にあたり、証明書に記載されている CDP の URL にアクセスして CRL を入手します。

ユーザーは CRL を入手したら、検証を行っているサーバー証明書のシリアル番号が CRL にある失効された証明書の一覧に含まれていないか確認します。

検証中の証明書のシリアル番号が CRL の一覧に記載されていれば、その証明書は失効されています。
一方、CRL の一覧に記載されていなければ、その証明書は失効されていません。

※補足:
Windows OS の端末は証明書を検証する度に、毎回 CDP から CRL を取得する動作ではありません。
CRL のキャッシュを保持しており、同じ証明機関から証明書を検証する時は CDP にアクセスせずに CRL のキャッシュを参照して証明書の失効確認を行います。

 

OCSP による証明書の失効の仕組み

CDP から CRL を取得する一般的な失効確認の仕組みとは別に、OCSP という証明書の失効状態を確認するプロトコルを使用して失効確認する方法もあります。

OCSP はオンライン レスポンダー(OCSP サーバー) と呼ばれる、各証明機関の CRL の情報を管理しているサーバーに、検証対象の証明書の失効状態を問い合わせるという仕組みです。

OCSP を利用する場合における、CDP にアクセスして、証明書の失効確認を行う流れは以下の通りです。

上図の通り、証明機関は失効した証明書の一覧を記載した CRL を CDP に公開しています。

各証明機関の証明書の失効状態を管理している OCSP サーバーは、管理対象の証明機関の各 CDP から定期的に CRL を取得しにいき、最新の CRL を取得して最新の状態の情報を保持しています。

クライアントはサーバー証明書の失効確認を行うとき、機関情報アクセス(AIA) に記載されている OCSP サーバーの URL に対して失効状態を問い合わせます。
この時、OCSP への問い合わせに、検証対象のシリアル番号を指定します。


※ google サイトのサーバー証明書の AIA です。
    “オンライン証明書状態プロトコル” の項目に OCSP の URL が記載されています。

 

OCSP サーバーはクライアントから証明書の失効状態の問い合わせを受けると、シリアル番号が CRL に含まれているかを確認します。
証明書のシリアル番号が CRL の一覧に記載されていれば、その証明書は失効されています。
一方、CRL の一覧に記載されていなければ、その証明書は失効されていません。
CRL を確認した結果として、good(有効)、revoked(失効)、unknown(不明) のいずれかをクライアントに応答します。

 

CDP と OCSP の特徴の違い

CDP の利用して証明書の失効確認を行う場合は、クライアントが CRL を取得して失効確認の検証を行います。
長く運用している証明機関の場合、これまでに失効した証明書の数が多くなり CRL のファイルのデータサイズが大きくなることもあります。

毎回 CRL ファイルを取得するのはパフォーマンスに影響がでることもあるため、Windows OS では CRL のキャッシュを保持し、次回以降はキャッシュの情報を元に証明書の失効確認を行います。

Windows OS は CRL のキャッシュは CRL の有効期間まで保持しており、キャッシュが有効である間は新たに CDP から CRL を取得することはありません。
もしその間に、証明機関で新たに証明書が失効されて CRL が更新されたとしても、キャッシュを利用して証明書の失効確認の検証を行うため、新たな証明書の失効をすぐに検知できない可能性があります。

一方、OCSP においては、OCSP サーバーは CDP に定期的にアクセスして常に最新の CRL の情報を保持しております。
また、証明書の検証を行うクライアント端末の方も、証明書を検証するタイミングで、都度 OCSP サーバーに失効状態を問い合わせます。
そのため、CDP から CRL を取得して失効確認を行う場合と比較して、OCSP の方が証明書の失効に早く検知することができる仕組みとなります。

また、OCSP では 証明書の検証を行うクライアント側が CRL の取得を行わないため、通信負荷などのパフォーマンスも軽減することができるというメリットもあります。