今日は、HTTP スリーウェイ ハンドシェイクとは何か、HTTPS ハンドシェイクのプロセス、および HTTPS が安全である理由をまとめました。
前提
これら 2 つのハンドシェイクを説明する際、事前に説明しておく必要があることがいくつかあります。
HTTP と TCP/IP の違いは何ですか?
TPC/IP プロトコルは、主にネットワーク内でデータが送信される方法を解決するトランスポート層プロトコルであり、HTTP は主にデータをパッケージ化する方法を解決するアプリケーション層プロトコルです。 WEB は、アプリケーション層プロトコルとして HTTP プロトコルを使用して HTTP テキスト情報をカプセル化し、トランスポート層プロトコルとして TCP/IP を使用してそれをネットワークに送信します。
次の表は、元の OSI (Open System Interconnect) モデルにおけるさまざまな TCP/IP およびその他のプロトコルの位置を示しています:
PS: この表はオンライン情報から引用しています
CA とは証明書?
CA (認証局) は、証明書の管理と発行を担当する第三者機関であり、あらゆる業界および一般の人々から信頼され、認知されています。
CA証明書はCAが発行する証明書で、Webサイトが信頼できるかどうか(HTTPSの場合)、ファイルが信頼できるかどうか(改ざんされているかどうか)などを検証するために使用できます。 1 つの証明書が別の証明書が本物で信頼できることを証明するため、最上位の証明書はルート証明書と呼ばれます。ルート証明書 (それ自体が信頼できることを証明する) を除いて、他の証明書はそれ自体を証明するために上位レベルの証明書に依存する必要があります。
HTTP スリーウェイ ハンドシェイク
HTTP (HyperText Transfer Protocol) は、インターネット上で最も広く使用されているネットワーク プロトコルです。情報は平文で送信されるため、安全ではないと考えられます。 HTTP の 3 ウェイ ハンドシェイクについては、実際には 3 ウェイ TCP ハンドシェイクを使用して HTTP 接続の確立を確認します。
下の図に示すように、SYN(同期)は、TCP/IPが接続を確立するときに使用されるハンドシェイク信号、シーケンス番号、および確認番号であり、指している3つの矢印は3ウェイハンドシェイクを表し、3ウェイハンドシェイクが完了します。クライアントとサーバーがデータの送信を開始します。
追記: この写真はオンライン情報からのものです
最初のハンドシェイク: クライアントは syn パケット (syn=j) をサーバーに送信し、SYN_SEND 状態に入り、サーバーの確認を待ちます
2 回目のハンドシェイク:サーバーが syn パケットを受信すると、クライアントの SYN (ack=j+1) を確認すると同時に SYN パケット (syn=k)、つまり SYN+ACK パケットを送信する必要があります。 SYN_RECV 状態;
3 番目のハンドシェイク: クライアント クライアントはサーバーから SYN+ACK パケットを受信し、確認パケット ACK (ack=k+1) をサーバーに送信します。パケットの送信後、クライアントとサーバーは開始します。 ESTABLISHED 状態になり、3 ウェイ ハンドシェイクが完了します。
HTTPS ハンドシェイク プロセス
HTTPS は、HTTP に基づいて SSL プロトコルを追加し、SSL はサーバーの ID を検証し、ブラウザとサーバー間の通信を暗号化します。具体的にどのように暗号化、復号、検証を行うかを下図に示します。これをハンドシェイクと呼びます。 PS: 下の写真の説明は http://zhuqil.cnblogs.com から引用しています
1. プロトコルのサーバーには、自分で作成したデジタル証明書または CA 証明書のセットが必要です。 。違いは、自分で発行した証明書はアクセスを続ける前にクライアントによって検証される必要があるのに対し、CA 証明書を使用するとプロンプト ページがポップアップ表示されないことです。この証明書のセットは、実際には公開鍵と秘密鍵のペアです。公開鍵は他人による暗号化に使用され、秘密鍵は自分自身の復号化に使用されます。
3. 証明書を転送するこの証明書は実際には公開鍵ですが、証明書の発行機関や有効期限など、多くの情報が含まれています。
4. クライアントの証明書解析
この部分の作業は、まず、発行局、有効期限など、公開キーが有効であるかどうかを検証します。例外が見つかった場合、ポップアップが表示されます。証明書に問題があることを示す警告ボックスが表示されます。証明書に問題がない場合は、ランダム値が生成され、そのランダム値が証明書で暗号化されます。
5. 暗号化された情報の送信
この部分は、証明書で暗号化されたランダムな値を送信し、将来、このランダムな値をサーバーが取得できるようにすることです。このランダムな値を使用して暗号化と復号化が実行されます。
6. サービスセグメントの復号化情報
サーバーは秘密キーで復号化した後、クライアントから渡されたランダムな値 (秘密キー) を取得し、この値を使用してコンテンツを対称的に暗号化します。いわゆる対称暗号化とは、特定のアルゴリズムを通じて情報と秘密鍵を混合するもので、秘密鍵が分からない限りコンテンツを取得できず、クライアントとサーバーの両方が秘密鍵を知っているため、暗号化アルゴリズムは十分に強力で、秘密キーは十分に複雑で、データは十分に安全です。
7. 暗号化された情報の送信
この情報の部分は、サービスセグメント内の秘密鍵で暗号化された情報であり、クライアントで復元できます。
8. クライアントは情報を復号化します
クライアントは、以前に生成された秘密鍵を使用して、サービスセグメントによって渡された情報を復号化し、復号化されたコンテンツを取得します。
追記: たとえ第三者がハンドシェイクプロセス全体を通してデータを監視したとしても、彼らにできることは何もありません。
概要
なぜHTTPSは安全なのですか?
HTTPS ハンドシェイクの 4 番目のステップでは、サイトの証明書が信頼できない場合、Web サイトの信頼性を確認するために次の確認インターフェイスが表示されます。さらに、ステップ 6 と 8 では、クライアントの秘密キーを使用して暗号化と復号化を行い、データ送信のセキュリティを確保します。
HTTPS と HTTP の違い
1. https プロトコルでは、CA から証明書を申請するか、独自の証明書を作成する必要があります。
2. http 情報はクリアテキストで送信されますが、https では安全な SSL 暗号化が使用されます。
3. http は TCP で直接データを送信しますが、https は SSL 層 (OSI プレゼンテーション層) を通過し、異なるポートを使用します。前者は 80 (国内申請が必要)、後者は 443 です。
4. http 接続は非常にシンプルでステートレスです。HTTPS プロトコルは、暗号化された送信と ID 認証を実行できる SSL+HTTP プロトコルから構築されたネットワーク プロトコルであり、http プロトコルよりも安全です。
httpsの暗号化はトランスポート層で完了することに注意してください
httpsメッセージがtcpメッセージにパッケージ化されるとき、httpsのヘッダーフィールドか本文フィールドが暗号化されます。
tcpdump または Wireshark およびその他の TCP レイヤー ツールを使用してパケットをキャプチャする場合、暗号化されたコンテンツが取得されます。アプリケーション レイヤーを使用してパケットをキャプチャする場合は、Charels (Mac)、Fildder (Windows) を使用します。 パケット キャプチャ ツールを使用すると、もちろんクリア テキストで表示されます。 追記: HTTPS 自体はネットワーク送信のセキュリティを目的としています。
例、wireshark を使用してパケットをキャプチャします: http、キャプチャがプレーンテキストであることがわかります:https、キャプチャが暗号文であることがわかります:
付録HTTPS で一般的に使用される暗号化アルゴリズムと HASH アルゴリズムは次のとおりです:
非対称暗号化アルゴリズム: RSA、DSA/DSS対称暗号化アルゴリズム: AES、RC4、3DES HASH アルゴリズム: MD5、SHA1、SHA256以上がHTTP 対 HTTPS ハンドシェイクとは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。