ホームページ  >  記事  >  システムチュートリアル  >  HTTPS接続プロセスと中間者攻撃・乗っ取りについて詳しく解説

HTTPS接続プロセスと中間者攻撃・乗っ取りについて詳しく解説

PHPz
PHPzオリジナル
2024-06-16 10:52:26291ブラウズ
1. HTTPS接続プロセスと中間者攻撃の原理

https プロトコルは http+ssl プロトコルです。接続プロセスは次の図に示されています。
HTTPS接続プロセスと中間者攻撃・乗っ取りについて詳しく解説

1.httpsリクエスト
クライアントは https リクエストをサーバーに送信します。

2. 公開鍵と秘密鍵を生成します
リクエストを受信した後、サーバーは公開鍵と秘密鍵を生成します。公開キーはロックに相当し、秘密キーはキーに相当します。公開キーによってロックされたコンテンツを開くことができるのは秘密キーだけです。

3. 公開鍵を返却します サーバーは公開キー (証明書) をクライアントに返します。公開キーには、証明書の発行機関、有効期限などの多くの情報が含まれます。

4. クライアント検証公開鍵
クライアントは公開鍵を受け取った後、まず発行局や有効期限など、それが有効かどうかを検証します。問題が見つかった場合は、証明書に問題があることを示す例外がスローされます。 。問題がない場合は、クライアントのキーとしてランダムな値を生成し、サーバーの公開キーで暗号化します。

5.クライアントキーを送信します

クライアントはサーバーの公開キーを使用してキーを暗号化し、それをサーバーに送信します。

6. サーバーはキーを受け取り、コンテンツを対称的に暗号化します

サーバーは暗号化されたキーを受け取り、それを秘密キーで復号してクライアントのキーを取得します。その後、サーバーは送信されるコンテンツとクライアントのキーを対称的に暗号化するため、キーが分からない限り、何が送信されているかを知ることができません。伝わった。

7. 暗号化された送信

サーバーは暗号化されたコンテンツをクライアントに送信します。

8. 暗号化されたコンテンツを取得して復号化する

クライアントは暗号化されたコンテンツを取得した後、以前に生成したキーを使用して復号化し、コンテンツを取得します。
中間者ハイジャック攻撃

https は絶対に安全というわけではありません。次の図に示すように、中間者はクライアントとサーバー間のすべての通信内容を取得することができます。

仲介者は、クライアントからサーバーに送信されたリクエストを傍受し、クライアントのふりをしてサーバーと通信し、サーバーからクライアントに返されたコンテンツをクライアントに送信し、サーバーのふりをして通信します。クライアント。
このようにして、クライアントとサーバー間の通信のすべての内容を取得できます。 HTTPS接続プロセスと中間者攻撃・乗っ取りについて詳しく解説 中間者攻撃を使用するには、クライアントが仲介者の証明書を信頼する必要があります。クライアントがそれを信頼しない場合、この攻撃方法は機能しません。


2. 中間者攻撃の防止

中間者によるハイジャックの理由は、サーバー証明書とドメイン名が検証されていないか、検証が不完全であるためです。便宜上、https リクエストにはオープンソース フレームワークのデフォルトの検証方法が直接使用されます。

ボレーみたいな

HTTPS接続プロセスと中間者攻撃・乗っ取りについて詳しく解説

HTTPS接続プロセスと中間者攻撃・乗っ取りについて詳しく解説

OKhttp3.0

HTTPS接続プロセスと中間者攻撃・乗っ取りについて詳しく解説

予防方法:

予防方法は2つあります

1. 一部の銀行アプリなど、セキュリティ要件が比較的高いアプリの場合は、クライアント側で証明書を事前に埋め込むことで通信が許可されます。この方法には、証明書の有効期限の問題という問題があります。証明書には一定の有効期間があるため、事前に埋め込まれた証明書の有効期限が切れた場合、更新を強制するか、ユーザーに証明書のダウンロードを要求することによってのみ解決できます。

ボレーを例に挙げると、検証は次のように実装されます

事前に埋め込まれた証明書を使用して SSLSocketFactory を作成します;

リーリー

SSLとドメイン名によって検証された接続を生成します


HTTPS接続プロセスと中間者攻撃・乗っ取りについて詳しく解説

HTTPS接続プロセスと中間者攻撃・乗っ取りについて詳しく解説

2 一般的なセキュリティ要件があるアプリの場合、ドメイン名、証明書の有効性、証明書キー情報、証明書チェーンを検証できます

Volley を例として、HTTPSTrustManager の checkServerTrusted メソッドを書き換え、強力なドメイン名検証を有効にします

Webview のための 3 つの HTTPS セキュリティ
現在、多くのアプリケーションは Webview を使用して H5 ページをロードします。サーバーが信頼できる CA によって発行された証明書を使用している場合、webView.setWebViewClient(webviewClient) のときに WebViewClient の onReceivedSslError() をオーバーロードします。証明書エラーが発生した場合は、handler.proceed () を直接呼び出します。 handler.cancel() が呼び出されると、エラーは無視され、証明書に問題があるページの読み込みが続行されます。証明書に問題がある場合、ユーザーは、そのページの読み込みを終了する可能性があります。リスクについてのプロンプトが表示され、ロードするかどうかをユーザーに選択させます。 セキュリティが必要な場合は、レベルが比較的高く、ページのロードを直接終了して、ネットワーク環境が危険であることをユーザーに通知します。

HTTPS接続プロセスと中間者攻撃・乗っ取りについて詳しく解説

handler.proceed() を直接使用することはお勧めできません。 Web ビューが https をロードし、サーバー証明書の強力な検証が必要な場合は、HttpsURLConnection を使用して onPageStarted() で証明書を強力に検証し、検証に合格しない場合は、Web ページのロードを停止します。もちろん、これにより Web ページの読み込み速度が遅くなり、さらなる最適化が必要になります。具体的な最適化方法については、この説明の範囲を超えているため、ここでは詳しく説明しません。

以上がHTTPS接続プロセスと中間者攻撃・乗っ取りについて詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。