콘텐츠로 건너뛰기

🔐 CAA 레코드

CAA(Certification Authority Authorization)는 어떤 인증 기관이 SSL/TLS 인증서 발급을 허용받는지 DNS로 선언하는 메커니즘입니다. 오발급 위험 감소에 효과적입니다. issue / issuewild / iodef 세 가지 태그를 표시합니다.

완전 무료 가입 불필요 서버 처리 로그 · DB 없음 레이트 리밋 5 개 언어 다크 모드

⚠️ 요청은 DevLab 서버에서 이루어집니다. 사설 IP 주소와 localhost는 허용되지 않습니다.

📖 이 진단으로 알 수 있는 것

CAA 레코드는 이 도메인의 인증서를 발급해도 되는 인증 기관은 여기뿐이라고 DNS 로 선언하는 것입니다. CA/Browser Forum 의 Baseline Requirements 에 따라 인증 기관은 발급 직전에 반드시 CAA 를 확인할 의무가 있습니다. 이 진단은 그 레코드와 상속원이 되는 상위 도메인의 CAA 를 가져옵니다. 다만 이미 발급된 인증서를 취소하는 효과는 없습니다. 오발급 탐지는 CT 로그의 몫입니다.

판정 항목 무엇을 보는가 걸렸을 때의 대처
CAA 레코드가 없음 없는 것이 오류는 아니지만 의미는 전 세계 어떤 인증 기관이 발급해도 상관없다입니다. 도메인 관리자가 의도하지 않은 CA 에서 인증서가 나와도 구조적으로 막히지 않습니다. 반대로 말하면 CAA 를 한 줄 쓰는 것만으로 발급 가능한 CA 를 좁힐 수 있습니다. 사용하는 CA 의 식별자를 정확히 씁니다. example.com. IN CAA 0 issue "letsencrypt.org" 같은 형태입니다. 식별자를 틀리면 다음 갱신이 조용히 실패하고 인증서가 만료됩니다. 주요한 것은 letsencrypt.org / digicert.com / sectigo.com / pki.goog / amazon.com 이며 반드시 각 CA 공식 문서에서 확인하세요.
issuewild 를 지정하지 않음 issuewild 가 없을 때는 issue 의 내용이 와일드카드 인증서에도 적용됩니다. 즉 issue 를 허용한 CA 는 *.example.com 도 발급할 수 있습니다. 와일드카드 인증서는 한 장만 유출되어도 모든 서브도메인이 위장되므로 필요하지 않다면 명시적으로 금지할 가치가 있습니다. 와일드카드를 쓰지 않는다면 example.com. IN CAA 0 issuewild ";" 라고 씁니다. 세미콜론 하나가 어떤 CA 에도 허가하지 않음을 뜻합니다. 특정 CA 에만 허용하려면 0 issuewild "digicert.com" 처럼 씁니다.
상위 도메인의 CAA 가 적용됨 CAA 는 질의한 이름에 없으면 찾을 때까지 상위로 거슬러 올라갑니다. shop.example.com 에 CAA 가 없으면 example.com 의 것이 적용됩니다. 이 상속 때문에 서브도메인만 다른 CA 를 쓰고 싶은데 발급되지 않는 식으로 막힙니다. 서브도메인에서 다른 CA 를 쓰려면 그 서브도메인 자체에 CAA 를 둡니다(자식에 하나라도 있으면 부모는 보지 않습니다). 인증서 취득이 CAA record prevents issuance 로 실패하면 먼저 이 상속을 의심하세요. DNS 에서 CNAME 을 걸어 둔 경우 CNAME 대상의 이름으로 CAA 가 평가되는 점도 주의가 필요합니다.

CAA 의 내용 자체는 DNS 로 평문 배포되므로 DNS 를 위조할 수 있는 공격자는 CAA 도 위조할 수 있습니다. 실효적인 방어로 만들려면 DNSSEC 과 함께 쓰세요. 또 CAA 는 발행시키지 않는 구조이지 오발급을 알아채는 구조가 아닙니다. 실제로 자기 도메인명으로 발급된 인증서를 감시하려면 Certificate Transparency 로그를 구독하는 것(crt.sh 감시나 Cert Spotter 같은 알림 서비스)이 유일하게 확실한 방법입니다.

🔗 관련 도구