https 프로토콜은 http+ssl 프로토콜입니다. 연결 프로세스는 아래 그림과 같습니다.
클라이언트가 서버에 https 요청을 보냅니다.
요청을 받은 후 서버는 공개 키와 개인 키를 생성합니다. 공개 키는 자물쇠에 해당하고, 개인 키는 키에 해당합니다. 개인 키만 공개 키로 잠긴 콘텐츠를 열 수 있습니다.
중간자 납치 공격
미들맨은 클라이언트가 서버로 보낸 요청을 가로채고 클라이언트인 것처럼 가장하여 서버와 통신합니다. 서버가 클라이언트에게 반환한 콘텐츠를 클라이언트로 보내고 서버인 것처럼 가장하여 클라이언트와 통신합니다. 클라이언트.
이러한 방식으로 클라이언트와 서버 간 통신의 모든 내용을 얻을 수 있습니다.
2. 중간자 공격 방지
중간자 하이재킹의 이유는 서버 인증서와 도메인 이름이 확인되지 않았거나 확인이 불완전하기 때문입니다. 편의상 https 요청에는 오픈 소스 프레임워크의 기본 확인 방법이 직접 사용됩니다.
발리처럼
확인http3.0
예방법:
예방법은 두 가지가 있습니다
1. 상대적으로 보안 요구 사항이 높은 앱의 경우 클라이언트 측에 인증서를 미리 내장하여 인증서를 잠글 수 있습니다. 그러나 일부 은행 앱과 같이 클라이언트 인증서와 서버 인증서가 완전히 일치하는 경우에만 통신이 허용됩니다. , 이 방법은 인증서 만료 문제라는 문제에 직면합니다. 인증서에는 특정 유효 기간이 있기 때문에 사전 내장된 인증서가 만료되면 강제로 업데이트하거나 사용자에게 인증서를 다운로드하도록 요구하여 해결할 수 있습니다.
발리를 예로 들어보겠습니다. 검증은 다음과 같이 구현됩니다
사전 내장된 인증서를 통해 SSLSocketFactory를 생성합니다.
으아악
SSL 및 도메인 이름으로 확인된 연결을 생성하세요
2 일반적인 보안 요구 사항이 있는 앱의 경우 도메인 이름, 인증서 유효성, 인증서 키 정보 및 인증서 체인을 확인할 수 있습니다
발리를 예로 들어 HTTPSTrustManager에서 checkServerTrusted 메소드를 다시 작성하고 강력한 도메인 이름 확인을 활성화하세요
handler.proceed()를 직접 사용하는 것은 권장되지 않습니다. Webview가 https를 로드하고 서버 인증서에 대한 강력한 확인이 필요한 경우 HttpsURLConnection을 사용하여 onPageStarted()에서 인증서를 강력하게 확인하여 서버 인증서를 확인할 수 있습니다. 확인에 실패하면 웹 페이지 로드를 중지합니다. 물론 이로 인해 웹 페이지의 로딩 속도가 느려지고 추가 최적화가 필요합니다. 구체적인 최적화 방법은 이 논의 범위를 벗어나므로 여기서는 자세히 설명하지 않습니다.
위 내용은 HTTPS 연결 과정과 중간자 공격 및 하이재킹에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!