25년 가까이, “내 브라우저가 이 인증서를 신뢰하는가?”라는 질문의 답은 지루했다. 운영체제가 신뢰하는 걸 신뢰한다. 윈도우의 크롬은 윈도우 인증서 저장소에 물었다. 맥의 크롬은 키체인에 물었다. 브라우저는 세입자였고, 어느 인증기관이 웹을 보증할 자격이 있는지 정하는 집주인은 OS였으며, 크롬은 그저 그 집에 얹혀살았다. 이게 너무 당연해서 대부분은 이걸 하나의 ‘결정’이라고 생각조차 하지 않았다. 그냥 신뢰란 원래 그렇게 작동하는 것이었다.
그러다 2022년 9월, 크롬은 묻기를 멈췄다.
크롬 105는 Chrome Root Store라는 것을 실었다. 크롬이 실행되는 기계와 무관하게, 크롬이 스스로 지니고 스스로 갱신하는 신뢰 인증기관 목록이다. 플랫폼별로 순차 배포됐다 — 윈도우와 맥이 먼저, 크롬 114에서 리눅스·안드로이드·크롬OS까지. 릴리스 노트를 안 읽었다면 알아챌 방법도 없었다. 어제 열리던 사이트는 오늘도 열렸다. 이 변화의 요점은 눈에 보이는 일이 아무것도 일어나지 않는다는 것, 바로 그것이었다.
실제로 이 변화가 한 일은 결정권 하나를 옮긴 것이었고, 그게 무슨 뜻인지 대부분이 알아보는 데는 2년이 더 걸렸다.
옮겨진 일자리
옛 방식은 편할 뿐 아니라 눈에 안 보이는 통치였다. 크롬이 OS 루트 저장소를 신뢰할 때, 웹 전체에 인증서를 발급할 수 있는 CA를 실질적으로 정하던 사람들은 마이크로소프트와 애플의 루트 프로그램 팀이었다. 그들의 목록은 서로 완전히 같지도 않았고, 브라우저가 그 차이를 대충 덮었으며, 큰 CA들이 하나같이 모든 저장소에 동시에 들어가고 싶어 했기에 이 체계는 그럭저럭 굴러갔다.
Chrome Root Program은 그 펜을 쥔 사람을 바꾼다. 크롬은 이제 자기 팀이 자기 정책 문서에 비추어 정한 자기 루트 목록을 싣고, 다른 컴포넌트 업데이트가 도착하는 방식 그대로 — OS 벤더가 아니라 구글의 주기에 맞춰, 대역 밖으로 — 브라우저에 배포한다. 포함되려면 OS 저장소가 과거엔 그만큼 엄격히 강제하지 않던 요건을 지켜야 한다. 인증서는 Certificate Transparency 로그에 나타나야 하고, CA는 모든 걸 서명하는 루트 하나가 아니라 TLS 전용 계층을 따로 운영해야 하며, 사고를 잘못 처리한 CA는 문밖으로 내보낼 수 있다. 이 모든 것의 공용 원장은 CCADB지만, 신뢰 결정 — 브라우저를 자물쇠로 이끌지 경고로 이끌지 실제로 가르는 그 부분 — 은 이제 오롯이 크롬의 몫이다.
오랫동안 이건 이론이었다. 그러다 아니게 됐다.
그 대가로 산 것: 엔트러스트
엔트러스트는 이 글을 읽는 대부분의 회사보다 오래된 인증기관이다. 사실상 처음부터 OS 신뢰 저장소에 들어 있었다. 그런데 2024년 6월, 크롬 보안팀은 크롬이 엔트러스트 신뢰를 중단하겠다고 발표했다.
방식은 이런 일이 늘 그렇듯 구체적이었다. 크롬은 엔트러스트 루트로 이어지는 TLS 인증서 중 가장 이른 Signed Certificate Timestamp가 2024년 11월 11일 이후인 것들을 불신하기로 했다 — 그 선 이후 발급된 인증서는 신뢰를 못 받고, 이미 현장에 나간 것들은 만료 때까지 계속 동작한다는 뜻이다. 크롬 131에 실렸다. 11월 초부터 사용자들은 새로 발급된 엔트러스트 인증서에 대해 전체 화면 경고를 보기 시작했다. 발표된 이유는 극적인 단일 침해가 아니었다. 크롬의 표현으로는 약 6년에 걸친 “규정 준수 실패의 패턴”이었고, “공개 신뢰 CA 소유자로서의 역량·신뢰성·성실성”에 대한 팀의 신뢰가 침식될 만큼 쌓였다는 것이다. 수십 년간 자기 루트 저장소를 운영해 온 모질라는 11월 30일에 비슷한 선을 그었다. 애플은 11월 15일에 그었다.
여기서 핵심을 만드는 디테일이 있다. 윈도우는 엔트러스트의 루트를 인증서 저장소에서 제거하지 않았다. 맥도 마찬가지였다. 크롬이 보안 경고를 띄운 바로 그 기계에서, 그 아래의 운영체제는 여전히 그 엔트러스트 인증서를 완벽하게 믿을 만한 것으로 여겼다 — 그리고 시스템 신뢰 저장소를 쓰는 앱이라면, 스크립트 언어의 HTTP 클라이언트든 다른 브라우저든, 아무 불만 없이 접속했다. 인증서는 폐기된 게 아니었다. 만료된 것도 아니었다. 딱 한 가지 이유로 실패했다: 당신이 연 그 특정 프로그램이 자기만의 의견을 가졌고, 그 의견이 더 이상 컴퓨터의 의견과 일치하지 않았다.
그 상태 — 살아 있고 만료도 안 된 인증서를 두고, OS는 신뢰하는데 브라우저는 거부하는 상태 — 는 2022년 9월 이전엔 존재할 수 없었다. 브라우저와 OS는 같은 목소리였다. 이제는 아니다.
당신이 한 거래
나는 크롬이 이렇게 한 게 옳았다고 보고, 그리 아슬아슬한 판단도 아니라고 본다. 웹 신뢰를 OS 신뢰에 묶어 두면 CA 규율이 윈도우 업데이트와 맥OS 포인트 릴리스의 속도로 움직인다는 뜻이었고, CA는 불신당하는 일의 엄청난 번거로움에 기대 게으름을 부릴 수 있다는 뜻이었다. 자기 저장소를 싣는 브라우저는 규정 준수 문제에 10년이 아니라 릴리스 한 주기 안에 대응할 수 있고, 다섯 개의 서로 다른 기준을 물려받는 대신 모든 플랫폼에 일관된 잣대를 들 수 있다. 최근 몇 년간 CA 생태계에 일어난 가장 좋은 일인 Certificate Transparency가 강제 가능한 것도, 브라우저가 그것을 신뢰의 조건으로 요구하고 그 말을 지킬 수 있기 때문이다.
하지만 무엇을 내주었는지는 이름 붙여 둘 가치가 있다. “눈에 보이는 일은 아무것도 없었다”는 말이 그 크기를 가리기 때문이다. 신뢰는 예전엔 단수였다 — 기계 위의 모든 것이 떠받드는, 대체로 하나뿐인 목록. 이제는 복수이고 프로그램마다 다르다. 크롬은 자기 저장소를, 모질라는 늘 그래 왔듯 자기 것을, 애플은 자기 것을, 마이크로소프트는 자기 것을 갖고 있고, 이들은 더 이상 서로 합의할 필요가 없다. “사파리에선 되는데 크롬에선 깨진다”는 이제 반드시 렌더링 버그나 캐시 문제인 게 아니다 — 인증기관을 애초에 신뢰해야 하는가에 대한 명백한 견해차일 수 있고, 두 브라우저 다 각자의 규칙에 따라 옳다.
그리고 그 지렛대는 이제 한곳에 몰려 있다. 구글은 자기 시간표와 자기 판단으로, 크롬 위에서 돌아가는 웹의 약 3분의 2에 대해 어떤 인증기관이 끝났다고 혼자 결정할 수 있고, 그 사이에서 속도를 늦추거나 뒤집을 OS 벤더는 이제 없다. 지금까지는 그 판단이 신중했고 이유가 공개적이고 구체적이었는데, 이렇게 몰린 권력을 견딜 만하게 만드는 건 오직 그것뿐이다. 엔트러스트 결정은 보도자료가 아니라 6년치 문서화된 사고 기록과 함께 왔다. 그게 매번 그들에게 들이대야 할 기준이다. 2024년에 엉망으로 운영된 CA를 잘라낸 그 메커니즘이 곧 잘 운영되는 CA를 신뢰하는 바로 그 메커니즘이고, 그것은 구글 외에 누구에게도 답하지 않기 때문이다. 예전엔 OS가 그것을 견제했다 — 대체로 우연히. 이제는 아니고, 다시 돌아오지도 않는다.