168. CAA (Certification Authority Authorization)

⚠️ 이 문서는 해커가 허술한 인증기관(CA)을 뚫고 내 도메인 이름으로 몰래 가짜 인증서를 발급받는 사태를 막기 위해, 도메인 주인이 직접 DNS 서버에 "내 인증서는 오직 DigiCert에서만 발급할 수 있음!"이라고 대못을 박아두어 타 기관의 불법 발급을 강제로 튕겨내는 최전선 방벽, CAA 레코드를 다룹니다.

핵심 인사이트 (3줄 요약)

  1. 본질: CAA(인증기관 권한 부여)는 도메인 관리자가 자신의 DNS(도메인 네임 시스템) 서버에 특정 TXT 레코드를 추가하여, 자기 도메인(예: google.com)의 SSL/TLS 인증서를 발급할 자격이 있는 허락된 CA(인증기관)의 이름만을 화이트리스트로 등재해 두는 보안 표준이다.
  2. 가치: 세상에는 수백 개의 CA가 있다. 보안이 허술한 시골 구석의 1개 CA만 해킹해도 해커는 내 도메인의 가짜 인증서를 빼낼 수 있다. CAA를 설정하면, 해커가 시골 CA에 발급을 요청해도 해당 CA가 "앗, 이 도메인 DNS를 보니 나는 발급 권한이 없네!" 라며 발급을 스스로 중단(Drop)하게 강제한다.
  3. 융합: 과거엔 권고 사항이었으나, 2017년 C/A Browser Forum 규정에 의해 전 세계의 모든 합법적인 CA는 인증서를 발급하기 직전에 무조건 해당 도메인의 DNS에 접속해 CAA 레코드를 조회(Check)하는 절차가 강제 융합되었다.

Ⅰ. 개요 및 왜 '지정'이 필요한가? (Context & Necessity)

당신은 네이버 보안팀장이다. 평소에 철저하게 최고급 글로벌 보안 업체인 **DigiCert(디지서트)**와만 계약을 맺고 안전하게 인증서를 발급받아 쓰고 있다.

어느 날 러시아 해커가 취약점이 많은 이름 모를 제3세계의 작은 CA(인증기관)를 속여서 naver.com의 가짜 인증서를 발급받았다. 내 브라우저 뱃속(Root Store)에는 그 작은 CA도 '합법적인 CA'로 등록되어 있으므로 브라우저는 의심 없이 파란 자물쇠를 띄우고 해커의 피싱 사이트로 국민들을 접속시켜 버린다. (이것이 바로 CA 생태계의 '가장 약한 고리가 전체를 무너뜨리는' 문제다).

네이버 팀장은 억울하다. "나는 평생 DigiCert하고만 거래했는데, 왜 내가 한 번도 본 적 없는 듣보잡 CA가 내 이름으로 인증서를 발급하게 내버려 둔 거야?" 이 억울함을 달래주기 위해 IETF가 고안한 해결책이 바로 **CAA (RFC 6844)**다. "그렇다면 네이버야, 너의 DNS 서버에 **'내 인증서는 오직 DigiCert만 발급할 수 있다'**고 명패를 달아놔. 그럼 앞으로 전 세계 모든 CA는 인증서 뽑아주기 전에 무조건 네 DNS 명패부터 확인하고 발급을 멈출 거야!"

📢 섹션 요약 비유: 대기업 회장님이 은행 거래를 할 때, 전국의 모든 은행에서 대출이 막 뚫리면 불안합니다. 그래서 은행 연합회에 "우리 회사 대출은 오직 '국민은행 본점'에서만 승인할 수 있음! 다른 은행에서 우리 회사 직인 들고 오면 무조건 거절해라!"라고 화이트리스트(CAA) 각서를 돌려버린 것입니다. 해커가 지방의 작은 은행을 속여 대출(가짜 인증서)을 받으려는 꼼수가 원천 차단됩니다.


Ⅱ. CAA의 작동 원리와 DNS 레코드 세팅

CAA는 암호화 수학이 아니다. 철저히 도메인 DNS 인프라를 활용한 정책(Policy) 통제 기술이다.

1. 도메인 주인의 세팅 (DNS 설정)

회사 서버 관리자는 AWS Route53이나 클라우드플레어 같은 DNS 관리 창에 들어가서, A 레코드, MX 레코드 넣듯이 CAA 레코드를 딱 1줄 추가한다.

  • 설정 예시: google.com. IN CAA 0 issue "pki.goog"
  • 해석: "내 도메인(google.com)의 인증서 발급(issue) 권한은 오직 pki.goog(구글의 자체 CA)에게만 허락한다!"

2. 해커의 공격과 CA의 사전 검열 (발급 차단)

  • 해커 다스(Darth)가 보안이 허술한 'A 인증기관'을 해킹해 google.com 인증서 발급을 요청(CSR)한다.
  • 2017년부터 바뀐 법에 따라, 'A 인증기관'은 도장을 찍기 직전에 무조건 구글의 DNS 서버로 달려가 CAA 레코드를 조회해야 한다.
  • CA 봇(Bot)이 DNS를 읽는다. "어? 구글 CAA 레코드에 발급 허락된 곳이 pki.goog 하나뿐이네? 나는 A 인증기관인데? 내 권한 밖이군."
  • 방어 성공: 'A 인증기관'은 해커의 요청을 에러 메시지와 함께 즉각 반려(Drop)하고 서명을 멈춘다. 해킹이 1단계에서 차단되었다!
┌────────────────────────────────────────────────────────────────────────────────┐
│           CAA 레코드가 해커의 꼼수(Rogue CA)를 튕겨내는 파이프라인 시각화      │
├────────────────────────────────────────────────────────────────────────────────┤
│                                                                                │
│  [ 🛡️ 사전 방어막 세팅 ]                                                       │
│   네이버 DNS 서버: "내 인증서는 오직 digicert.com 만 발급 가능함! (CAA)"       │
│                                                                                │
│  [ ☠️ 해커의 꼼수 시도 ]                                                       │
│   해커가 보안이 구린 시골 CA(Let's 암호)를 해킹하여 가짜 발급 시도.            │
│            │                                                                   │
│            ▼                                                                   │
│  [ 🏛️ 시골 CA (Let's 암호) 서버 내부 ]                                         │
│   "오, 요청 들어왔네. 도장 찍어줄게. 아 참! 찍기 전에 법대로 DNS 조회부터..."  │
│   (DNS CAA 레코드 조회 🔍) -> "허락된 기관: digicert.com"                      │
│                                                                                │
│   "헉! 나는 디지서트가 아니잖아? 이 발급 요청은 사기다! 즉시 발급 중단!"       │
│            │                                                                   │
│            ▼                                                                   │
│  [ 🚨 해커의 모니터 ] "Error: CAA 레코드 정책 위반으로 발급 거절됨."           │
└────────────────────────────────────────────────────────────────────────────────┘

[다이어그램 해설] CAA의 가장 위대한 점은 '사전 방어(Prevention)'라는 것이다. 앞서 배운 CT(인증서 투명성, 165번)는 이미 발급되어버린 가짜 인증서를 전광판에 띄워서 나중에 때려잡는 '사후 탐지(Detection)' 기술이다. 반면 CAA는 해커가 가짜 인증서 도장을 아예 종이에 묻히지도 못하게 '발급 과정 0.1초 전'에 멱살을 잡고 차단해 버리는, 서로 완벽하게 호환되는 앞뒷문 방어막이다.

  • 📢 섹션 요약 비유: CT가 "위조 수표가 은행을 빠져나간 뒤 전광판에 띄워 수배하는 추격전"이라면, CAA는 아예 수표 조폐공사 문 앞에 가드를 세우고 "디지서트라는 명찰(화이트리스트)을 안 단 놈은 수표 찍는 인쇄기 버튼 자체를 못 누르게 막아버리는" 사전 출입 통제입니다.

Ⅲ. 실무 확장 기능: 와일드카드와 해킹 통보 (iodef)

CAA 레코드는 단순히 발급자 이름표만 거는 게 아니라, 아주 정교한 정책 튜닝이 가능하다.

  1. 와일드카드 발급 차단 (issuewild)
    • 해커가 *.naver.com 같은 거대한 프리패스(와일드카드) 인증서를 발급받으면 사태가 심각해진다.
    • 관리자는 DNS에 CAA 0 issuewild ";" 라고 등록할 수 있다.
    • 효과: "우리 회사는 서브 도메인 뭉텅이로 뚫어주는 와일드카드 인증서는 우주 어느 CA에서도 절대 발급 안 받는다!"고 쐐기를 박는 것이다. 해커의 꼼수가 봉쇄된다.
  2. 해킹 시도 실시간 통보 (iodef)
    • DNS에 CAA 0 iodef "mailto:security@naver.com" 이라고 추가해 둔다.
    • 아까 해커가 시골 CA에 찔러봤다가 발급이 거절(Drop)되었을 때, 그 시골 CA는 그냥 거절만 하는 게 아니라 이메일을 즉시 쏜다.
    • "네이버 보안팀장님! 방금 러시아 IP에서 당신네 인증서 가짜로 빼가려다가 우리 CAA 규칙에 막혀서 튕겨 냈습니다! 알고 계세요!" (실시간 위협 인텔리전스 확보)

Ⅳ. 결론

"1줄의 DNS 텍스트가 100개의 취약한 CA들을 내 앞마당에서 지워버리다." 과거 인터넷은 100개가 넘는 글로벌 Root CA 중 단 한 곳만 부패해도 생태계 전체가 썩어 들어가는 연좌제의 늪이었다. CAA(Certification Authority Authorization)는 이 불합리한 연좌제를 끊고, 도메인 소유자에게 "내가 믿을 수 있는 보안 업체 한 곳만 선택할 자유(통제권)"를 돌려준 권력의 이동이다. 서버 엔지니어가 설정 탭에 적어 넣는 짧은 CAA digicert.com 한 줄은, 수만 킬로미터 밖의 부패한 CA가 당신의 도메인을 노리지 못하게 눈을 뽑아버리는 가장 싸고 완벽한 방패다.


📌 관련 개념 맵

  • 전체 분류: PKI 발급 통제 보안 정책 (DNS 레코드 확장)
  • 인프라 짝꿍: DNS (Domain Name System), DNSSEC (DNS가 위조되면 CAA도 뚫리므로 DNSSEC과 함께 써야 100% 완벽해짐)
  • 보완하는 방어망: CT (Certificate Transparency - 사후 탐지), CAA (사전 차단)
  • 표준 규격: RFC 6844, CAB 포럼(CA/Browser Forum) 2017년 의무 체크 규정

👶 어린이를 위한 3줄 비유 설명

  1. 세상에 도장(인증서)을 파주는 열쇠 가게(CA)가 100군데나 있는데, 나쁜 도둑이 내가 안 가는 허름한 뒷골목 가게에 가서 내 이름으로 몰래 도장을 파달라고 속일까 봐 무서웠어요.
  2. 그래서 우리 집 대문(DNS)에 아주 큰 방을 써 붙였어요. "우리 집 도장은 오직 강남 한가운데 있는 '디지서트' 가게 아저씨만 파줄 수 있음! 딴 가게는 절대 내 도장 파주지 마라!"
  3. 이제 도둑이 허름한 가게에 가서 내 도장을 파달라고 해도, 가게 주인이 대문의 방을 먼저 쓱 읽어보고 "어? 나는 디지서트가 아닌데? 안 파줘!" 하고 도둑을 쫓아내는 완벽한 방어막이랍니다!