TLS

Transport Layer Security

도구

주고받는 내용을 가로채도 읽지 못하게 암호화하고 연결한 상대가 진짜인지 확인해 주는 전송 구간 보호 표준입니다.

등장 배경

인터넷에서 요청 하나는 여러 지점을 거칩니다. 카페의 공용 무선망, 건물의 네트워크 장비, 통신사 설비를 차례로 지나 서버에 닿습니다. 보호 없이 보내면 그 사이의 어느 지점에서든 내용을 그대로 읽을 수 있습니다. 로그인할 때 보낸 비밀번호도 마찬가지입니다. 지나는 지점 가운데 하나만 신뢰할 수 없어도 전체가 노출됩니다.

페이지덱에서 태오가 그 상태를 직접 확인한 적이 있습니다. 사내에서만 쓰는 도구 하나가 보호 없이 열려 있었고, 카페 무선망에 붙어 자기 요청을 들여다보니 문서 내용과 로그인 상태를 나타내는 값이 그대로 보였습니다. 그 값 하나를 복사해 다른 브라우저에 넣으면 남의 계정으로 들어갈 수 있는 상태였습니다.

가로채는 문제와 별개로 문제가 하나 더 있습니다. 주소를 제대로 입력했는데 중간에서 다른 서버가 대신 답하면 사용자는 알 수가 없습니다. 내용을 감추는 것만으로는 이쪽이 해결되지 않습니다. 누구와 연결됐는지도 함께 확인해야 하고, TLS가 둘을 한 묶음으로 다루는 이유가 그것입니다.

해결하는 문제

세 가지를 동시에 처리합니다. 내용 감추기, 상대 확인, 변조 감지입니다.

  1. 내용 감추기. 주고받는 데이터를 읽을 수 없는 형태로 바꾸는 암호화를 전송 구간에 적용합니다. 중간에서 가로채도 남는 것은 뜻을 알 수 없는 값입니다.
  2. 상대 확인. 서버가 인증서를 내보이고, 그 인증서는 발급 기관이 도메인 소유를 확인한 뒤 서명한 것입니다. 브라우저는 서명을 검사해 이 주소의 주인이 맞는지 판단합니다. 주소창의 자물쇠 표시가 이 검사를 통과했다는 뜻입니다.
  3. 변조 감지. 중간에서 한 글자만 바꿔도 받는 쪽이 알아차립니다. 내용을 되돌릴 수 없는 짧은 값으로 요약하는 해싱이 그 재료로 쓰입니다.

연결이 시작될 때의 절차는 네 단계입니다.

  1. 클라이언트가 서버에 연결을 열고 쓸 수 있는 방식 목록을 보냅니다.
  2. 서버가 인증서와 고른 방식을 답합니다.
  3. 클라이언트가 인증서를 검사하고, 양쪽이 이 연결에만 쓸 임시 키를 만듭니다.
  4. 그 뒤의 모든 내용은 임시 키로 암호화해 주고받습니다.

임시 키를 매번 새로 만드는 구조라 서버의 인증서가 나중에 유출돼도 과거에 오간 내용은 풀리지 않습니다. 이것이 이 표준의 최근 판이 특히 힘을 준 부분입니다.

운영에서 자주 걸리는 것은 기술이 아니라 만료입니다. 인증서에는 유효 기간이 있어서 짧으면 90일, 길어도 1년이면 끝납니다. 자동 갱신을 걸어 두지 않으면 아무 변경도 하지 않은 날 갑자기 접속이 막힙니다. 성능 부담은 예전 이야기이고 지금은 무시할 수준이지만, 연결을 시작할 때 오가는 왕복이 늘어나므로 CDN이나 로드 밸런서에서 먼저 받아 처리하는 구성을 씁니다.

대안

전송 구간을 보호하는 자리에서 이것을 대체하는 선택지는 사실상 없습니다. 비교 대상으로 올라오는 것들은 범위가 다른 수단입니다.

  1. 사설망이나 가상 사설망. 통로 자체를 외부에서 분리하는 방식입니다. 그 통로 안에서는 여전히 보호 없이 오가는 경우가 많아서, 내부라면 안전하다는 전제가 깨지는 순간 전부 노출됩니다. 통로와 내용은 다른 층의 문제입니다.
  2. 애플리케이션 계층 암호화. 전송과 별개로 본문을 한 번 더 암호화하는 방식입니다. 서버 운영자도 내용을 못 읽어야 하는 메시지 제품에서 씁니다. 이것은 위에 겹쳐 쓰는 층이지 대체가 아닙니다.
  3. 저장 데이터 암호화. 디스크에 남은 데이터를 보호하는 수단이라 다루는 문제가 다릅니다. 둘 다 필요하고 어느 쪽도 다른 쪽을 대신하지 못합니다. 무엇을 어디에 적용했는지 표로 적어 두면 빠진 구간이 드러납니다.

고를 것이 있다면 대안이 아니라 판입니다. 같은 계보의 옛 이름인 SSL은 지금 쓰면 알려진 취약점이 그대로 남고, 이름만 관용적으로 남아 인증서를 SSL 인증서라 부르는 식으로 통용됩니다. 실제 설정에서는 1.2 이상만 열고 1.3을 우선으로 두는 것이 지금의 기본입니다. 웹에서 이 보호를 적용한 상태를 HTTPS라고 부르는데, 별개의 기술이 아니라 같은 통신을 이 표준 위에 올린 것입니다.

실무 용례

"이 내부 도구가 보호 없이 열려 있어요. 공용 무선망에서 로그인 값이 그대로 보입니다."

내부용이라는 이유로 빠져 있던 구간을 짚은 말입니다.

"인증서 만료가 다음 주예요. 자동 갱신이 걸려 있는지 확인합시다."

이 영역의 사고가 대개 만료에서 난다는 뜻입니다.

"옛 판은 끄겠습니다. 오래된 브라우저 몇 개가 못 붙지만 그게 맞습니다."

호환을 조금 잃더라도 취약한 설정을 남기지 않겠다는 판단입니다.

태오가 사내 도구까지 포함해 모든 주소에 이 보호를 적용하고 인증서 자동 갱신을 걸었습니다. 적용 자체는 반나절이면 끝나는 작업이었습니다.

문제는 그 뒤에 생겼습니다. 갱신 작업이 한 번 실패했는데 아무도 몰랐고, 인증서가 만료된 새벽에 모든 접속이 막혔습니다. 화면에는 연결이 안전하지 않다는 경고가 떴고, 사용자 쪽에서는 서비스가 죽은 것과 구분되지 않았습니다. 태오는 만료 30일 전과 7일 전에 알림이 오도록 감시를 따로 붙였습니다. 자동화를 걸었다는 사실이 아니라 자동화가 돌고 있는지를 보는 장치가 필요했던 것입니다.

흔한 오해

자물쇠 표시가 있으면 안전한 사이트라고 읽는 경우가 가장 많습니다. 브라우저가 그 표시를 안전이라는 말과 함께 보여 준 시기가 있었기 때문입니다. 하지만 이 표시가 보장하는 것은 연결 구간이 보호되고 있고 주소의 주인이 맞다는 사실까지입니다. 가짜 사이트도 자기 도메인으로 인증서를 받을 수 있어서, 사기 목적의 사이트에도 자물쇠는 똑같이 붙습니다. 그 사이트를 믿을지는 다른 근거로 판단해야 합니다.

로그인 화면만 보호하면 된다고 읽는 것도 흔합니다. 비밀번호가 가장 중요한 값처럼 보이기 때문입니다. 그런데 로그인이 끝난 뒤의 모든 요청에는 로그인 상태를 나타내는 값이 실려 갑니다. 그 값 하나만 가로채면 비밀번호 없이도 그 계정으로 들어갈 수 있습니다. 한 화면만 보호하는 설정은 그 화면을 제외한 전부를 열어 둔 것과 같습니다.

같이 보면 좋은 페이지

마지막 업데이트 2026-09-16