HTTP 통신 과정
- 서버 접속 → 클라이언트 → 요청 → 서버 → 응답 → 클라이언트 → 연결종료
- 사용자가 웹 브라우저에 URL 주소 입력
- DNS 서버에 웹 서버의 호스트 이름을 IP 주소로 변경 요청
- 웹 서버와 TCP 연결 (3-way-handshake)
- 클라이언트가 서버에 요청
- 서버가 클라이언트에 데이터 응답
- HTTP Response Message
- 서버-클라이언트 간 연결 종료 (4-way-handshake)
- 웹 브라우저가 웹 문서 출력
HTTPS 통신 과정
- 인증서 준비
- 인터넷 사이트는 자신의 정보와 공개 키를 인증 기관에 제출함
- 인증기관은 검증을 거친 후 사이트 정보와 공개 키를 인증기관의 개인 키로 암호화함(= 사이트 인증서)
- 인증기관은 이 사이트 인증서를 인터넷 사이트에 제공 & 인증기관은 웹 브라우저에게 자신의 공개 키를 제공
- 클라이언트가 서버에 접속하여 Handshaking을 하며 서로를 탐색
- (Client Hello) 사용자가 웹 브라우저로 사이트에 접속을 요청함 이때 클라이언트는 서버에 다음과 같은 정보들을 보냄
- 클라이언트 측에서 생성한 랜덤 데이터
- 클라이언트가 지원하는 암호화 방식들(클라이언트가 전달한 암호화 방식 중에서 사이트 쪽에서도 사용할 수 있는 암호화 방식을 선택하게 하기 위해)
- 세션 아이디(이전에 HandShake를 했다면, 비용과 시간을 절약하기 위해 기존의 세션을 재활용하게 되는데, 이때 사용할 연결에 대한 식별자를 사이트 측에 전송)
- (Server Hello) 사이트는 이에 대한 대답으로 다음과 같은 정보들을 보냄.
- 사이트 측에서 생성한 랜덤한 데이터
- 사이트가 선택한 웹 브라우저의 암호화 방식(이를 통해 암호화 방식 선택을 완료함)
- 인증기관으로부터 발급받은 인증서(인증기관의 개인 키로 암호화한 사이트의 정보가 들어있음) & 사이트 공개키
- Client측에서 인증을 확인
- 웹 브라우저는 이전에 받은 인증 기관의 공개 키로 사이트 인증서를 해독하여 검증함
- 웹 브라우저에 내장된 CA 리스트를 확인(없으면 경고 메세지를 출력)
- 웹 브라우저 측에서 생성한 랜덤 데이터와 사이트 측에서 생성한 랜덤 데이터를 조함하여
pre master secret
라는 대칭키를 생성
- 브라우저는 handshake에서 얻은 서버의 공개키로
pre master secret
을 암호화하여 사이트로 보내게 됨
- Server측에서 인증을 확인**(Handshaking 종료)**
- 사이트는 자신의 개인키로 안호문을 해독하여 대칭키(
pre master secret
)를 얻음
- 데이터 전송
- Server와 Client는 서로 가진 대칭키를 통해 Session key를 생성함
- 이 Session key 를 이용하여 데이터를 대칭키 방식으로 암호화한 후 주고받게 됨
- 연결 종료
- 데이터 전송이 끝나면 SSL 통신이 끝났음을 서로에게 알린 후, 통신에 사용한 Session key를 폐기함