SSL 암호화 통산은 'SSL' 또는 'TLS(Transport Layer Security)'라는 보안 프로토콜을 통해 클라이언트와 서버가 보안이 향상된 통신을 하는 것을 뜻한다.
HTTP는 암호화되지 않은 방법으로 데이터를 전송하기 때문에 서버와 클라이언트가 주고 받는 데이터를 감청하는 것이 가능하다. 그래서 HTTPS가 생겨났고 이는 SSL가 기반이 된다.
SSL은 '보안 계층'이라는 독립적인 프로토콜 계층을 만들어 '응용 계층'과 '전송 계층' 사이에 속한다. 따라서, SSL은 HTTP뿐만 아니라 FTP, SMTP와 같은 다른 프로토콜에도 적용이 가능하다.
SSL은 80번 포트를 사용하는 HTTP와 달리 443번 포트를 기본으로 사용하는 TCP 기반의 프로토콜이다. TCP 기반이기 때문에 SSL 핸드셰이크 전에 TCP 3-way 핸드셰이크 또한 수행한다. 핸드셰이크가 완료되면, SSL 세션이 생성되고 클라이언트와 서버가 데이터를 주고 받는다. 그리고 서로 협상이 완료되면, 끝을 서로에게 알리고 세션을 종료한다.
Client hello : 클라이언트가 서버에게 연락한다. 브라우저 검색창에 도메인을 입력하는 것. 이때 클라이언트는 자신의 브라우저가 지원할 수 있는 암호화 방식을 제시한다. 그리고 램덤 데이터를 생성하여 추가로 전송한다.
Server hello : 서버가 클라이언트에게 연락한다. 서버는 클라이언트가 제시한 암호화 방식 중 하나를 선정하여 알려준다. 또한, 서버 자신의 인증서를 전달한다. 이 인증서에는 서버의 공개키가 포함되어 있다. 클라이언트와 마찬가지로 서버 측에서 생성한 랜덤 데이터 또한 전달한다.
Client key exchange: 클라이언트는 미리 주고받은 자신과 서버의 랜덤 데이터를 참고하여 서버와 암호화 통신을 할 때 사용할 키를 생성한 후 서버에게 전달한다. 이때 키는 서버로부터 받은 공개키로 암호화되어 보내진다.
Finished : 마지막으로 핸드셰이크 과정이 정상적으로 마무리되면, 클라이언트와 서버 모두 'finished' 메세지를 보낸다. 그 후 클라이언트가 생성한 키를 이용하여 암호화된 데이터를 주고받게 된다.
출처: