https プロトコルは http+ssl プロトコルです。接続プロセスは次の図に示されています。
5.クライアントキーを送信します
6. サーバーはキーを受け取り、コンテンツを対称的に暗号化します
7. 暗号化された送信
8. 暗号化されたコンテンツを取得して復号化する
仲介者は、クライアントからサーバーに送信されたリクエストを傍受し、クライアントのふりをしてサーバーと通信し、サーバーからクライアントに返されたコンテンツをクライアントに送信し、サーバーのふりをして通信します。クライアント。
このようにして、クライアントとサーバー間の通信のすべての内容を取得できます。
中間者攻撃を使用するには、クライアントが仲介者の証明書を信頼する必要があります。クライアントがそれを信頼しない場合、この攻撃方法は機能しません。
2. 中間者攻撃の防止
中間者によるハイジャックの理由は、サーバー証明書とドメイン名が検証されていないか、検証が不完全であるためです。便宜上、https リクエストにはオープンソース フレームワークのデフォルトの検証方法が直接使用されます。
ボレーみたいな
OKhttp3.0
予防方法:
予防方法は2つあります
1. 一部の銀行アプリなど、セキュリティ要件が比較的高いアプリの場合は、クライアント側で証明書を事前に埋め込むことで通信が許可されます。この方法には、証明書の有効期限の問題という問題があります。証明書には一定の有効期間があるため、事前に埋め込まれた証明書の有効期限が切れた場合、更新を強制するか、ユーザーに証明書のダウンロードを要求することによってのみ解決できます。
ボレーを例に挙げると、検証は次のように実装されます
事前に埋め込まれた証明書を使用して SSLSocketFactory を作成します;
リーリー
SSLとドメイン名によって検証された接続を生成します
2 一般的なセキュリティ要件があるアプリの場合、ドメイン名、証明書の有効性、証明書キー情報、証明書チェーンを検証できます
Volley を例として、HTTPSTrustManager の checkServerTrusted メソッドを書き換え、強力なドメイン名検証を有効にします
handler.proceed() を直接使用することはお勧めできません。 Web ビューが https をロードし、サーバー証明書の強力な検証が必要な場合は、HttpsURLConnection を使用して onPageStarted() で証明書を強力に検証し、検証に合格しない場合は、Web ページのロードを停止します。もちろん、これにより Web ページの読み込み速度が遅くなり、さらなる最適化が必要になります。具体的な最適化方法については、この説明の範囲を超えているため、ここでは詳しく説明しません。
以上がHTTPS接続プロセスと中間者攻撃・乗っ取りについて詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。