[Computer Network] Transport Layer Security
HTTPS는 HTTP + TLS + TCP로 구성된다.
TLS 는 전송계층 보안 프로토콜으로 TCP 위에서 데이터를 암호화하고 무결성을 검증한다.
TCP는 소켓을 잇는 통로. TLS는 통로를 안전하게 보장. HTTP는 실제 내용물.
HTTP랑 TLS를 같이 쓸 때 HTTPS가 되는거지 전송 계층을 사용하는 모든 서비스에 TLS를 적용할 수 있다.
SMTP IMAP 등등.. 이메일에 사용되는 프로토콜에도 TLS를 붙일 수 있음.
Confidentiality
데이터가 암호화되어 제3자가 내용을 볼 수 없다.
대칭키 암호화를 사용
Integrity
데이터가 전송 도중 변조되지 않음을 확인한다.
SHA256 같은 해시를 사용
Authentication
서버나 클라이언트가 각각 정말 내 목표가 맞는지를 보장한다.
공개키 암호화 + 인증서를 사용
대칭키 암호화를 사용해서 데이터를 암호화한다는데?
일단 대칭키는 송신자와 수신자 모두 같은 키를 가지고 있어야 하는데, 처음 만난 클라와 서버가 그 키를 어떻게 합의해야할까?
여기서 Handshake를 사용한다.
정확하게는, 접속 단계에서 인증서를 사용한 공개키 방식을 사용하고, 대칭키를 교환한 후에는 데이터를 전송함.

SYN ACK 으로 TCP가 시작된다. TLS는 이 TCP 위에서 동작한다.
클라이언트가 TLS 세션을 시작할 때 ClientHello를 보낸다.
이 요청에 지원 가능한 TLS 버전, Cipher Suite 목록, 세션키 생성에 사용할 랜덤 값 등을 포함한다.
이제 서버는 그 요청 중 하나를 선택해서 ServerHello를 보낸다.
이 응답에 선택된 TLS, Cipher Suite, Server Random 등을 포함한다.
이제 클라이언트가 세션키를 생성한다.
ChangeCipherSpec은 지금부터 데이터를 암호화 전환한다는 신호이고,
Finished는 지금까지의 Handshake 메세지가 변조되지 않았음을 MAC으로 검증했음을 의미한다.
이제 서버도 세션키를 계산하고 같은 키로 암호화를 시작한다.
Finished 메세지로 Handshake 종료를 확인한다.
이제부터는 실제 데이터를 세션키로 암호화해서 주고받는다.
Wireshark로 패킷캡쳐해도 페이로드가 모두 암호화된 형태로 나타난다.
일단 여기까지가 기본적인 TLS 개념이고..
TLS 1.3 버전부터는 이 과정을 대폭 단축시켜서 ClientHello 한 번에 키 교환 파라미터까지 포함하고 있어 보안 설정과 세션키 생성이 1RTT로 마무리된다.
DHE와 ECDHE는 TLS의 키 교환 단계에서 사용된다.
TLS 인증서는 클라이언트 입장에서는 지금 만난 이 서버가 진짜 내가 목표로 했던 서버가 맞는지를, 서버 입장에서는 지금 만난 클라이언트가 진짜 내가 목표로 했던 클라이언트가 맞는지를 증명하는 전자 신분증이라고 생각하면 된다.
인증서는 그냥 공개키 파일이 아니라, 다양한 보증 정보와 서명 데이터가 포함된 구조체이다.
인증서를 가진 대상, 발급한 기관, 유효기간, 공개키, 고유번호, 서명방식 등 여러 정보를 포함하고 있다.
서버가 공개키 + 도메인정보로 인증서 발급을 요청하면 CA는 도메인 주인임을 검증한다.
검증 후 CA의 비밀키로 서명한 인증서를 발급하고, 인증서를 웹 서버에 설치한다.
이제 브라우저가 접속할 때 인증서를 확인하고 서명을 검증할 수 있다.
클라이언트가 HTTPS로 요청 시 서버는 자신의 인증서를 함께 보낸다.
브라우저가 인증서 내용을 확인하고, 정보를 검사한다.
CA는 인증서 발급 시 자신의 비밀키로 서명했다. 브라우저는 CA의 공개키를 사용해 그 서명이 제대로 작성된건지 확인한다.
즉, 브라우저는 이미 신뢰할 수 있는 CA들의 루트 공개키를 가지고 있음..
Root CA
↓
Intermediate CA
↓
Server Certificate
서버의 인증서는 Intermediate CA에서 발급되고, 이 Intermediate CA를 보증하는 상위 기관이 있고.. 이렇게 타고 타고 가다 보면 Root CA 가 있다. 브라우저는 체인을 따라 올라가면서 서명 검증을 반복하고 Root CA까지 도달했을 때 신뢰할 수 있다고 판단한다.
TCP의 handshake와 TLS의 handshake가 서로 다름에 주의!!!!
TCP 3-way-handshake는 두 컴퓨터간 신뢰할 수 있는 데이터 전송 경로를 확립하는 역할을 수행한다.
1. Client -Server : 시퀀스 번호를 전달하며 연결 시작을 알린다. - SYN
2. Server - Client : 연결 요청을 확인했고 본인의 시퀀스 번호를 전달한다. - SYN, ACK
3. Client - Server : 서버의 응답을 확인했다. - ACK
TLS handshake는 이미 연결된 TCP 통로 위에서 데이터를 안전하게 주고받기 위해 설정을 수행한다.
1. Client - Server : TLS 버전 a,b,c 사용 가능. 암호화 방식은 A,B,C 사용 가능을 알린다. - ClientHello
2. Server - Client : 너의 제안 중 TLS 버전 a와 암호화 방식 A를 사용한다. 인증서와 공개키를 알린다. - ServerHello + Certificate
3. Client : 인증서가 CA에서 발급됐는지 검증하고, 세션 키를 생성해 서버의 공개 키로 암호화해 전송한다. - ClientKeyExchange
4. Server : 개인 키로 암호화된 세션 키를 복호화한다.
5. Finish : 세션 키로 모든 대화를 암호화한다.
'Computer Science > Computer Network' 카테고리의 다른 글
| [Computer Network] Congestion Control (0) | 2025.11.02 |
|---|---|
| [Computer Network] Transmission Control Protocol (1) | 2025.10.15 |
| [Computer Network] Domain Name System (0) | 2025.10.14 |
| [Computer Network] Cookie && Cache (2) | 2025.10.14 |
| [Computer Network] HTTP (0) | 2025.10.14 |
댓글
이 글 공유하기
다른 글
-
[Computer Network] Congestion Control
[Computer Network] Congestion Control
2025.11.02 -
[Computer Network] Transmission Control Protocol
[Computer Network] Transmission Control Protocol
2025.10.15 -
[Computer Network] Domain Name System
[Computer Network] Domain Name System
2025.10.14 -
[Computer Network] Cookie && Cache
[Computer Network] Cookie && Cache
2025.10.14