web-dev-qa-db-ja.com

SSL証明書フレームワーク101:ブラウザーは実際にはどのようにして特定のサーバー証明書の有効性を検証しますか?

(申し訳ありませんが、これは完全なnoobの質問であり、やや重複するトピックを投稿するリスクがあります。公開/秘密鍵、ハッシュ、デジタル署名について基本的に理解しています...過去数日間オンラインとスタックフォーラムを検索していましたが、満足のいく答えを見つけることができません。)

例:オープンwifiでサーフィンをしていて、初めてブラウズしました。サーバーはSSL証明書を送り返します。私のブラウザーはそのことを行い、証明書が信頼できるCAによって署名されており、すべてが正常であることを確認します。ウェブサイトをあちこちクリックします。だが!

質問:実際にブラウザがサーバー証明書が正当であることを実際に確認する方法を誰かに簡単に説明してもらえますか?ええ、それで証明書自体には「Verisign」が発行したと書いてありますが、偽の証明書ではないことを確認するために、舞台裏で実際にどのような暗号マジックが起こりますか? 「SSL証明書は署名CAの公開鍵を使用して検証される」という説明を聞いたことがありますが、それは私には意味がありません。公開鍵はデータを暗号化することであって、データを解読することではないと思いました。

とても混乱しています...誰かが私を啓蒙してくれるなら、感謝します。前もって感謝します!

75
SecurityNoob

SSLが非対称鍵ペアを使用することは正しいです。 1つの公開キーと1つの秘密キーが生成されます。これは、公開キー基盤(PKI)とも呼ばれます。公開鍵は世界中に配布されるものであり、データの暗号化に使用されます。ただし、実際にデータを復号化できるのは秘密鍵だけです。次に例を示します。

両方がwalmart.comにアクセスして商品を購入するとします。取引に署名するために、私たち一人一人がウォルマートの公開鍵のコピーを取得します。トランザクションがウォルマートの公開鍵で署名されると、ウォルマートの秘密鍵だけがトランザクションを復号化できます。 Walmartの公開鍵のコピーを使用すると、トランザクションが復号化されません。ウォルマートは、秘密鍵を非常にプライベートで安全な状態に保つ必要があります。それ以外の人は、ウォルマートへのトランザクションを解読できます。これが DigiNotar違反 が非常に大きな問題であった理由です

秘密鍵と公開鍵のペアの概念を理解したところで、実際に証明書を発行する人と、証明書が信頼される理由を知ることが重要です。私はこれを単純化しすぎていますが、証明書に署名するだけでなく、中間CAにも署名する、Verisignなどの特定のルート認証局(CA)があります。これは、相互に信頼するシステムのチェーンである、いわゆるチェーンオブトラストに従います。より良いアイデアを得るために、下にリンクされている画像を参照してください(ルートCAが一番下にあることに注意してください)。

Simple Chain of Trust

多くの場合、組織はワイルドカード証明書を購入するか、ドメインのみの署名を許可された中間CAとして登録されます。これにより、GoogleがMicrosoftの証明書に署名できなくなります。

この信頼の連鎖により、証明書をルートCAまで検証できます。これを示すために、DigiCert(および他の多く)には、この信頼を検証するためのツールがあります。 DigiCertのツールはリンクされています here 。私はgmail.comで検証を行いました。下にスクロールすると、次のように表示されます。

Certificate of Trust for Gmail

これは、gmail.comの証明書がGoogle Internet Authority G2によって発行されていることを示しています。

これで、gmail.comにアクセスすると、ブラウザーはハッシュのblobを取得するだけでなく、その方法で進んでいます。いいえ、証明書とともに詳細のホスト全体を取得します。

Google Public Cert Details

これらの詳細は、ブラウザーが証明書の有効性を識別するために使用するものです。たとえば、有効期限が過ぎている場合、ブラウザは証明書エラーをスローします。証明書の基本的な詳細がすべてチェックアウトされている場合、ルートCAまでのすべての方法で、証明書が有効であることを確認します。

証明書の詳細についてより良いアイデアが得られたので、上記の最初のイメージと同様のこの拡大されたイメージは、うまくいくと思います。

Certificate Chain of Trust Expanded

これが、ブラウザが本質的に信頼するルートCAに至るまで、ある証明書を次の証明書に対して検証できる理由です。

これがあなたが少しよく理解するのに役立つことを願っています!

75
PTW-105

@ PTW-105による他の優れた回答でカバーされていない質問(および@ JVE999によるコメントで尋ねられた質問)から1つの点を明確にするために:

公開鍵はデータを暗号化することであり、データを復号化することではないと思いました...

鍵は双方向に機能します。公開鍵で暗号化されたものは、秘密鍵でのみ復号化でき、その逆も可能です。 1つはプライベートで、もう1つはパブリックであると判断するだけで、概念的な違いはありません。

したがって、データをencryptで送信する場合、公開鍵を使用して暗号化し、あなただけが秘密鍵で復号化できます。

ただし、何かをsignしたい場合は、それが自分からのものであることを証明するために、メッセージのハッシュを生成し、そのハッシュをmyprivateキー。その後、誰でも私の公開鍵を使用してそれを復号化し、実際のメッセージハッシュと比較できますが、私だけが秘密鍵を持っているため、暗号化できたのは自分だけであることを知っています。つまり、私が署名してからメッセージハッシュが変更されていないこと、つまり、メッセージハッシュが私からのものであることを彼らは知っています。

コメントの通り、上記は真実ではありません。 @ dave_thompson_085によるコメントの link を参照してください。ただし、これは「適切に署名する方法」のチュートリアルではなく、暗号化と署名の秘密鍵と公開鍵の役割を明確にするだけです。その点での基本的なポイントはこれです:

  • データを暗号化するために、外部の当事者は公開鍵を使用し、秘密鍵の所有者のみがそれを復号化できます。
  • 署名するために、秘密鍵の所有者はハッシュ関数とその秘密鍵(および適切なパディングなど)を使用します。外部の関係者は、公開鍵を使用して署名を検証できます。これにより、メッセージが秘密鍵の所有者から送信されたことが保証されます(他の誰も秘密鍵にアクセスできない場合)。

署名は、(実装によっては)暗号化と同じキーペアを使用して行われる場合もあれば、逆の方法で使用される場合もあれば、別のキーペアを使用する場合もあります( (別のリンク を参照)。これも@ dave_thompson_085のコメント)

2
Adam

Webサイトに有効な証明書がある場合、認証局がWebアドレスが実際にその組織に属していることを確認するための手順を実行したことを意味します。 URLを入力するか、セキュリティで保護されたWebサイトへのリンクをたどると、ブラウザは証明書に次の特性があるかどうかを確認します。Webサイトのアドレスは証明書のアドレスと一致します。証明書は、ブラウザが認証局(CA)によって署名されています「信頼できる」機関として認識

TLSプロトコルとSSLプロトコルはどちらも、「非対称」公開鍵インフラストラクチャ(PKI)システムと呼ばれるものを使用します。非対称システムは、通信を暗号化するために2つの「キー」、「公開」キーと「秘密」キーを使用します。公開鍵で暗号化されたものは、秘密鍵でのみ復号化でき、その逆も可能です。あなたがサイトに行くとき、ウェブサイトはあなたのブラウザが検証しそして送信されたデータを暗号化するために使用する彼らの公開鍵を提示します(あなたのブラウザと彼らのサーバーの間で)そしてサーバー/サイトだけがデータを解読できる秘密鍵を持っています。

キーに関するいくつかの情報:非対称暗号化(または公開キー暗号化)では、暗号化と復号化に別々のキーを使用します。誰でも暗号化キー(公開キー)を使用してメッセージを暗号化できます。ただし、復号化キー(秘密キー)は秘密です。このようにして、意図した受信者だけがメッセージを復号化できます。最も一般的な非対称暗号化アルゴリズムはRSAです。ただし、この記事の後半でアルゴリズムについて説明します。

これらのサイトへの完全なクレジット:

https://www.us-cert.gov/ncas/tips/ST05-01

https://www.digicert.com/ssl-cryptography.htm

0
grepit