[네트워크] HTTPS
Updated: Categories: CSHTTPS에 대해 알아보자
HTTPS
- HTTP + S(Secure Socket)
- 평문 텍스트로 정보를 주고받는 HTTP의 보안취약점을 해결하기 위한 프로토콜
- 클라이언트와 서버 사이 모든 통신 내용을 암호화
- SSL 및 TLS 프로토콜을 사용해 세션 데이터를 암호화
- 443 포트
암호화 방식
- HTTPS의 암호화 방식은 대칭키 + 비대칭키 방식을 둘 다 사용함
- 대칭키
- 비밀키(개인키) 사용
- 양측에서 공개되지 않는 키를 가지고 암복호화 진행
- 비대칭키
- 공개키, 비밀키(개인키) 사용
- 암호화시엔 공개키를 사용하고, 복호화시엔 양측에서 가지고 있는 비밀키를 사용
- 대칭키
- 클라이언트 <-> 서버간 통신에는 대칭키 사용
- 인증기관 CA(Certificate Authority)와의 통신에서 비대칭키 방식 사용
- 사이트는 공개키와 개인키를 만들고, CA에 자신의 정보와 공개키 관리를 요청
- CA는 사이트의 정보를 검증하고 CA의 개인키로 제출한 정보를 암호화해서 인증서를 만들고 서버에 전달
- CA는 웹 브라우저에게 자신의 공개키를 제공
- 사용자가 사이트에 접속하면 사이트는 인증서를 사용자에게 보냄
- 웹 브라우저는 미리 알고 있던 인증기관의 공개키로 인증서를 해독
- 이렇게 얻은 사이트의 공개키로 대칭키를 암호화해서 다시 사이트에 보냄
- 사이트는 개인키로 암호문을 해독하고 대칭키를 얻음
- 앞으로 양쪽에서 대칭키로 암,복호화하며 통신
통신방법
- HTTP의 계층에서 보안 계층이 추가됨
- HTTP는 SSL과 통신하고, SSL이 TCP와 통신하는 구조
SSL Handshake
- 우선 3-way handshake 과정을 거치고, 브라우저는 서버가 https를 사용하고 있다는 것을 인지함
- ClientHello : 따라서 브라우저가 사용하는 암호화 방식을 보내고 인증서 요구
- ServerHello : 서버가 지원하는 암호화 방식을 보내고 인증서 응답
- 브라우저는 인증서를 확인하고, 대칭키(premaster secret)를 만들고 인증서의 공개키로 암호화하여 전송
- 서버는 대칭키(premaster secret)를 사이트 개인키로 복호화하고, 다음부터 통신에 해당 대칭키를 사용
단점
- HTTP의 암복호화 과정(handshake)에서 많은 시간이 소요됨 -> 과부하 발생 가능
- 신뢰할수 없는 CA에서 발급받은 인증서로 HTTPS로 만들 수 있으므로 HTTPS라 해서 무조건 안전한것은 아님
- 참고 : https://rachel-kwak.github.io/2021/03/08/HTTPS.html