2024년 7월 29일, 인터넷에서 가장 큰 인증 기관 중 하나인 DigiCert가 고객 6,807곳의 TLS 인증서 83,267장을 폐기하겠다고 발표했다. 인증서가 위조돼서가 아니다. 키가 유출돼서도 아니다. 밑줄 하나가 빠져서였다.

그게 기술적 결함의 전부다. 한 회사가 인증 기관을 연방 법원에 끌고 가 이 폐기를 막으려 한 대목에 이르기 전에, 이 결함이 얼마나 작은지 잠깐 음미해 둘 가치가 있다.

그 밑줄은 무엇을 위한 것이었나

인증서를 살 때, CA는 당신이 보증을 요청한 그 도메인을 실제로 통제하는지 확인해야 한다. 표준적인 방법 하나가 DNS 챌린지다: CA가 무작위 값을 하나 주고, 당신이 그걸 도메인의 DNS 레코드에 올리면, CA가 조회해 일치하면 통제가 증명된다. DigiCert는 이를 CNAME 레코드로 제공했다 — 그들의 무작위 문자열이 든 레코드를 추가하면 그들이 확인하는 식이다.

여기서 중요했던 디테일. 그 무작위 값은 밑줄로 시작하는 라벨 아래에 올라가야 한다 — 토큰 앞에 _가 붙은 모양으로. 밑줄은 일반 호스트 이름에 쓸 수 없는데, 그게 바로 핵심이다: 밑줄로 시작하는 라벨은 실제로 해석되는 서버 이름이 될 수 없다. 그건 사람들이 실제로 입력하는 이름들과 격리된, 기계가 읽는 레코드 전용의 별도 네임스페이스에 산다. 검증 토큰을 거기에 두면, 다른 이유로 누군가 통제할 수도 있는 정상 호스트 이름과 충돌하거나 혼동될 수 없음이 보장된다.

DigiCert 시스템은 그 밑줄을 자동으로 앞에 붙이게 돼 있었다. 2019년 8월부터, 일부 검증에서 그러지 않았다. 무작위 값이 접두사 없이 나갔다. 거의 5년 동안 아무도 몰랐다. 2024년 7월 초 한 연구자가 DigiCert의 문제 신고 주소로, 밑줄 없는 무작위 값으로 검증된 인증서도 폐기해야 하느냐고 물었다. 몇 주간 문답이 오간 끝에 7월 27일 코드 검토에서 일부 검증 경로가 밑줄을 한 번도 붙이지 않았다는 게 확인됐다.

그 8만 3천 개 도메인 중 이 때문에 실제로 탈취된 게 있었나? 거의 확실히 없다. 고객들은 자기 도메인을 통제하고 있었고, 검증은 올바른 사람에게 닿았으며, 인증서는 올바른 주인에게 갔다. 실무적으로 빠진 밑줄은 무해했다.

그건 조금도 중요하지 않았고, 왜 중요하지 않았는지를 이해하는 것이 이 글의 진짜 주제다.

그 규칙은 일부러 칼같다

공개 인증 기관은 자기 판단으로 움직이지 않는다. CA/Browser Forum의 Baseline Requirements, 즉 브라우저 루트 프로그램이 집행하는 규칙집 아래서 움직인다. 그리고 Baseline Requirements는, CA가 도메인 검증이 제대로 완료되지 않은 채 발급된 인증서를 발견하면 그 인증서를 24시간 안에 폐기해야 한다고 말한다. “불편하지 않다면 24시간 안에”가 아니다. “실제 위험을 평가한 뒤에”가 아니다. 24시간이다.

여기에 사람들이 보이는 첫 반응은 이게 미친 규칙이라는 거다 — 아무도 다치지 않은 겉흠 하나 때문에 살아 있는 인증서 8만 3천 장을 하룻밤에 폐기한다고? 그러나 이 규칙이 칼같은 건 바로 반박이 불가능하도록 하기 위해서다. CA가 “이 특정 오발급은 사실 위험하지 않았으니 천천히 하겠다”고 말하는 순간, 당신은 CA에게 절대 줘선 안 되는 단 하나의 권력을 쥐여 준 거니까: 자기 실수 중 어느 것이 중요한지 스스로 정하는 재량 말이다. 그 재량은 부식성이다. 천천히 죽은 모든 CA는 — 그리고 CA는 놓친 마감과 스스로 허락한 연장으로 천천히 죽는다 — 정확히 그 습관을 쌓다가 죽었다. 24시간 시계가 가차 없는 건, 너그러운 버전은 쓸모가 없기 때문이다.

그래서 CA에겐 빠져나갈 길이 없다. 결함은 검증 결함, 그걸로 끝이고, 시계는 발견되는 순간 돌기 시작한다. DigiCert 엔지니어들은 이걸 이해했다. 문제는 고객들이 그러지 못했다는 것, 그리고 원해도 지킬 수 없었다는 것이다.

규칙이 셈에 넣지 않은 부분

이 사태의 심장에 있는 충돌은 이거다. 24시간 폐기 규칙은 인증서 교체가 빠르다는 걸 — 옛 인증서가 죽기 전에 새 걸 찍어 끼워 넣을 수 있다는 걸 — 조용히 전제한다. 현대적 자동 발급을 돌리는 쪽에겐 그게 사실이다: ACME 클라이언트가 cron으로 인증서를 갱신하고, 강제 폐기는 그냥 좀 이른 갱신, 아무 일도 아니다.

그러나 가장 세게 맞은 조직들은 거의 정의상 그걸 안 하던 쪽이었다. 임베디드 장비에 핀으로 박힌 인증서. 1년에 두 번 사람이 손으로 로드밸런서에 까는 인증서. 어플라이언스 속, 변경 동결된 프로덕션 속, “TLS 인증서 교체”가 API 호출이 아니라 예정된 점검 창인 시스템에 묻힌 인증서. 그들에게 24시간은 마감이 아니었다. 장애 통보였다.

Baseline Requirements와 바로 이 고객들의 반발 사이에 낀 DigiCert는 흔들렸다. 하루 만에, 제때 교체할 수 없는 인증서 일부의 마감을 8월 3일 19:30 UTC로 미뤘다 — 발표 후 하루가 아니라 닷새쯤이다. 그건 호의였고, 동시에 그 자체로 위반이었다: 지연된 폐기도 여전히 규칙 위반이고, DigiCert는 이를 공개 버그 트래커에 두 번째 컴플라이언스 사건으로 올려야 했다. 여기엔 깔끔한 수가 없다. 완전히 따르면 무해한 오타 하나로 고객을 끊어 버리고, 고객에게 여유를 주면 자기가 지키려 존재하는 규칙을 어긴다.

폐기가 법정에 갔을 때

그리고 한 고객이, 인증서 세계를 진짜로 흔든 일을 했다: 소송을 걸었다.

복리후생·결제 SaaS 회사 Alegeus Technologies가 7월 30일 유타 연방지방법원에, DigiCert의 인증서 폐기를 멈추라는 임시금지명령(TRO)을 구하는 소를 냈다. 판사는 이를 받아들였다. 심리가 열릴 때까지 최대 이레 동안, DigiCert는 Alegeus 인증서 폐기가 법적으로 금지됐다 — Baseline Requirements가 24시간 안에 폐기하라고 요구한 바로 그 인증서를.

다시 읽어 보라, 이건 정말로 새로운 종류의 문제니까. 이제 CA는 한쪽엔 폐기하지 말라는 법원 명령을, 다른 쪽엔 반드시 폐기해야 한다는 브라우저 신뢰 생태계 전체를 두게 됐다. Baseline Requirements는 DigiCert와 Alegeus 사이의 계약이 아니다. 그건 브라우저가 DigiCert의 루트를 애초에 신뢰하는 조건이다. 법원은 회사를 부릴 수 있다. 그러나 규칙을 안 지키기 시작한 CA를 Chrome과 Mozilla가 계속 신뢰하도록 명령할 수는 없다 — 그리고 고객 소송이 자기 폐기 의무를 뒤집도록 놔두는 CA는, 자기 약속이 흥정 대상이라고 조용히 광고하는 CA다.

거기까지 가진 않았다. 8월 1일 Alegeus 측 변호인은 양측이 잠정 합의에 이르렀다고 법원에 알렸다 — Alegeus가 인증서를 교체하고, 양측이 함께 금지명령 취소를 신청하는 내용이었다. DigiCert의 사고 보고서에 따르면 83,267장의 마지막 인증서는 8월 3일에 폐기됐다. 시스템은 버텼다. 그러나 설계가 아니라 운과 분투로 버텼고 — 선례는 여전히 거기 놓여 있다. 제때 교체 못 하는 다음 회사는 이제 법원이라는 선택지가 있다는 걸 안다.

밑줄은 각주다

구체적 사항을 걷어 내면 DigiCert 사건이 실제로 보여 준 건 이거다: Web PKI의 집행 모델과 사용자 상당수가 양립 불가능한 전제 위에서 돌아간다. 규칙은 인증서가 일회용이고 교체가 즉각적이라고 전제한다. 거대한 설치 기반은 인증서를 가능한 한 안 건드리는 내구 인프라로 취급한다. 이 둘이 동시에 참인 한, 모든 대량 폐기 사건은 위기이고, 그런 일은 더 생길 것이다 — 방아쇠는 늘 늦게 발견된 어떤 작은 공정 결함이다. 5년 묵은 버그가 발견되는 방식이 원래 그렇기 때문이다.

해법은 애초에 “오타를 그만 내라”가 될 수 없었다. CA는 거대한 자동화 시스템이고, 잠재 결함은 늘 있을 것이며, 생태계는 그걸 잡아내고 공개하는 데 더 능숙해졌다 — 역설적이게도 그건 폐기 사건이 줄기는커녕 늘어난다는 뜻이다. 진짜 해법은, 업계가 어쨌든 조금씩 다가가 온 그 지루한 쪽이다: 폐기가 비상사태가 아니라 어깨 한 번 으쓱일 일이 될 만큼 인증서를 짧게, 발급을 자동화하는 것. 인증서가 이미 며칠마다 스스로 갱신된다면, 강제 폐기는 그저 좀 이른 갱신이고, 아무도 변호사를 부르지 않는다.

빠진 밑줄은 잊힐 것이다. 그것이 드러낸 것 — 칼같은 안전 규칙과 자동화 불가능한 설치 기반은 평화롭게 공존할 수 없다는 것 — 이 기억할 가치가 있는 쪽이다. 2024년의 소동을 경종으로 받아들여 인증서 수명주기를 자동화한 조직은 다음번엔 자면서 넘길 것이다. 그걸 DigiCert의 문제로 치부한 조직은 그걸 다시 겪을 텐데, 아마 생각보다 빨리이고, 그걸 촉발할 오타는 자기가 고칠 수 있는 것도 아닐 것이다.