HTTPS는 대칭키를 사용할까 비대칭키(공개키)를 사용할까?
정답은 둘 다 사용한다 이다.
대칭키는 알다시피 클라이언트와 서버가 같은 키를 공유하면서 암호화된 메시지를 주고받는 방식이다. 그런데 애초에 이 키를 클라이언트에게 어떻게 전송하느냐! 그것이 중요한 문제이자 한계점이었다.
HTTPS는 이 문제점을 비대칭키(공개키)를 사용해서 기가 막히게 해결한다. 그리고 그 과정을 TLS(Transport Layer Security) 또는 SSL(Secure Socket Layer)라고 부르는데 오늘은 TLS 핸드 셰이크에 대해서 자세히 알아볼 것이다.
참고로 TLS와 SSL은 서버와 클라이언트의 핸드셰이크 과정을 나타내는 같은 의미의 용어이다. 현재 시점에서 SSL은 TLS로 대체되었으며 (IEFT에 의해) 그렇다고 해서 SSL과 TLS가 극명한 차이점을 가지는 것은 아니다.
TLS 핸드쉐이크 과정
- 클라이언트와 서버가 TCP 연결을 수립한다.
- 클라이언트가 서버에게 무작위 메시지를 전송하면서 핸드셰이크를 시작한다. 이 메시지에는 클라이언트가 지원하는 TLS 버전, 지원되는 암호 제품군, 그리고 클라이언트가 생성한 무작위 메시지가 포함된다.
- 서버는 응답으로 SSL 인증서, 서버가 선택한 암호 제품군, 서버가 생성한 무작위 메시지를 전송한다.
- 클라이언트가 서버의 SSL 인증서를 CA를 통해서 인증받는다. 이 과정을 통해서 해당 서버가 신뢰할 수 있는 서버인지, 그리고 도메인의 소유자가 맞는지 확인한다.
- 클라이언트는 한번 더 무작위 문자열로 임시 키(예비 마스터 암호)를 만들어 전송한다. 이 문자열은 서버의 공개 키로 암호화되어 있으며, 서버가 개인 키로만 해독할 수 있다.
- 서버가 수신한 예비 마스터 암호를 해독한다.
- 해독한 예비 마스터 암호, 클라이언트가 보냈던 무작위 문자열, 서버가 보냈던 무작위 문자열을 사용해서 세션 키를 생성한다.
- 이 과정을 클라이언트도 수행한다. 당연히 서버와 클라이언트의 결과가 같아야 한다.
- 클라이언트가 세션 키로 암호화된 완료 메시지를 전송한다. 서버도 보낸다.
- 핸드쉐이크가 완료되었고, 세션 키를 대칭키로 사용해서 통신이 계속 진행된다.
HTTPS 연결이 종료되면 해당 세션 키를 파기한다. 만약 세션이 유지되고 있다면 세션 키는 언제든 재사용할 수 있다. 세션 키를 재사용하면 핸드셰이크 과정이 생략된다. (당연)
비대칭키와 대칭키를 혼용하는 이유
모든 웹 콘텐츠의 전송을 비대칭키(공개키) 방식으로 하면 웹 서버와 브라우저에 많은 부담이된다. 따라서 TLS 핸드셰이크 과정에서 생성된 세션 키를 통해 대칭키 방식을 이용하는 것이다.
reference
https://brunch.co.kr/@sangjinkang/38#comment
https://www.cloudflare.com/ko-kr/learning/ssl/what-happens-in-a-tls-handshake/
'CS' 카테고리의 다른 글
OSI 7계층 정리 (0) | 2022.10.08 |
---|---|
CORS 란 무엇일까 그리고 해결하는 방법 (0) | 2022.07.29 |
IP(프로토콜) (0) | 2022.03.20 |