HTTP는 Hypertext Transfer Protocol의 약자다. 즉 Hypertext 인 HTML을 전송하기 위한 통신규약을 의미한다. HTTPS 에서 마지막의 S는 Over Secure Socket Layer의 약자로 보안이 강화된 HTTP이다.
1. client → server 연결을 시도한다 (Client Hello)
클라이언트가 서버에 연결을 시도하며 전송하는 패킷, 자신이 사용가능한 사이퍼 스위트 목록 ,세션 아이디, SSL 프로토콜 버전 등을 전달.
2. server → client 응답 (Server Hello)
클라이언트가 보내온 Client Hello 패킷을 받아 사이퍼 스위트 중 하나를 선택한 다음 클라이언트에게 이를 알림. 자신의 SSL 프로토콜 버전 등도 함께 보냄.
3. server → client (Certificate, Server Key Exchange, Server Hello Done)
서버가 SSL인증서를 클라이언트에게 전달. 클라이언트는 서버가 보낸 인증서를 검증. 만약 서버의 공개키가 SSL 인증서에 없을 경우 직접 서버가 전달.
4. client 에서 server 의 SSL 인증서 검증
클라이언트는 서버가 보낸 인증서를 복호화를 통하여 검증.
💡 SSL 인증서를 발급한 CA(인증기관)는 CA의 비밀키(private key)를 이용해 인증서를 암호화했다. 그래서 SSL 인증서는 CA의 공개키를 이용해서만 복호화 할 수 있다. 클라이언트는 해당 CA의 공개키를 통해 암호화된 인증서를 복호화 한다. 즉, 클라이언트에서 CA 의 공개키를 이용해 인증서를 복호화했을 때, 복호화가 되었다는 것은 인증서는 해당 CA 에서 발급되었다라는 것을 검증할 수 있는 것.5. client → server 대칭키(비밀키) 전달 (Client Key Exchange, Change Cipher Spec)
클라이언트는 데이터 암호화에 사용할 대칭키(실제로 데이터를 암호화하는 키)를 생성후 서버의 공개키로 암호화 하여 서버에 전송, 클라이언트가 서버에 통신준비 완료를 알림.
6. Server / Client SSL Handshake Finished
서버가 대칭키를 받고 통신준비 완료를 알림.