[네트워크] SSL (Secure Sockets Layer)
1. SSL/TLS 란
초기 웹사이트의 데이터는 HTTP를 통해 암호화 없이 전송되어 보안상의 문제가 있었다.
HTTP에 보안 정책을 추가한 것이 HTTPS 이며, 이 때 SSL을 사용하여 데이터를 암호화한다.
원래 SSL (Secure Socket Layer)은 Netscape사에서 만들어 사용하였으며, 이를 표준화시켜 현재 사용되고 있는 것이 TLS (Transport Layer Security) 이다. 관용적으로 SSL/TLS 라고 부른다.
OSI7 계층에선 Session 계층에 해당하며, TCP/IP 계층에서는 Application과 Transport 계층 사이에 위치한다.
2. SSL/TLS 동작 과정
SSL Handshake
HTTPS 통신은 대칭키로 암호화된 데이터를 주고 받는데, 이 대칭키를 안전하게 교환하는 과정을 SSL Handshake 라고 한다.
1) Client Hello
클라이언트는 서버에게 클라이언트 측에서 생성된 랜덤 데이터와 클라이언트가 지원하는 암호화 방식들 리스트를 전송한다.
2) Server Hello
서버는 클라이언트에게 서버 측에서 생성된 랜덤 데이터와 클라이언트의 암호화 방식 리스트 중 하나를 선택하고 CA에서 발급받은 인증서를 전송한다.
3) 인증서 확인, Pre-Master Secret 생성
클라이언트는 CA의 공개키를 사용해 인증서를 복호화하여 CA에서 발급된 것임을 확인하고 서버의 공개키를 얻는다.
서버의 랜덤 데이터와 클라이언트의 랜덤 데이터를 조합하여 Pre-Master Secret 이라는 키를 생성한다. 이 키는 Handshake 후에 데이터를 암호화하여 송수신하기 위한 대칭키를 생성하는데 사용된다.
4) Pre-Master Secret 전송
생성한 Pre-Master Secret 을 안전하게 전송하기 위해 비대칭키 암호화 방식이 사용된다.
클라이언트는 서버의 인증서로부터 얻은 서버의 공개키를 사용해 Pre-Master Secret을 암호화하여 전송한다.
5) Pre-Master Secret 복호화
서버는 암호화된 Pre-Master Secret을 자신의 개인키로 복호화한다. 이제 클라이언트와 서버는 동일한 Pre-Master Secret을 공유한다.
6) Session Key 생성
서버와 클라이언트는 Pre-Master Secret을 사용해 Master Secret을 만들고, 이 Master Secret을 사용해 Session Key를 생성한다.
이 Session Key를 대칭키로 사용해 데이터를 암호화하여 송수신한다.
댓글남기기