HTTP
SSL/TLS 프로토콜
RubyRabbit
2022. 8. 8. 15:50
SSL / TLS 프로토콜
- Secure Socket Layer / Transport Layer Security
- 데이터를 암호화하여 전송하기 위한 보안 전송 계층의 프로토콜
- 과거에는 SSL 을 사용했으나 현대에는 보완된 TLS 를 사용함
디지털 인증서와 CA
- 서버는 디지털 인증서를 발급하는 CA 를 통해 인증서를 발급받는다.
- 서버는 발급받은 인증서를 클라이언트에게 제공하여 인증을 처리한다.
SSL Handshake
- 암호화된 HTTP 데이터를 전송하기 위 정보를 교환하는 과정
- Client Hello
- Pre Master Secret 을 생성하기 위한 클라이언트 랜덤 데이터와 클라이언트가 지원하는 암호화 방식 목록, 세션 ID를 전송
- Server Hello
- Pre Master Secret 을 생성하기 위한 서버 랜덤 데이터와 인증서, Client Hello 단계에서 받은 암호화 방식 목록 중에서 사용 가능한 암호화 방식을 선택해서 전송.
- Pre Master Secret 전송
- 인증서를 수신한 클라이언트는 내장된 CA의 공개키를 이용해서 인증서를 복호화(브라우저는 CA 리스트를 가지고 있음)
- 클라이언트는 서버 랜덤데이터와 클라이언트 랜덤데이터를 조합하여 Pre Master Secret 를 생성한 후 해당 값을 인증서에 포함된 서버의 공개키로 암호화하여 서버에 전송. 서버에서는 공개키에 매칭되는 개인키로 복호화한 Pre Master Secret 값을 통해 Session Key 를 얻어낸다.
- SSL Handshake 종료
- Client Hello
전송 데이터의 암호화 / 수신 데이터의 복호화
- 클라이언트는 전송할 데이터를 Pre Master Secret 를 통해 얻은 Session Key 를 통해 암호화하여 전송
- 서버는 Pre Master Secret 를 통해 얻은 Session Key 를 통해 수신한 데이터를 복호화하여 처리