OkHttp ネットワーク フレームワーク - SSL ハンドシェイクと暗号化についての深い理解

OkHttp の概要

Square が提供するネットワーク リクエストを処理するオープン ソース プロジェクトで、現在 Android で最も広く使用されているネットワーク フレームワークです。Android 4.4 以降、HttpURLConnection の基礎となる実装では OkHttp が使用されます。

特徴:

  • HTTP/2 をサポートし、同じホストへのすべてのリクエストがソケットを共有できるようにします。
  • 接続プーリングによるリクエストの遅延の削減
  • データはデフォルトで GZip 経由で圧縮されます
  • 重複したネットワークリクエストを回避するための応答キャッシュ
  • リクエストが失敗した場合、ホストの他の IP アドレスで自動的に再試行され、自動的にリダイレクトされます。

SSLとは

SSL は実際には Secure Scoket Layer であり、ネットワーク通信のセキュリティとデータの整合性を提供するセキュリティ プロトコルを提供し、トランスポート層がネットワークを暗号化します。

  • SSL 記録プロトコル: 高レベル プロトコルの安全なカプセル化、圧縮、暗号化などの基本機能を提供します。
  • SSL ハンドシェイク プロトコル: データ送信を開始する前に、通信する双方の当事者の ID を認証し、暗号化アルゴリズムをネゴシエートし、秘密キーを交換するために使用されます。

https セキュア http プロトコルは、SSL 層または TLS 層上に構築された http プロトコルで、通常のトランスポート層と http アプリケーション層の間に SSL または TLS セキュリティ層を挿入します。

https では、暗号化キーのネゴシエーションに非対称暗号化を使用し、セキュリティを確保するためにメッセージを暗号化するために対称暗号化を使用します。

https は http とは異なります。デフォルト ポートとしてポート 443 を使用します。TCP 接続を確立した後、SSL 層を初期化し、暗号化パラメータを通信し、秘密キーを交換します。

非対称暗号化

デジタル署名技術

デジタル署名技術は、第三者による改変のないデータの完全性 (送信者の身元の信頼性) を証明するものであり、主にダイジェスト アルゴリズムと暗号化の 2 つの側面が含まれます。

1. ダイジェスト アルゴリズムは、元の情報をハッシュ処理によって固定長のシーケンスに変換し、入力と出力を 1 対 1 にマッピングします。元の情報が変更されると、出力結果も変更されます。一般的なものには、MD5、 SHA-1、および SHA-256。お待ちください。

2. 暗号化には非対称暗号化が使用され、秘密キー暗号化により、暗号化された概要情報が変更できないことが保証されます。

デジタル署名プロセス:

1. 元の情報に対して要約アルゴリズム処理を実行して要約情報を取得し、秘密鍵を使用して要約情報を暗号化し、署名を生成します。

2. 署名と元の情報は最終的な署名ファイルにマージされ、リリースされます。

3. 受信者は公開キーを使用して、署名ファイル内のデジタル署名を復号化します。

4. 元の情報に対して要約アルゴリズム処理を実行します。

5. ステップ 3 と 4 の結果を比較します。それらが一貫している場合は、ファイルが変更されていないことを意味します。

デジタル証明書

1. デジタル証明書には公開鍵、証明書の有効期間、発行機関などが含まれており、CA 組織にデジタル証明書を申請し、取得したデジタル証明書に署名する必要があります。

  1. CA 組織のルート証明書は署名されていないデジタル証明書であり、その公開鍵は直接取得できます。

  2. CA 組織によって発行されたセカンダリ証明書は秘密キーを使用して署名されており、CA ルート証明書の公開キーを使用して復号化して、セカンダリ証明書の公開キーを取得できます。正常に復号できた場合にのみ、二次証明書の正当性を証明できます。

  3. クライアントは CA ルート証明書を保持しており、サーバーが要求されたデジタル証明書をクライアントに送信した後、クライアントはルート証明書の公開キーを使用してサーバー証明書を復号化し、検証します。

SSLハンドシェイクプロセス

SSL ハンドシェイク プロセスにより、暗号化アルゴリズムのネゴシエーション、暗号化キーの決定、および双方のデジタル証明書の認証が完了します。

具体的なプロセスは次のとおりです。

  • 1. クライアントは接続要求を開始し、クライアントがサポートする SSL バージョン番号、暗号化アルゴリズム (暗号スイート/暗号スイート) のリスト、および乱数をサーバーに送信します。
  • 暗号スイートの形式: 各スイートは「SSL」で始まり、その後に鍵交換アルゴリズムが続きます。「With」という単語を使用して、鍵交換アルゴリズム、暗号化アルゴリズム、およびハッシュ アルゴリズムを区切ります。たとえば、SSL_DHE_RSA_WITH_DES_CBC_SHA は、DHE_RSA (RSA デジタル署名を備えた一時的な Diffie-HellMan) が鍵交換アルゴリズムとして定義されていることを示し、DES_CBC は次のように定義されています。暗号化アルゴリズム。SHA をハッシュ アルゴリズムとして定義します。
  • 2. サーバーは、クライアントがサポートする暗号化アルゴリズムのグループを選択し、それらをサーバー証明書 (公開キーを含む) および乱数とともにクライアントに送信します。
  • 3. クライアントはサーバーの証明書を検証して公開キーを取得し、pre_master_secret と呼ばれるランダムなパスワード文字列を生成し、サーバーの公開キーを使用して暗号化し (非対称暗号化/復号化を参照)、暗号化された情報をサーバーに送信します。
  • 4. クライアントとサーバーは、pre_master_secret とクライアントとサーバーのランダム値 (手順 1 と 2 の乱数) に基づいて、暗号化キーと MAC キーを個別に計算します。

ここには 3 つの秘密鍵があります。サーバー証明書によって渡される公開鍵、サーバーが保持する暗黙的な秘密鍵、および最終暗号化鍵です。

公開キーと秘密キーは非対称暗号化アルゴリズムの秘密キーであり、主にサーバーとクライアント間のネゴシエーションに使用され、ネゴシエーション プロセスの機密性を確保するために最終的な暗号化キーを生成します。

最終的に生成された暗号化キーは対称暗号化アルゴリズムの秘密キーであり、主に後続のデータ交換の暗号化に使用されます。

pre_master_secret は、最終的な暗号化キーを生成するために (キー交換アルゴリズムを使用して) クライアントによって生成されるランダム コードです。

上記のプロセスは一方向の認証プロセスです。つまり、クライアントのみがサーバーを認証します。

この記事は、okhttp ネットワーク フレームワークにおける SSL ハンドシェイクと暗号化の簡単な紹介と理解です。詳細については、「okhttp ネットワーク フレームワーク ノート」にアクセスして、高度な複数の技術的なセクションを学習してください。クリックすると、詳細なカテゴリが表示されます。

おすすめ

転載: blog.csdn.net/m0_70748845/article/details/134038861