HTTPS와 TLS는 무엇을 지켜 주고 무엇은 못 지킬까
주소창의 자물쇠 아이콘은 많은 사람에게 안전한 사이트라는 표시로 받아들여집니다. 하지만 자물쇠가 실제로 약속하는 것은 훨씬 좁은 범위입니다. 이 글에서는 HTTPS와 TLS가 어떻게 연결을 보호하는지, 인증서는 무슨 역할을 하는지, 그리고 HTTPS만으로는 해결되지 않는 문제가 무엇인지를 차례로 설명합니다.
HTTPS와 TLS는 무엇인가요
웹 주소 앞에 붙는 HTTP는 브라우저와 서버가 요청과 응답을 주고받는 약속입니다. 그런데 HTTP는 내용을 가공 없이 그대로 보냅니다. 같은 공유기나 중간 통신망에 있는 누군가가 지켜보고 있다면 내용이 그대로 보이고, 도중에 바꿔치기할 수도 있습니다.
HTTPS는 이 HTTP를 TLS(Transport Layer Security)라는 보안 계층 위에서 주고받는 방식입니다. 예전에는 SSL이라는 이름으로 불렸고, 지금도 그 이름이 습관처럼 쓰이지만 오늘날 실제로 쓰이는 것은 TLS입니다. 현재 널리 쓰이는 최신 버전은 TLS 1.3으로, 2018년에 표준 문서가 발표되었습니다.
자물쇠가 지켜 주는 세 가지
TLS가 연결에 제공하는 성질은 크게 세 가지로 나뉩니다.
- 기밀성: 중간에서 지켜보는 사람이 내용을 읽을 수 없습니다.
- 무결성: 전송 중에 내용이 바뀌면 이를 알아챌 수 있습니다.
- 상대 확인: 접속한 서버가 실제로 그 도메인 이름의 주인이 맞는지 인증서로 확인합니다.
여기서 세 번째 항목의 의미를 정확히 아는 것이 중요합니다. 자물쇠는 지금 연결한 곳이 주소창에 보이는 도메인이 맞다는 것을 확인해 줍니다. 그 도메인을 운영하는 곳이 믿을 만한 곳인지까지 확인해 주는 것은 아닙니다.
연결이 만들어지는 흐름
HTTPS 사이트에 처음 접속하면 본격적인 내용을 주고받기 전에 핸드셰이크라는 준비 과정을 거칩니다. 단순화하면 다음과 같습니다.
- 브라우저가 서버에 인사를 건네며 사용할 수 있는 암호 방식을 알려 줍니다.
- 서버가 자신의 인증서를 보내고, 양쪽이 사용할 방식을 정합니다.
- 브라우저는 인증서가 믿을 수 있는 발급 기관의 서명을 받은 것인지, 도메인 이름이 맞는지, 유효기간이 지나지 않았는지 검사합니다.
- 양쪽이 키 교환 방식으로 이번 연결에서만 쓸 비밀 키를 함께 만들어 냅니다.
- 이후의 모든 요청과 응답은 이 키로 대칭 암호화되어 오갑니다.
4번의 키 교환에는 보통 매번 새로 만든 임시 값이 쓰입니다. 그래서 나중에 서버의 장기 비밀 키가 유출되더라도 과거에 기록해 둔 통신 내용을 풀 수 없게 되는데, 이 성질을 순방향 비밀성이라고 합니다. 5번에서 쓰는 대칭 암호는 AES-GCM 같은 방식이고, 이 원리는 가이드의 AES-GCM 글에서 다루었습니다.
인증서와 발급 기관
인증서는 이 공개키는 이 도메인의 것이 맞다는 내용을 담은 전자 문서이고, 인증서 발급 기관(CA)이 서명해 줍니다. 브라우저와 운영체제에는 신뢰할 수 있는 발급 기관의 목록이 미리 들어 있습니다. 서버가 보낸 인증서가 이 목록의 기관으로 이어지는 서명 사슬을 가지고 있으면 신뢰하고, 그렇지 않으면 경고 화면을 보여 줍니다.
이 경고 화면은 가볍게 넘기지 않는 것이 좋습니다. 인증서 경고는 설정 실수일 수도 있지만, 중간에서 통신을 가로채려는 시도일 수도 있기 때문입니다. 알 수 없는 사이트에서 경고를 무시하고 계속 진행하는 습관은 피하시기 바랍니다.
HTTPS가 해결해 주지 않는 것
자물쇠가 있다고 해서 모든 위험이 사라지지는 않습니다. 대표적인 한계를 정리하면 다음과 같습니다.
- 피싱 사이트도 HTTPS를 쓸 수 있습니다. 무료로 인증서를 발급해 주는 기관이 생기면서 인증서를 받는 장벽은 크게 낮아졌습니다. 가짜 은행 사이트도 자신의 가짜 도메인에 대해서는 정상 인증서를 받을 수 있습니다. 주소를 눈으로 확인하는 일은 여전히 필요합니다.
- 서버는 내용을 볼 수 있습니다. HTTPS는 사용자와 서버 사이의 길을 보호할 뿐, 서버 자체는 받은 내용을 평문으로 다룹니다. 서비스 운영자나 서버가 침해된 경우 내용이 노출될 수 있습니다.
- 접속한 곳이 완전히 숨겨지지는 않습니다. 내용은 암호화되지만 어느 도메인에 접속하는지는 연결 과정에서 일부 드러날 수 있습니다. 이를 줄이는 기술이 도입되고 있지만 모든 환경에서 쓰이는 것은 아닙니다.
- 내 기기의 문제는 막지 못합니다. 악성코드가 기기에 있으면 암호화되기 전의 화면과 입력이 그대로 노출됩니다.
- 화면에 보이는 내용은 지켜 주지 않습니다. 캡처, 어깨너머 엿보기, 알림 미리보기는 별개의 문제입니다.
공용 와이파이처럼 망 자체를 믿을 수 없는 환경에서 HTTPS가 어떤 도움이 되는지는 공용 와이파이에서 메신저를 써도 될까에서 구체적으로 다루었습니다.
중간자 공격은 어떻게 막히나요
누군가 통신 중간에 끼어들어 양쪽에게 각각 상대방인 척하는 공격을 중간자 공격이라고 합니다. HTTP에서는 이것이 비교적 쉽지만 HTTPS에서는 어렵습니다. 공격자는 진짜 도메인의 인증서를 가지고 있지 않아서 브라우저가 신뢰하는 서명을 받은 인증서를 내놓을 수 없기 때문입니다. 가짜 인증서를 내밀면 브라우저가 경고를 띄웁니다. 다만 사용자가 경고를 무시하거나, 기기에 공격자가 만든 인증서가 신뢰 목록으로 설치되어 있다면 이 방어는 무너집니다. 일부 회사나 기관이 보안 점검을 위해 사용자의 기기에 자체 인증서를 설치해 암호화된 통신을 들여다보는 경우도 있어서, 업무용 기기에서 사적인 내용을 다룰 때는 이 점을 염두에 두어야 합니다.
직접 확인하는 방법
주소창의 자물쇠 아이콘을 누르면 대부분의 브라우저가 연결이 안전한지, 인증서가 누구에게 발급되었고 언제까지 유효한지를 보여 줍니다. 평소에 자주 쓰는 사이트로 한 번쯤 열어 보면 정상일 때의 모습이 익숙해져서 이상한 경우를 알아채기 쉽습니다. 특히 로그인이나 결제처럼 중요한 입력을 하기 전에는 도메인 철자를 한 글자씩 읽어 보는 습관이 유용합니다. 비슷하게 생긴 철자의 가짜 주소는 자물쇠가 있어도 위험합니다.
HSTS와 주소 확인 습관
주소를 직접 입력하거나 오래된 링크를 눌렀을 때 처음에는 암호화되지 않은 HTTP로 접속하는 경우가 있습니다. 이 짧은 순간이 공격의 틈이 될 수 있어서, 서버가 앞으로는 항상 HTTPS로만 접속하라고 브라우저에 알려 두는 HSTS라는 장치가 쓰입니다. 사용자가 할 수 있는 일은 단순합니다. 주소가 https로 시작하는지, 도메인 철자가 정확한지, 경고 화면이 뜨지 않는지를 확인하는 것입니다.
정리하면 HTTPS는 길을 지키는 기술입니다. 목적지에 도착한 뒤에 내용이 어떻게 쓰이는지, 상대가 누구인지, 내 기기가 안전한지는 별도의 문제입니다. 보안이 좋아졌다고 느끼게 하는 아이콘과 실제 보호받는 범위를 구분해서 생각하는 것이 안전한 습관의 시작입니다.
참고로 인증서에는 유효기간이 있어서 기간이 지나면 갱신해야 합니다. 갱신을 놓친 사이트는 브라우저가 경고를 띄우는데, 이 경우는 대개 운영자의 관리 실수입니다. 그래도 경고가 떴을 때 사용자가 임의로 판단하기는 어려우므로, 중요한 입력은 멈추고 공식 경로로 다시 확인하는 것이 좋습니다.
이 서비스에서 HTTPS가 하는 역할
이 서비스에서 HTTPS는 두 가지 면에서 전제 조건입니다. 첫째, 브라우저의 암호 기능인 Web Crypto는 HTTPS 같은 보안 컨텍스트에서만 동작합니다. 둘째, 번역기 화면의 자바스크립트가 전송 중에 바뀌지 않고 그대로 도착해야 합니다. 암호화 코드가 중간에 바꿔치기당하면 아무리 좋은 알고리즘도 소용이 없기 때문입니다.
한편 이 서비스는 HTTPS에만 기대지 않습니다. 글의 암호화는 브라우저 안에서 먼저 이루어지고, 해독 키는 주소의 # 뒤에 있어서 서버로 전송되지 않습니다. 즉 연결 구간은 HTTPS가, 내용은 별도의 종단 암호화가 이중으로 지킵니다. 그럼에도 기기 감염이나 주소 유출 같은 위협은 남아 있으며, 이는 이 서비스가 막아 주는 것과 막아 주지 못하는 것에 솔직하게 적어 두었습니다.
정리
자물쇠 아이콘은 이 연결이 암호화되어 있고, 지금 연결한 곳이 주소창의 도메인이 맞다는 뜻입니다. 이 사이트가 안전하다거나 운영자가 믿을 만하다는 뜻은 아닙니다. HTTPS는 꼭 필요한 기본이지만 충분한 조건은 아니므로, 주소 확인과 기기 관리, 그리고 필요하다면 내용 자체를 암호화하는 습관을 함께 가져가시기 바랍니다. 직접 써 보시려면 번역기 열기로 들어가시면 됩니다. 마지막으로, 공용 기기에서 로그인했다면 사용을 마친 뒤 반드시 로그아웃하는 것도 잊지 마시기 바랍니다.
잘못된 내용이나 보완할 점을 발견하셨다면 소개·문의의 이메일로 알려 주세요. 확인 후 글을 고치고 수정일을 갱신합니다.