SSL/TLS

DNS CAA레코드는 무엇일까?

  • jroh

jroh.kr 에 let's encrypt 로 SSL인증서를 적용하고 난 후, Qualy's SSL Labs 에서 인증서 적용상태를 체크해 보았습니다. 확인해 보니 Server Key and Certificate #1 Phase 에서 DNS CAA가 없다고 판명되었습니다.

notion image

1. DNS CAA란 뭘까?

DNS CAA는 DNS Certification Authority Authorization(CAA)로 RFC6844에 정의되어 있습니다. CAA 레코드를 만든 목적은 특정 도메인의 CA(Certificate Authority)가 어디인지를 알려주기 위한 목적입니다.

2. Certificate Pinning과 구라 Google 인증서 사건

2011년 DigiNotar라는 곳에서 google 인증서에 대한 가짜 구글인증서 발급 사건이 발생한 적이 있습니다. 구글의 Root CA기관은 GeoTrust Global CA이지만 공격자가 DigiNotar 루트 인증기관을 이용하여 구글의 구라 인증서를 발행한 것입니다. 이란에서 약 2달간 구글접속에 해당 인증서가 사용되었습니다.

notion image

크롬 브라우저는 Certificate Pinning(HPKP) 기술을 통해 google.com의 공개키는 Google CA기관에서만 발행됨이 명시되어 있어서 DigiNotar에서 발행된 구라 인증서를 미리 찾아 경고해 주었습니다.

3. DNS를 이용한 CA Pinning (DNS CAA Record)

도메인 관리자가 자신이 소유한 도메인(jroh.kr)에 대해 인증서를 발행할 권한이 있는 CA기관을 DNS CAA 레코드를 이용하여 지정하는 것입니다.

notion image

예를 들어 jroh.kr의 CAA레코드가 letsencrypt.org이라면 CA기관들은 인증서 발급전 jroh.kr의 CAA레코드를 룩업하여 자신이 인증서를 발행할 권한이 있는지 확인합니다.

4. CAA 레코드 설정하기

CAA <flags> <tag> <value>
  • flag: 0-255. 0=default, 1=critical flag
  • tag: issue, issuewild, iodef
  • value: tag에 대한 속성 값

issue tag

example.com.  CAA 0 issue "comodoca.com"
example.com.  CAA 0 issue "letsencrypt.org"

issuewild tag

jroh.kr.  CAA 0 issue "letsencrypt.org"
jroh.kr.  CAA 0 issuewild "comodoca.com"

iodef tag

jroh.kr.  CAA 0 iodef "mailto:ca@jroh.kr"

5. 지원범위

CAA 레코드 타입은 Bind 9.9.6 이상에서 지원. 2017년 9월부터 모든 CA기관에서 체킹하기로 결의되었습니다.

읽어주셔서 감사합니다~


📎

디피 헬만 키 (Diffie-Hellman Key) 를 2048 bit 로 바꿔야 하는 이유SSL/TLS