TLS 1.3(RFC 8446, 2018)은 이전 버전의 취약점을 제거하고 핸드셰이크를 단순화한 최신 전송 계층 보안 프로토콜이다.
TLS 1.2 vs TLS 1.3
| 항목 | TLS 1.2 | TLS 1.3 |
|---|
| 핸드셰이크 RTT | 2 RTT | 1 RTT (0-RTT 재개 가능) |
| 키 교환 | RSA, DH, ECDH | ECDHE만 (Forward Secrecy 필수) |
| 암호화 스위트 | 수십 가지 | 5가지로 축소 |
| 제거된 기능 | - | RC4, 3DES, MD5, SHA-1, RSA 키교환 |
| 서버 인증서 암호화 | 없음 | 있음 (핸드셰이크부터 암호화) |
TLS 1.3 핸드셰이크
Client Server
│── ClientHello ──────────────────>│
│ (key_share, supported_groups) │
│ │
│<── ServerHello ─────────────────│
│ (key_share) │
│<── {EncryptedExtensions} ───────│
│<── {Certificate} ───────────────│
│<── {CertificateVerify} ─────────│
│<── {Finished} ──────────────────│
│── {Finished} ─────────────────>│
│── [Application Data] ─────────>│
│<── [Application Data] ──────────│
{ } = Handshake Traffic Key 암호화
[ ] = Application Traffic Key 암호화
0-RTT Early Data
# 재연결 시 0-RTT (PSK 사용)
Client Server
│── ClientHello ──────>│
│ (early_data, PSK) │
│── [0-RTT Data] ────>│ ← 응답 전에 데이터 전송!
│<── ServerHello ──────│
│<── [Application] ────│
주의: 0-RTT는 재전송 공격(Replay Attack)에 취약
→ 멱등(idempotent) 요청에만 사용 권장
TLS 1.3 암호 스위트
TLS_AES_256_GCM_SHA384 (권장)
TLS_CHACHA20_POLY1305_SHA256 (모바일 권장)
TLS_AES_128_GCM_SHA256
TLS_AES_128_CCM_SHA256
TLS_AES_128_CCM_8_SHA256 (IoT)
OpenSSL TLS 1.3 설정
bash
# TLS 1.3 전용 서버
openssl s_server -tls1_3 -cert server.pem -key server.key -port 443
# 키 교환 그룹 지정
openssl s_server -groups P-256:X25519:P-384
# Nginx TLS 1.3 설정
ssl_protocols TLSv1.3;
ssl_ciphers TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256;
관련 문서
- •[[mtls|mTLS (상호 TLS)]]
- •[[diffie-hellman|디피-헬만 키 교환]]
- •[[perfect-forward-secrecy|완전 순방향 비밀성 (PFS)]]
- •[[crypto-protocols|암호 프로토콜]]