HTTPS란?
HTTPS는 HyperText Transport Protocl Secure의 약자로, SSL/TLS를 사용하는 HTTP 프로토콜의 보안 버전입니다. HTTP 프로토콜을 사용해 서버와 통신할 때 내부 정보들이 텍스트 그대로 노출되는 것을 방지합니다.
SSL/TLS란?
SSL은 클라이언트와 서버의 통신을 보증해주는 인증서입니다. 해당 인증서를 발급하는 기관은 CA(Certificate Authority)라고 합니다. SSL은 1996년 이후, 소유권 이전으로 인해 TLS라는 명칭으로 변경하여 업데이트를 진행하였습니다.
SSL 인증은 암호화된 SSL을 가지고 있는 서버와 클라이언트 간의 헨드셰이크를 통해 이루어지며 통신 연결을 위한 TCP 3-way-handshake 이후에 진행됩니다.
SSL 핸드셰이크 과정
- 클라이언트 -> 서버
- ACK에 Cipher suit 목록, sessionId, SSL version을 포함해서 서버에 전송합니다.
- Cipher suit에는 암호화 방식, 프로토콜 종류(SSL/TLS) 등이 포함됩니다.
- 서버 -> 클라이언트
- 선택한 Cipher suit, 암호화된 SSL 인증서를 담아 전송합니다.
- SSL 인증서에는 서버의 공개키와 암호화 알고리즘 방식이 포함되어 있습니다.
- 서버 -> 클라이언트
- 서버가 행동을 마쳤다는 의미로 Done 패킷을 하나 더 보냅니다.
- 클라이언트 인증서 확인
- 클라이언트 측에서 정상적인 인증서인지 확인하기 위해서 클라이언트가 가지고 있는 CA 리스트에서 CA 공개키를 얻습니다.
- 클라이언트 비밀키 공유
- 공개키를 통해 인증서를 복호화하여 서버의 공개키를 얻습니다.
- 클라이언트의 비밀키를 서버의 공개키로 암호화해 서버에 전송합니다.
- 서버는 본인의 비밀키를 사용해 복호화하여 클라이언트의 비밀키를 얻습니다.
- 통신 준비 완료
- 서버는 클라이언트의 비밀키를 통해서 통신할 준비가 끝났다는 의미로 클라이언트에 Change ciper spec을 전송합니다.
그럼 서버는 SSL을 어떻게 갖게돼?
- 서버가 공개키와 비밀키를 생성합니다.
- 서버가 서버의 정보와 공개키를 CA에 전달합니다.
- CA가 SSL을 발급합니다(서버의 정보와 공개키 포함)
- CA에서 공개키와 비밀키를 생성합니다. CA의 비밀키를 이용해 SSL을 암호화합니다.
- 암호화된 SSL을 서버에 전달합니다.