❒ Description
HTTP 보다 안전한 HTTPS에 대해서 알아보고, 어떤 과정을 통해 안전한 통신을 할 수 있는지 공부하자!
참고로 이와 관련해서 옛날에 공부했었는데 여기서는 부족한 부분을 추가/보충할 것이다.
※ 이번 포스팅에서는 별도로 예상 면접 질문은 뽑지 않는다.
❒ SSL/TLS Handshake
SSL(Secure Sockets Layer) 핸드셰이크는 클라이언트와 서버 간의 보안 연결을 설정하기 위한 과정이다.
이 과정은 데이터를 암호화하여 안전하게 전송할 수 있도록 하기 위해 필요한 키 교환 및 인증을 수행한다.
SSL 핸드셰이크는 다음과 같은 단계로 이루어진다.
1. [Client] Client Hello
클라이언트가 서버에 연결 요청을 한다. 이때 클라이언트는 자신이 지원하는 다음 정보들을 서버에 전송한다.
- SSL/TLS 버전
- 암호화 방식(예: AES, RSA)
- 압출방식
- 세션ID
- 난수(Random number) - 이 난수는 나중에 세션키를 생성하는데 사용된다.
사이퍼 슈트는 프로토콜, AEAD 사이퍼 모드, 해싱 알고지즘이 나열된 규약을 말하며, 다섯 개가 있다.
• TLS_AES_128_GCM_SHA256
• TLS_AES_256_GCM_SHA384
• TLS_CHACHA20_POLY1305_SHA256
• TLS_AES_128_CCM_SHA256
• TLS_AES_128_CCM_8_SHA256
예를 들어 TLS_AES_128_GCM_SHA256에는 세 가지 규약이 들어있다.
1. 프로토콜 : TLS
2. AEAD 사이퍼모드 : AES_128_GCM
3. 해싱 알고리즘 : SHA256
2. [Server] Server Hello
서버는 클라이언트의 요청을 받아서 자신이 선택한 SSL/TLS 버전과 암호화 방식을 클라이언트에게 전달한다.
서버는 또한 자신의 SSL 인증서를 클라이언트에게 보낸다. 이 인증서에는 서버의 공개키가 포함되어 있다.
서버는 클라이언트가 보낸 난수와 서버 자체의 난수를 포함하여 보낸다.
3. [Client] 서버 인증 및 키 교환
서버가 보낸 SSL 인증서가 정말 CA가 만든 것인지를 확인하기 위해 내장된 CA 공개키로 암호화된 인증서를 복호화한다.
정상적으로 복호화가 되었다면 CA가 발급한 것이 증명되는 셈이다.
그리고 클라이언트 측에서 임의로 생성된 48바이트 길이의 난수 Pre-Master Secret을 서버의 공개키를 사용해서
암호화하여 서버에 보낸다. 만약에 서버가 클라이언트 인증을 요청한 경우, 클라이언트도 자신의 인증서를 서버에 보낸다.
4. [Server & Client] 세 션키 생성
Pre-Master Secret(서버는 개인키로 복호화 과정을 거침)과 양쪽에서 보낸 난수를 사용하여 대칭 암호화를
위한 세션키(Session Key)를 생성한다. 이 세션키는 이후의 데이터 암호화에 사용되며, 양측이 동일한 키를 가지고 있다.
여기서 중요한 부분은 세션키는 서버에서 만들어서 클라이언트에게 전달하지 않는다는 점이다.
대신, 클라이언트와 서버가 각각 동일한 세션 키를 독립적으로 생성하게 된다. 왜냐면 앞에 과정에서 클라와 서버는
각각 Pre-Master Secret과 handshake 과정에서 주고 받은 난수 값을 알고 있기 때문이다.
이 조합은 TLS 표준에 따라 Pseudo-Random Function(PRF) 등의 알고리즘을 사용해 이루어지며,
클라와 서버 모두 동일한 세션키를 독립적으로 생성하게 한다.
5. [Client] Client Finished
클라이언트는 세션키를 사용하여 이전의 모든 handshake 메시지를 해시한 후, 이를 암호화하여 서버에 보낸다.
이는 handshake가 정상적으로 완료되었는지를 확인하기 위해서다.
6. [Server] Server Finished
서버는 클라이언트의 handshake 완료 메시지를 복호화하여 확인 후, 동일한 방식으로 해시된 메시지를
클라언트에게 보낸다. 이로써 양쪽 모두 handshake 과정이 성공적으로 완료되었음을 확인하다.
7. [Client & Server] 암호화된 데이터 전송
클라이언트와 서버는 이제 세션키를 사용하여 암호화된 데이터를 주고받기 시작한다.
이 과정에서는 대칭키 암호화가 사용되어 성능과 보안이 최적화되는 이점이 있다.
'CS > Network' 카테고리의 다른 글
웹 서비스의 전체적인 흐름 (0) | 2024.08.27 |
---|---|
HTTP 3.0 (0) | 2024.08.23 |
HTTP 2.0 (0) | 2024.08.20 |
HTTP Connection Management (0) | 2024.08.14 |
TCP 제대로 이해하기 (0) | 2024.08.14 |