web-dev-qa-db-ja.com

証明書失効リストを使用する必要がありますか?

私は自分のAPIにセキュリティを提供しようとしています。

クライアントに証明書を発行して、TLSチャネル経由でAPIにアクセスします。つまり、SSLクライアント認証になります。

サーバーでCRLを使用する必要がありますか?どうして?

注:自分のCAを使用します。通信はマシン間で行われるため、ブラウザーは使用されません。

私の質問には例外があります。いつか、私のcaルートキーが危険にさらされた場合、CRLリストを作成し、古いcaルートキーを追加して、サーバーに簡単に実装できます。したがって、このケースは無視してください。

Websense Community からの画像 enter image description here

11
efkan

まず、CRLはnotルートCAをカバーします。定義上、ルートCAはrootです。それ自体以外には発行者がいません。 CRLは失効情報を伝達します。失効情報は、証明書発行者が、以前に発行された証明書は見た目が正しく、署名が正しく、すべてであるにもかかわらず、無効であると見なされることを通知する方法です。したがって、証明書について話すCRL [〜#〜] c [〜#〜]は、[〜#〜] c [〜#〜]の発行者からのものです。ルートCAには発行者がないため、取り消すことはできません。

つまり、root CAが危険にさらされている場合、深刻な問題に直面しています。これが、証明書に真剣に取り組む人々が3つのレベルの構造を使用する理由です。

  • ルートCAofflineマシンで作成および保守され、安全な部屋またはシールドされた部屋に保管されます。 CRLに署名するために定期的に(たとえば、毎月)電源が供給されていますが、それだけです。

  • 中間CAには、1回限りの手順として、ルートCAによって証明書が付与されます。

  • すべてのユーザー証明書は、中間CAによって発行されます。

中間CAが危険にさらされている場合(頻繁に使用されるため、おそらくネットワークの一部であると考えられるため)、ルートはその中間CAを取り消すCRLを発行できます。


そうは言っても、あなたのケースではtwo PKIインスタンスが動作していることを考慮する必要があります。 SSL/TLSとクライアント証明書:

  • サーバーは、クライアントが検証する証明書を所有しています。
  • クライアントは、サーバーが検証する証明書を所有しています。

これら2つの証明書は、別個のCAによって発行された別の世界に存在する場合があります。

サーバー証明書の場合、サーバー証明書が有効であることを確認するために必要なすべての情報にアクセスするには、クライアントが必要です。これには、定期的に発行されるCRLまたは同等のもの(OCSP応答...)が含まれます。ここでは、自分で証明書を発行しないと思います。代わりに、いくつかの商用CAから「SSL証明書」を購入します。これは、ルートCAがすべてのクライアントシステムに既に配布されており、そのCAがCRLを発行および発行するためです。

次に、クライアント証明書について見てみましょう。これらの証明書はyour serverによって検証されます。また、失効する証明書を決定するのはyoでもあります。つまり、ここでのすべてのCRLは、あなた自身に同意するメカニズムです。その意味では、これは完全にあなたのビジネスであり、あなたはあなたが適切だと思う方法でその機能を果たすことができます。たとえば、サーバーで、拒否されるクライアント証明書の拇印を一覧表示するSQLテーブルを維持できます。失効させると、そのテーブルにエントリが追加されます。自分と話すとき、必ずしもsignメンタルメッセージをする必要はありません。

いずれにしても、証明書などを取り消す機能が必要です。この時点で、authentication(あなたに話しかけるクライアントがBobであることを確認する)とauthorization(どのBobに許可するかを決定する)の間に違いがあることを理解する必要がありますします)。ボブの秘密鍵が危険にさらされているとします。

  1. ボブの鍵が悪用されている可能性があるため、ボブの身元の証明としてボブの証明書を受け入れることはできません。その証明書は、なんらかの方法(取り消しなど)で「キャンセル」する必要があります。

  2. 証明書の失効は非同期であるため、ボブと呼ばれるシステムをシステムから除外する「高速ブロック」システムも必要です即時。これは認証レイヤーで行われます。ボブのアカウントを一時的に「無効」にするか、ボブのアクセス権を「なし」に設定します。

  3. ただし、ボブはまだボブです(おそらく支払いをする)顧客です。彼は再び接続したいと思うでしょう、そしてそれはうまくいくはずです。したがって、ボブのアクセス権を再度有効にする必要があります。ただし、これを行うのは、Bobが新しい証明書(もちろん、新しい公開/秘密鍵のペアを使用)を発行され、Bobの古い証明書がサーバーによって拒否された場合のみです。

したがって、一般的には、そうでなければ正常に見える証明書を拒否する方法が本当に必要です。失効はそのような方法です。もう1つは、有効期間が非常に短い証明書(たとえば、有効期間は最大で1週間)のみを発行することですが、これには新しい証明書を毎日または毎週クライアントにプッシュする必要があり、クライアントソフトウェアは必ずしもそのようなタスクを実行する必要はありません。したがって、通常の方法は、有効期間の長い証明書をクライアントに発行し(1年または数年有効)、証明書の任意の拒否を許可するメカニズムサーバー側を維持することです。概念的には、そのメカニズムは、サーバーが参照する「望ましくない証明書」のリストを持つことと同じくらい簡単です。 A [〜#〜] crl [〜#〜]は、このようなリストの標準的な形式であり、発行元のCA signsは、安全でないメディアでの転送を許可します。ただし、上記で説明したように、このリストはyour CAとyourサーバーの間で転送されます。サーバーは同じマシンであり、必ずしもそのような署名を必要としない場合があります。

16
Thomas Pornin