web-dev-qa-db-ja.com

SSL証明書はどのように検証されますか?

SSL証明書を安全に検証するために必要な一連のステップは何ですか?私の(非常に限られた)理解は、httpsサイトにアクセスすると、サーバーがクライアント(ブラウザ)に証明書を送信し、ブラウザがその証明書から証明書の発行者情報を取得し、それを使用して発行者に連絡し、何らかの方法で比較することです有効性の証明書。

  • これはどのくらい正確に行われますか?
  • このプロセスは、中間者攻撃に対して耐性がありますか?
  • ランダムな人が中間者攻撃で使用するために独自の検証サービスを設定できないようにするため、すべてが安全に見えるようになりますか?
177
rcreswick

これは非常に簡単な説明です:

  1. Webブラウザは、Webサーバーの公開キーを含むWebサーバーの証明書をダウンロードします。この証明書は、信頼できる認証局の秘密鍵で署名されています。

  2. Webブラウザーには、すべての主要な認証局の公開鍵がインストールされています。この公開鍵を使用して、Webサーバーの証明書が信頼できる認証局によって実際に署名されたことを確認します。

  3. 証明書には、Webサーバーのドメイン名またはIPアドレス、あるいはその両方が含まれています。 Webブラウザーは、認証局に、証明書にリストされているアドレスがオープン接続を持っているアドレスであることを確認します。

  4. Webブラウザーは、この接続のHTTPトラフィックを暗号化するために使用される共有対称キーを生成します。これは、すべてに公開/秘密キー暗号化を使用するよりもはるかに効率的です。ブラウザーは対称キーをWebサーバーの公開キーで暗号化して送信し、Webサーバーのみがその秘密キーを持っているため、Webサーバーのみがそれを解読できるようにします。

認証局(CA)は中間者攻撃を防ぐために不可欠であることに注意してください。ただし、署名されていない証明書でも、共有対称キーにアクセスする方法がないため、暗号化されたトラフィックを受動的に傍受することはできません。

259
Eli Courtwright

上記の証明書を購入することに加えて、無料で独自の証明書を作成することもできます。これは「自己署名証明書」と呼ばれます。自己署名証明書と購入した証明書の違いは簡単です。購入した証明書は、ブラウザがすでに知っている認証局によって署名されています。つまり、ブラウザは購入した証明書の信頼性を簡単に検証できます。

残念ながら、これにより、自己署名証明書はGoDaddyやVerisignなどの商用CAが販売する証明書よりも本質的に安全性が低く、使用する場合はブラウザの警告/例外に耐えなければならないという一般的な誤解が生じています。 これは正しくありません

自己署名証明書(またはbobinceが示唆するCA証明書)を安全に配布し、サイトを使用するブラウザにインストールする場合、それはただ購入したものと同じくらい安全で、中間者攻撃や証明書の偽造に対して脆弱ではありません。明らかにこれは、少数の人々だけがあなたのサイトへの安全なアクセスを必要とする場合にのみ実行可能であることを意味します(例えば、内部アプリ、個人のブログなど)。

私のような仲間の小規模ブロガーに自分自身を守るように意識を高め、証明書の背後にある概念を詳細に説明し、自己署名証明書を安全に作成および使用する方法を説明するエントリーレベルのチュートリアルを作成しました。 (コードサンプルとスクリーンショットで完了)。

50
Clint Harris

あなたは言いました

ブラウザはその証明書から証明書の発行者情報を取得し、それを使用して発行者に連絡し、何らかの方法で証明書の有効性を比較します。

次の2つのことが原因で、クライアントは発行者に確認する必要がありません。

  1. すべてのブラウザには、すべての主要なCA公開キーのリストが事前にインストールされています
  2. 証明書は署名されており、その署名自体は、クライアントが自分で、発行者のサーバーに接続することなく、その証明書が本物であることを確認できるため、証明書が有効であることの十分な証拠です。それが非対称暗号化の美しさです。

2.は1なしでは実行できないことに注意してください。

これはこれでよりよく説明されます 大きな図 少し前に作りました

(下部の「署名とは?」にスキップしてください)

blob

26
ychaouche

もっと技術的なことを考えているなら、このサイトはおそらくあなたが望むものです: http://www.zytrax.com/tech/survival/ssl.html

警告:ウサギの穴が深くなります:)。

7
Mike Frysinger

クライアントには、SSL認証局の公開鍵の事前シード済みストアがあります。サーバーが信頼されるためには、サーバーの証明書から、いわゆる「ルート」証明書の1つまでの中間認証局までの信頼チェーンが必要です。

信頼できる機関のリストを調べたり、変更したりできます。多くの場合、これを行うことで、あなたが信頼しているとわかっている地方自治体の証明書を追加します-あなたが働いている会社やあなたが通っている学校など。

事前シードされたリストは、使用するクライアントによって異なる場合があります。大手SSL証明書ベンダーは、ルート証明書がすべての主要なブラウザー($$$)にあることを保証しています。

中間者攻撃は、攻撃者が信頼されたルート証明書の秘密キーを持っていない限り、「不可能」です。対応する証明書が広く展開されているため、このような秘密キーの公開は、一般的にeコマースのセキュリティに重大な影響を及ぼします。そのため、これらの秘密鍵は非常に厳密に保護されています。

7
nsayer