SSL Labs에서 A와 A+의 차이는 HTTP 응답 헤더 하나입니다.
더 좋은 인증서가 아닙니다. 더 강한 키도 아닙니다. 다시 설계한 핸드셰이크도 아닙니다. max-age가 최소 6개월 — 15768000초, 한 줄 — 인 Strict-Transport-Security를 추가하면 등급이 “아주 좋음”에서 “완벽”으로 올라갑니다. 사람들이 그 도약을 마치 보안 기능을 출시한 것처럼 자축하는 걸 봤습니다. 그들이 출시한 건 헤더 하나입니다.
SSL Labs를 비웃으려고 하는 말이 아닙니다. 진짜 좋은 도구이고, 2009년 Ivan Ristić가 만든 이래 TLS 설정의 기준점이었습니다. 서버가 현대 프로토콜을 협상하는지, 인증서 체인이 깨끗한지, RC4나 불완전한 체인을 방치하지 않았는지 알아야 할 때 저는 SSL Labs를 봅니다. 등급은 자기가 채점하는 대상에 대해 정직합니다. 문제는 사람들이 그 등급이 무엇을 뜻한다고 믿느냐이고, 그 믿음은 실제 측정 범위보다 터무니없이 큽니다.
등급이 실제로 채점하는 것
SSL Labs는 숫자 셋을 고정 가중치로 평균 냅니다: 프로토콜 지원 30%, 키 교환 30%, 암호 강도 40%. 여기에 인증서 검사가 관문 역할을 합니다 — 인증서가 나쁘면 곧바로 탈락시킬 수 있습니다. 80점 이상이면 A입니다. 그 아래로 B, C, D로 미끄러집니다.
그다음이 캡(cap)이고, 이 캡이 흥미로운 지점입니다. TLS 1.0이나 1.1을 지원하면 나머지가 아무리 좋아도 B로 묶입니다. 순방향 비밀성(forward secrecy) 없음: B. RC4가 어디든 있으면: B. 2048비트 미만 약한 Diffie-Hellman 파라미터: B. 불완전한 인증서 체인: B. TLS 1.3 없음: A-로 캡. 채점은 사실상 알려진-나쁜 설정들의 체크리스트가 숫자 옷을 입은 것입니다. 블랙리스트 항목을 전부 피하면 A에 도달합니다. 게임은 그게 전부입니다.
그것 자체는 괜찮습니다 — 알려진-나쁜 TLS 설정을 피하는 건 할 가치가 있고, 인터넷 대부분은 여전히 그러지 못합니다. 하지만 무엇이 측정되는지 보세요. 모든 입력이 채널의 속성입니다: 프로토콜 버전, 암호, 키 교환, 체인. 그중 단 하나도 채널 반대편에 있는 대상의 속성이 아닙니다.
레이팅 가이드는 대부분이 읽지 않는 평문으로 이걸 스스로 말합니다: SSL은 “여러 가능한 보안 문제를 다루지 않으며 다룰 수도 없다.” 애플리케이션 이야기입니다. 세션 처리, 인증 로직, 인젝션, 바이트를 실제로 서빙하는 소프트웨어 — 아무것도 범위에 없습니다. TLS 핸드셰이크에서는 보이지 않으니까요. SSL Labs는 파이프를 측정합니다. 그 안에 무엇이 흐르는지에 대해선 아무 말도 하지 않습니다.
피싱 키트도 A+를 받는다
이 논쟁을 끝내야 할 시연이 여기 있습니다. 피싱 사이트 — 당신의 은행 로그인을 훔치려고 만든, 오늘 아침 일회용 도메인에 올라간 — 는 SSL Labs에서 흔히 A나 A+를 받습니다.
당연합니다. Let’s Encrypt에서 무료 인증서를 20초 만에 받습니다. Cloudflare나 기본값으로 순방향 비밀성과 AEAD 암호로 TLS 1.3을 협상하는 현대 호스트 뒤에 앉습니다. 튜토리얼이 시키는 대로 HSTS 헤더를 답니다. SSL Labs가 보는 모든 입력이 깨끗하게 돌아옵니다. 범죄자가 당신의 은행과 똑같은 2026년 기본 인프라를 쓰기 때문입니다. 피싱 페이지로 가는 채널은 흠잡을 데 없이 보안됩니다. 중범죄인 건 목적지입니다.
이건 SSL Labs에 대한 흠집이 아니라, 바로 그 핵심입니다. 등급은 전송을 인증하고, 사기 사이트로 가는 전송도 여전히 좋은 전송입니다. 하지만 자물쇠 아이콘식 본능 — A+면 안전하다 — 은 정확히 이 등급이 유도하는 오독이고, 업계는 그걸 부추깁니다. “SSL Labs A+“가 벤더 보안 페이지에, RFP 답변에, 컴플라이언스 증빙에 등장합니다. 마치 그게 TLS 파라미터가 아니라 조직에 대한 진술인 것처럼요.
A에서 A+로 가는 단서
그 헤더 하나로 돌아가 봅시다. A→A+ 간격이 이토록 거슬리는 이유는, 그게 등급이 자기 천장을 인정하는 지점이기 때문입니다.
A를 받을 즈음이면 실질적인 작업은 다 한 겁니다: 현대 프로토콜, 강한 암호, 순방향 비밀성, 유효한 체인. TLS 설정이 의미 있게 표현할 수 있는 건 다 표현했습니다. 그렇다면 모두가 실제로 원하는 최고 등급이 그 위에 더하는 건 뭘까요? 긴 max-age의 HSTS와 경고가 하나도 없는 상태. 다음번엔 평문을 거부하라고 브라우저에 지시하는 것. 좋은 헤더입니다. 저도 권합니다. 하지만 그건 새로운 보안 단계가 아니라 — 같은 채널에 “이거 HTTPS인 거 기억해” 하고 붙인 포스트잇입니다.
“아주 좋음”과 “가능한 최고” 사이의 거리가 응답 헤더 하나라면, 그 척도는 측정할 것이 바닥난 것입니다. 등급을 더 만든다고 고쳐지는 결함이 아닙니다. 외부 TLS 스캔이 볼 수 있는 것의 정직한 가장자리입니다. A+는 열쇠구멍이 줄 수 있는 최고점입니다.
그럼 어디에 쓰나
이 등급은 회귀 경보와 바닥선으로서 값을 합니다.
바닥선으로서 “모든 서버를 최소 A로”는 훌륭한 엔지니어링 지시입니다. 잘 알려진 특정 TLS 실수 묶음을 배제하고, 전부 A인 서버 군은 그렇지 못한 군보다 채널 수준의 자충수가 확실히 적습니다. 회귀 경보로서는 더 낫습니다: 지난 분기에 A+였던 서버가 오늘 B라면 무언가 바뀐 것입니다 — 프로토콜이 다시 켜졌거나, 배포에서 체인이 깨졌거나, 암호 설정이 드리프트했거나. 그 델타는 알림을 걸 만한 진짜 신호입니다.
이것이 아닌 것은 보안 태세입니다. 당신의 애플리케이션이 안전하다는, 인증이 견고하다는, 데이터가 회선상의 수동 도청 외의 무엇으로부터 보호된다는 증거가 아닙니다. 사람들을 실제로 침해로 몰아넣는 실패들은 전부 핸드셰이크에 보이지 않습니다.
바꿀 수 있다면 하나만 바꾸겠는데, 채점이 아닙니다. 그 주변 문화입니다. A+를 성취로 대하는 걸 멈추고 A를 있는 그대로의 기준선 — 트로피가 아니라 입장료 — 으로 대하기 시작하세요. 제가 가장 덜 신뢰하는 조직은 종종 자기 A+를 가장 자랑스러워하는 곳입니다. 그건 값싸게 할 수 있고 보여주기 쉬운 보안 작업이니까요. 비싸고 보이지 않는 작업 — 어떤 외부 스캐너도 채점하지 않을 작업 — 이야말로 그 A+가 조금이라도 의미가 있었는지를 결정합니다.
자물쇠 아이콘은 수년간 사용자에게 거짓말을 했습니다: 암호화가 신뢰를 뜻한다는 거짓말. A+는 전문가에게 같은 거짓말의 더 작고 세련된 버전을 합니다. 잘-설정됨은 안전함과 같지 않습니다. 한 번도 같은 적이 없었습니다. 그저 측정하기 더 쉬울 뿐입니다.