
무슨 일이 있었나요?
무료 SSL/TLS 인증서의 대명사인 Let's Encrypt가 도메인 소유 확인에 쓰는 '원격 관점(remote perspective)'을 두 곳 더 늘린다고 공지했어요. 짧은 공지지만 서버를 운영하는 분들께는 은근히 중요한 소식이에요. 보안 정책 때문에 해외 접속을 막아두는 경우가 많은 국내 환경이라면 더더욱요.
도메인 검증은 어떻게 동작하나요?
인증서를 받으려면 '이 도메인이 정말 내 것'이라는 걸 증명해야 해요. Let's Encrypt는 ACME라는 프로토콜로 이 과정을 자동화하는데, 대표적인 방법은 두 가지예요.
- HTTP-01: 인증 기관이
http://내도메인/.well-known/acme-challenge/토큰주소에 접속해서, 내가 미리 올려둔 값이 맞는지 확인해요. - DNS-01: 내 도메인 DNS에
_acme-challengeTXT 레코드를 넣어두면, 인증 기관이 그 값을 조회해서 확인해요.
'원격 관점'은 왜 필요할까
문제는 인터넷 경로가 생각보다 쉽게 속는다는 거예요. 공격자가 BGP 하이재킹으로 인증 기관에서 내 서버로 가는 길만 잠깐 가로챘다고 해볼게요. BGP 하이재킹은 인터넷 라우터들에 거짓 경로 정보를 퍼뜨려서 트래픽을 빼돌리는 공격이에요. 그러면 인증 기관은 실제로는 공격자 서버에 접속해 놓고 '도메인 주인 맞네' 하며 인증서를 내줄 수 있어요. 남의 일 같지만, 2022년 국내 디파이 서비스 클레이스왑(KLAYswap) 공격에서도 공격자가 BGP 하이재킹으로 경로를 가로챈 사이에 정상 인증서까지 발급받아 악성 스크립트를 뿌린 것으로 분석됐어요.
해결책은 의외로 단순해요. 한 곳에서만 확인하지 말고 세계 여러 곳에서 동시에 확인하는 거예요. 한 지역의 경로는 속일 수 있어도, 서로 멀리 떨어진 여러 지점의 경로를 한꺼번에 속이기는 훨씬 어렵거든요. 중요한 계약서에 증인을 여러 명 세우는 것과 비슷하죠. 이걸 MPIC(Multi-Perspective Issuance Corroboration, 다중 관점 발급 확증)라고 불러요.
Let's Encrypt는 2020년부터 여러 지점에서 검증을 해왔어요. 이후 인증서 업계의 규칙을 정하는 CA/B 포럼이 MPIC를 모든 공인 인증 기관의 의무로 만들었고요. 이 규칙에 따르면 원격 관점의 최소 개수를 단계적으로 늘려야 하고, 검증 지점들은 서로 다른 지역에 흩어져 있어야 해요. 모든 지점이 다 성공해야 하는 건 아니에요. 정해진 수 이상의 지점이 같은 결과를 확인하면 통과하는 '정족수' 방식이에요. 이번 추가도 이런 흐름 속에서 검증망을 더 촘촘하게 만드는 조치예요.
내 서버에 영향이 있을까?
대부분은 아무것도 안 해도 돼요. 다만 아래에 해당한다면 꼭 점검해 보세요.
1. 해외 IP를 차단하고 있다면: 국내 서비스는 공격 트래픽을 줄이려고 방화벽이나 WAF에서 해외 IP를 통째로 막는 경우가 많아요. 그런데 검증 요청은 해외 여러 지점에서 들어와요. 검증 지점이 늘수록 일부 지점이 막혀서 정족수를 못 채울 위험도 커지죠. 갱신이 갑자기 실패했는데 에러에 'secondary validation' 같은 문구가 보인다면, 원격 관점 쪽에서 실패했을 가능성을 의심해 보세요.
2. IP 허용 목록으로만 열어뒀다면: Let's Encrypt는 검증에 쓰는 IP 목록을 공개하지 않고, 언제든 바뀔 수 있다고 안내해요. IP 기반 허용 목록은 이번 같은 변경이 있을 때 깨지기 쉬워요.
3. 지역별로 다른 DNS 응답을 주고 있다면: GeoDNS로 지역마다 다른 서버를 가리키게 해뒀는데 일부 서버에만 챌린지 파일이 없다면 검증이 실패할 수 있어요.
가장 깔끔한 해결책은 DNS-01로 전환하는 거예요. 내 서버에 접속할 필요 없이 DNS만 조회하니까 방화벽 정책과 상관이 없고, 와일드카드 인증서도 받을 수 있어요. 예를 들어 Cloudflare DNS를 쓴다면 certbot certonly --dns-cloudflare --dns-cloudflare-credentials ~/.secrets/cloudflare.ini -d example.com -d '*.example.com' 한 줄이면 돼요. DNS 업체가 API를 지원한다면 acme.sh의 DNS API 기능 등으로 갱신까지 자동화할 수 있어요. HTTP-01을 계속 써야 한다면, 최소한 /.well-known/acme-challenge/ 경로만큼은 지역 차단에서 예외로 두는 방법도 있어요.
업계 맥락: 자동 갱신이 생명줄
인증서 유효기간도 계속 짧아지고 있어요. CA/B 포럼 결정에 따라 공인 인증서의 최대 유효기간이 단계적으로 줄어서 2029년에는 47일이 돼요. 갱신이 잦아질수록 검증 실패 한 번이 장애로 이어질 확률도 높아지죠. 게다가 Let's Encrypt는 2025년에 만료 안내 이메일 발송을 중단했어요. 갱신 실패를 알려줄 모니터링은 이제 직접 챙겨야 해요.
마무리
한 줄 정리: 검증 지점이 늘수록 인증서는 더 안전해지지만, 해외 접속을 막아둔 서버는 갱신 실패 위험도 커져요. DNS-01 전환과 갱신 모니터링을 지금 점검해 보세요.
여러분 서비스는 인증서 갱신을 어떻게 관리하고 계신가요? 해외 IP 차단과 자동 갱신을 함께 운영하면서 겪은 시행착오가 있다면 공유해 주세요.
🔗 출처: Hacker News