web-dev-qa-db-ja.com

クライアント証明書を検証する方法

私の理解では、セキュリティにクライアント証明書を使用する場合、何らかのプライベートキーとパブリックキーの証明書(X509など)を発行し、それをサービスのコンシューマに送信してから、消費する前に自分自身を承認したいと考えています。

しかし、それが実際に有効なクライアント証明書であることを確認する標準方法は何ですか?ここにstandardワークフローを提示し、この場合のCAの役割も提示してください。

また、クライアントマシンからクライアント証明書をエクスポートし、それを別の場所で使用することを妨げているのは何が原因であるのかと疑問に思っているのですが、秘密鍵のエクスポートは十分安全です。

11
Riri

高レベルの観点からは、3つのことが発生する必要があります。

  1. クライアントは、それがクライアント証明書の適切な所有者であることを証明する必要があります。 Webサーバーはクライアントに秘密鍵で何かに署名するように要求し、Webサーバーは証明書の公開鍵で応答を検証します。

  2. 証明書は、その署名機関に対して検証される必要があります。これは、署名機関の公開鍵を使用して証明書の署名を検証することによって行われます。さらに、証明書失効リスト(CRL)をチェックして、証明書がブラックリストに登録されていないことを確認します。

  3. 証明書には、それをWebサービスの有効なユーザーとして指定する情報が含まれている必要があります。 Webサーバーは、証明書内の特定の項目(通常は件名フィールド)を調べ、特定の値のみを許可するように構成されています。

19
John Wu

標準は「X.509」と呼ばれ、その具体例の下で「インターネットX.509公開鍵インフラストラクチャ証明書および証明書失効リスト( CRL)プロファイル」、別名 RFC 528 。完全で標準的な証明書検証アルゴリズムは セクション6 の(痛み)詳細に説明されています。

X.509がどのように機能するかを真剣に理解することは、少なくとも一度はそのドキュメントを読む努力をするまでは期待できません。それはあなたの心を混乱させますが、それは、証明書とPKIが本質的に複雑な問題であり、ID、認証、秘密鍵、および信頼とは何かという非常に正確な概念が必要だからです。 X.509はこの複雑さを事前に解決しようとし、RFC 5280のようなBehemothに似た標準をもたらします。


秘密鍵を「エクスポート不可」としてマークすることは、単なる希望的な考えです。技術者以外のユーザーが実際にキーをエクスポートするのが少し難しくなります。より良い答えは、それは問題ではないということです。ユーザーは、証明書に関連付けられた秘密鍵の制御を示すことにより、彼自身を認証します。ユーザーが自分の秘密鍵を他の場所に保存したい場合、それは彼のビジネスです。 ズボンのポケットにドアキーを入れても、ズボンに入れてもかまいません。ポケット。同様に、ドアの鍵を玄関マットの下に置いて、怪しげな個人がそこからそれをつかむと、セキュリティは消えますが、保険会社はそれがあなたの責任であると指摘します。

2
Tom Leek

証明書は、証明書の使用を制限するために使用できるさまざまなパラメーターを保持できます。たとえば、アプリケーション名とユーザー名を使用して証明書を発行できるため、アプリケーションは証明書が特定のアプリケーションに対して有効であることを確認してから、標準のx.509証明書の検証を実行し、受け入れ可能なユーザー資格情報を個人の資格情報に制限できます。証明書の発行先。

これはクライアント側の証明書を強力に利用するものであり、アプリケーションを公開する会社が証明書の発行を指定または制御する必要があり、証明書ベースの認証は、ユーザーの資格情報を認証するのと同じアーキテクチャ層で終了または通過する必要があります。 。 [言い換えると、SSL/TLSコンセントレータは問題を引き起こす可能性があります。]

注:証明書の追加フィールドは暗号で保護されているため、表示されていても、証明書の有効性を損なうことなく変更することはできません。その結果、これらのパラメーターを含めることは、証明書全体を偽装することよりも簡単です。

[〜#〜]参照[〜#〜]

1
el viejo

まず第一に、私は本当に秘密鍵認証で何が起こっているのかを正確に特定する必要があると思います:

  1. 秘密鍵:これはあなたの目だけのために秘密にしておかなければならないものです。
  2. 公開鍵:これは、ユーザーがあなたに連絡できるようにするために使用するものです(秘密鍵の所有者だけが知っている言語を使用しているようです)。
  3. 証明書:これは、公開鍵が実際に秘密鍵の所有者に関連付けられたものであることを検証するためのものです。

したがって、証明書は、心配することなく配布できる公開のものであると考えてください。

証明書はどのように機能しますか?簡単に言えば、公開鍵を発行するとき、CAは証明書に「秘密マーク」を追加するので、それを検証したいときは、所有者からCAに証明書を送信して、 「秘密の部分」は大丈夫です。 CAが秘密の部分をチェックし、整合性がある場合、使用に疑いがない場合は、公開鍵を使用しても「OK」になります。

作成と検証のプロセス全体(CAを含む)について学習できるように、このウィキメディア図を確認することを検討してください。

http://upload.wikimedia.org/wikipedia/commons/9/96/Usage-of-Digital-Certificate.svg

この他の図も役に立ちます:

http://blog.securism.com/wordpress/wp-content/uploads/2009/01/pki-simple-diag.jpeg

また、CAは通常、よく知られている信頼できる機関であり、通常、ブラウザにはそれらのリストが含まれていることを考慮してください。ただし、一部のエンティティ(通常は公的機関または組織)は独自のCAを使用しており、手動でリストに追加する必要があります(悪意のあるCAが通信を危険にさらす可能性があるため、このことについては非常に注意してください)。

これがお役に立てば幸いです。

(英語は私の母国語ではないので、文法/構文の修正を自由に追加してください)。

0
kiBytes

pathfinder-pki などのいくつかのプロジェクトでは、完全に準拠した方法で証明書を検証できます。

0
mricon