쓰는 이유
HTTPS는 SSL/TLS 보안 계층 위에서 HTTP가 작동하도록 한다. 그렇다면 왜 이렇게 하는 것일까? 간단히 말하면 보안 때문이다. HTTP는 클라이언트와 서버 간의 데이터를 주고받을 때 공격자가 데이터를 가로채기 쉬웠다. 암호화가 되지 않은 채 데이터를 전송하기 때문이다.
HTTPS는 서버와 클라이언트가 주고받는 텍스트를 암호화한다. 또한 클라이언트는 접속하려는 서버가 신뢰할 수 있는 서버인지 판단할 수 있다.
원리
SSL 프로토콜은 SSL 인증서를 사용해 작동한다. SSL 인증서는 클라이언트와 서버 간의 통신을 제 3자가 보증해 주는 전자화된 문서이다. 이 인증서를 통해 암호화를 한다. 이 방식을 좀 더 살펴보자.
CA는 서버의 공개키와 서버키를 암호화하여 보관한다. 암호화할 때는 공개키 암호화기법이 사용되는데 CA의 개인키로 암호화가 진행된다. CA는 서버의 공개키와 개인키를 암호화하고 인증서를 발급한다. SSL 인증서에는 서비스의 정보(인증서를 발급한 CA, 서비스의 도메인 등)와 서버의 공개키(!)가 포함되어 있다.
사용자가 서버에 요청을 하면 서버는 SSL 인증서를 보낸다. 클라이언트는 내장된 CA의 공개키를 이용해 SSL 인증서를 복호화한다. 만약 정상적으로 복호화되었다면 CA가 발급한 것이 증명되는 셈이다. 그러면 서버의 공개키를 얻을 수 있다. 서버의 공개키로 클라이언트가 생성한 난수와 서버의 난수를 사용한 premaster secret을 암호화하여 서버로 전송한다. 서버는 보유한 개인키로 클라이언트가 보낸 premaster secret 값을 복호화한다. 이렇게 복호화한 값을 master secret 값으로 저장한다. 이를 활용하여 세션키를 생성한다. 이 세션키는 대칭키 암호화에 사용될 키이다. 이것으로 브라우저와 서버 사이에 주고받는 데이터를 암호화하고 복호화한다. 이제는 웹상에서 세션키를 사용해 암호화/복호화하며, 요청과 응답을 HTTPS를 통해 할 수 있다. 마지막으로 HTTPS는 통신이 완료되는 시점에 세션키를 폐기한다.
참고
'CS 공부 > 네트워크' 카테고리의 다른 글
보안 게이트웨이 (0) | 2023.07.09 |
---|---|
게이트웨이 (0) | 2023.07.05 |
DNS 에 대한 이해 (0) | 2023.04.20 |
NAT Gateway란 (0) | 2023.02.16 |
세션과 JWT (1) | 2023.01.11 |