TLS 1.3: 무엇이 바뀌고 어떻게 확인하는가
업데이트 2026-11-03 · 6 분 소요
TLS 1.3은 10년 만에 기능을 더하는 대신 없애는 방식으로 만들어진 프로토콜 개정입니다. 그래서 더 빠르고 잘못 구성하기도 더 어렵습니다. 그리고 TLS 1.2만 말하는 서버가 최고 등급에 도달하지 못하는 이유이기도 합니다.
TLS 1.2에서 무엇이 바뀌었나
TLS 1.3은 핸드셰이크를 두 번의 왕복에서 한 번으로, 재개 시에는 0으로 줄입니다. 정적 RSA와 정적 Diffie-Hellman 키 교환을 제거해 전방 비밀성이 선택이 아니라 필수가 됩니다. CBC 모드 스위트, RC4, SHA-1, 압축을 완전히 버리고, 핸드셰이크의 더 많은 부분(인증서 포함)을 암호화해 중간자가 알아내는 정보를 줄입니다.
실무적 결과는 예전에 신중한 구성이 필요했던 거의 모든 역사적 약점이 이제 불가능하다는 것입니다. TLS 1.3에서는 약한 스위트를 실수로 협상할 수 없습니다. 프로토콜이 현대적 해시를 쓰는 AEAD 스위트만 정의하기 때문입니다.
왜 등급에 영향을 주는가
CertH는 다른 모든 것과 무관하게 A+에 TLS 1.3을 요구합니다. 인증서도 암호도 HSTS도 완벽한 사이트가 이것만 없으면 95점, A에 머뭅니다. 잘 운영되는 사이트가 A에서 정체하는 가장 흔한 이유가 이 한 줄입니다.
또 다른 이유는 핸드셰이크 자체입니다. 지연이 큰 모바일 연결에서는 왕복 한 번을 아끼는 것이 새 연결마다 수십에서 수백 밀리초입니다. 체감 속도에 직접적이고 측정 가능한 영향입니다.
켜는 방법
nginx에서는 TLS 1.3 지원이 바이너리가 링크한 OpenSSL 버전에 달려 있습니다. OpenSSL 1.1.1 이상이 필요하며, 수정 전에 nginx -V로 built with OpenSSL 문자열을 확인하세요.
Apache에서는 httpd가 최신 OpenSSL에 링크되어 있다면 SSLProtocol만으로 충분합니다. Cloudflare에서는 TLS 1.3이 SSL/TLS → Edge Certificates의 존 수준 스위치이며 2021년부터 대부분 존에서 기본으로 켜져 있습니다.
# nginx: does this binary even support TLS 1.3?
nginx -V 2>&1 | tr ' ' '\n' | grep -i openssl
# negotiate TLS 1.3 explicitly and print the protocol
openssl s_client -connect example.com:443 -tls1_3 -servername example.com </dev/null 2>/dev/null | grep -E "Protocol|Cipher"
아무도 말하지 않는 주의점
0-RTT 재개는 빠르지만 재생 가능합니다. 첫 플라이트를 가로챈 공격자가 그대로 다시 보낼 수 있습니다. 첫 요청에서 상태가 바뀌는 엔드포인트, 예컨대 쓰기를 수행하는 모든 것에서는 0-RTT를 허용하지 마세요.
일부 기업용 중간 장비는 여전히 TLS 1.3에서 깨집니다. TLS 1.2를 함께 켜두는 것이 표준 타협입니다. 호환성을 유지하면서도 A+ 요구를 충족합니다. 평가자가 보는 것은 TLS 1.3 제공 여부이고 TLS 1.2 비활성화가 아니기 때문입니다.
마지막으로 TLS를 종료하는 CDN이나 로드밸런서는 원본을 완전히 가립니다. 엣지를 바꾸지 않고 원본만 바꾸면 외부 스캐너가 볼 수 있는 것은 아무것도 바뀌지 않습니다.
FAQ
TLS 1.3을 켠 뒤 TLS 1.2를 꺼야 하나요?
아니요. TLS 1.2를 켜두면 구형 클라이언트와 중간 장비 호환성이 유지되고 점수도 깎이지 않습니다. 끄면 폴백 옵션만 사라집니다.
TLS 1.3이 인증서 요구 사항을 바꾸나요?
일부 레거시 알고리즘을 사용할 수 없게 만듭니다. RSA 키 인증서는 여전히 괜찮지만 체인은 프로토콜이 허용하는 서명 알고리즘을 써야 합니다. 예를 들어 SHA-1 서명은 TLS 1.3에서 쓸 수 없습니다.