인터넷은 안전한 통신을 위하여 암호화를 사용한다. 암호화란 일반적인 평문을 알아볼 수 없도록 암호화 하여 암호문으로 만드는 과정이다. 이와 같은 과정을 웹 브라우저와 웹 서버에는 HTTPS를 사용하여 암호화를 한다.
HTTPS는 SSL(Secure Socket Layer)/TLS(Transport Layer Security) 전송기술을 사용한다. TCP,UDP와 같은 일반적인 인터넷 통신에 안전한 계층을 추가하는 방식이다. 그리고 이 기술을 구현하기 위해 웹 서버에서 설치하는 것이 SSL/TLS dlswmdtjdlek. TLS는 SSL의 개선 버전으로, 최신 인증서는 TLS를 사용하지면 편의적으로 SSL인증서라고 부른다.
파란색 부분은 TCP layer의 3-way handshake로 HTTPS가 TCP기반 프로토콜이기 때문에 암호화 협상(SSL Handshake)에 앞서 연결을 생성하기 위해 실시하는 과정이고 아래 노란색 부분이 SSL HandShake 과정이다.
클라이언트) 브라우저는 서버의 SSL 인증서가 믿을만한지 확인
대부분의 브라우저에는 공신력 있는 CA들의 정보와 CA가 만든 공개키가 이미 설치되어 있다. 서버가 보낸 SSL 인증서가 정말 CA가 만든것인지 확인하기 위해 내장된 CA공개키로 암호화된 인증서를 복호화 해본다. 정상적으로 복호화 되었다면 CA가 발급한 것이 증명된다. 만약 등록된 CA가 아니거나, 등록된 CA가 만든 인증서처럼 꾸몄다며 이 과정에서 발각되어 브라우저 경고를 보낸다.
클라이언트) 브라우저는 자신이 생성한 난수와 서버의 난수를 이용하여 premaster secret를 만든다.
웹 서버 인증서에 딸려온 웹 사이트의 공개키로 이것을 암호화 하여 서버로 전송한다.
서버) 서버는 사이트의 비밀키로, 브라우저가 보낸 premaster secret값을 복호화 한다.
복호화 한 값을 master secret값으로 저장한다. 이것을 사용하여 방금 브라우저와 만들어진 연결에 고유한 값을 부여하기 위한 session key를 생성한다. 세션 키는 대칭키 암호화에 사용할 키이다. 이것으로 브라우저와 서버 사이에 주고받는 데이터를 암호화 하고 복호화 한다.
서버/클라이언트) SSL handshake를 종료하고 HTTPS통신을 시작한다.
브라우저와 서버는 SSL handshake가 정상적으로 완료하였고, 이제는 웹상에서 데이터를 세션키를 사용하여 암호화/복호화 하며 https 프로토콜을 통해 주고받을 수 있다. https통신이 완료되는 시점에서 서로에게 공유된 세션키를 폐기한다. 만약 세션이 유지되고 있다면 브라우저는 SSL handshake요청이 아닌 세션ID만 서버에게 알려주면 된다. 이부분은 1번에서 업급 되었다.