HTTP와 HTTP”S”?
- 기존 HTTP는 서버에서부터 브라우저로 전송되는 정보가 암호화되지 않아 데이터의 도난이 일어나기 쉬움
- HTTPS의 S는 Secure의 약자이다.
- HTTPS는 응용 계층과 전송 계층 사이에 SSL(보안소켓계층)/TLS(전송계층보안)을 추가해 1️⃣ 암호화된 연결과 2️⃣ 검증된 사이트임을 인증 두가지 역할을 수행한다.
- HTTPS는 SEO(검색엔진최적화)에서 큰 혜택을 볼 수 있다.
- HTTP는 80번 포트, HTTPS는 443번 포트를 사용한다.
대칭 키와 비대칭키
[대칭키]
- 클라이언트와 서버가 하나의 키를 공유하고, 이 키를 통해 암호화와 복호화를 수행하는 방식
- 클라이언트와 서버가 키를 공유하기 위해, 한번은 송수신 과정이 필요하지만 이 과정에서 키가 탈취당할 위험이 있음
[비대칭키 = 공개키]
- 1970년 수학자들에 의해 발명
- 개인키(Secret Key), 공개키(Public Key) 두 개의 키가 사용된다.
- 클라이언트는 공개된 공개키를 통해 암호화한 데이터를 서버에 전송한다.
- 서버는 개인키를 가지고 있으며, 이 개인키를 통해 복호화를 한다.
- 공개키의 인증은 Certificate Authority에 의해 이루어진다
SSL/TLS
- SSL/TLS는 보안 프로토콜로, 보안 서비스(기밀성, 무결성, 인증)를 제공한다.
- SSL 3.1이 TLS 1.0으로 표준화
- 프로토콜 스택 상으로 응용 - 전송 계층 사이에 위치. 전송계층에 보다 밀접.
HTTPS 암호화 과정 = SSL/TLS Handshake
- TCP 3-way handshake
- HTTPS는 TCP 기반의 프로토콜이기 때문에, SSL/TLS handshake에 앞서 연결을 생성
- Client Hello
- 사용 가능한 암호화 알고리즘 목록, session id, ssl/tls 버전 등 전송
- Server Hello
- 암호화 알고리즘 선택, SSL/TLS 버전 등 전송
- Certification with Public Key
- 서버의 SSL/TLS 인증서를 클라이언트에게 전달.
- 인증서 내부에는 서버가 발행한 공개키 포함.
- 인증서는 CA의 개인키로 암호화 되어있음 → CA의 공개키를 사용하여 복호화(인증서 검증)
- Server Hello Done / Server Key Exchange
- 서버의 공개키 확보
- 인증서 내부에 서버의 공개키가 없는 경우 Server Key Exchange. (서버가 직접 공개키 전달)
- Client Key Exchange
- 클라이언트는 대칭키 생성 후, 공개키를 통해 암호화 하여 서버에 전송 → 이후 대칭키 방식
- ChangeCipherSpec / Finished
- 클라이언트와 서버에서 서로에게 보내는 패킷
- 통신할 준비가 되었음을 알림
- Finished 패킷으로 handshake 종료
참고자료
HTTPS가 뭐고 왜 쓰나요? (Feat. 대칭키 vs. 비대칭키)
HTTP vs HTTPS 차이, 알면 사이트의 레벨이 보인다. - wishket
HTTPS 통신과정 쉽게 이해하기 #3(SSL Handshake, 협상)