네, 정확히 맞습니다. TLS 통신을 위해서는 서버와 클라이언트 양쪽 모두에 TLS 계층(Layer)이 필요합니다.
TLS는 한쪽에서만 암호화해서 보내는 일방적인 방식이 아니라, 서로 약속된 규칙(프로토콜)에 따라 상호작용하며 안전한 통신 채널을 만드는 과정이기 때문입니다.
각각의 역할을 간단히 설명하면 다음과 같습니다.
클라이언트 측 TLS 계층 (예: 웹 브라우저)
- 연결 요청 (Handshake 시작): 서버에 “안전한 통신을 시작하자”고 요청합니다. (ClientHello 메시지)
- 암호화 방식 제안: 자신이 지원하는 암호화 방식(Cipher Suite) 목록을 서버에 보냅니다.
- 서버 인증서 검증: 서버가 보낸 디지털 인증서가 신뢰할 수 있는 기관(CA)에서 발급되었는지, 만료되지는 않았는지, 접속하려는 도메인과 일치하는지 등을 확인하여 서버의 신원을 검증합니다.
- 암호화 키 생성 참여: 서버와 함께 통신에 사용할 대칭키(세션 키)를 생성하는 과정에 참여합니다.
- 데이터 암호화/복호화: 서버로 보낼 데이터를 암호화하고, 서버로부터 받은 데이터를 복호화합니다.
서버 측 TLS 계층 (예: 웹 서버)
- 연결 요청 수신: 클라이언트의 안전한 통신 요청을 받습니다.
- 암호화 방식 선택: 클라이언트가 제안한 암호화 방식 목록 중에서 하나를 선택하여 “이 방식으로 통신하자”고 응답합니다.
- 자신을 증명 (인증서 전송): 자신의 신원을 증명하기 위해 공개키가 포함된 디지털 인증서를 클라이언트에게 보냅니다.
- 암호화 키 생성 참여: 클라이언트와 함께 통신에 사용할 대칭키(세션 키)를 생성하는 과정을 주도합니다.
- 데이터 암호화/복호화: 클라이언트로 보낼 데이터를 암호화하고, 클라이언트로부터 받은 데이터를 복호화합니다.
간단한 비유
마치 두 사람이 아무도 모르는 암호를 정하는 과정과 같습니다.
- A(클라이언트): “우리 둘만 아는 말로 대화하자. 내가 아는 암호 방식은 1, 2, 3번이야.”
- B(서버): “좋아. 그중에서 2번 방식으로 하자. 그리고 내가 진짜 B라는 증거로 내 신분증(인증서)을 보여줄게.”
- A(클라이언트): (신분증을 확인하고) “응, 네가 B가 맞구나. 그럼 이제 이 암호(세션 키)를 사용해서 대화하자.”
- A, B (모두): (이제부터 2번 방식과 정해진 암호를 사용해 대화를 주고받음)
이 과정에서 한쪽이라도 암호를 정하는 규칙(TLS 프로토콜)을 모르거나 따르지 않으면 안전한 대화 채널이 만들어질 수 없습니다.
결론적으로, 우리가 흔히 보는 https:// 로 시작하는 안전한 웹사이트 접속은 웹 브라우저(클라이언트)와 웹 서버(서버) 양쪽 모두에 내장된 TLS 기능이 서로 긴밀하게 협력하여 이루어지는 것입니다.