DKIM 설정 — 서명이 깨지는 3가지 경우
DKIM은 한 번 제대로 넣으면 안정적입니다. 다만 셀렉터·키 길이·전달 경로에서 서명이 깨지면 인증이 조용히 실패합니다. 실무에서 걸리는 지점을 정리합니다.
SPF가 “누가 보낼 자격이 있나”를 본다면, DKIM은 “내용이 중간에 바뀌지 않았나”를 봅니다. 발신 측이 비공개 키로 메일에 서명하고, 받는 측이 DNS에 공개된 키로 검증합니다.
한 번 제대로 설정하면 SPF보다 손이 덜 가지만, 깨질 때는 조용히 깨집니다.
설정 순서
네 단계입니다.
- 키 쌍을 만든다 — 비공개 키와 공개 키가 한 쌍으로 나옵니다. 발송 도구를 쓴다면 대개 관리 화면에서 만들어 주고, DNS에 넣을 값까지 같이 보여 줍니다.
- 공개 키를 DNS에 올린다 — 타입 TXT, 이름은
<셀렉터>._domainkey, 값은v=DKIM1; k=rsa; p=…. - 발송 쪽에서 서명을 켠다 — 셀렉터 이름이 2번에서 올린 것과 같아야 합니다.
- 보낸 메일의 헤더로 검증한다 — 아래 「확인하는 법」.
2번을 3번보다 먼저 하는 편이 안전합니다. 순서가 바뀌면 공개 키가 퍼지기 전에 서명된 메일이 나가고, 그 메일들만 검증에 실패합니다.
DMARC까지 함께 쓴다면 볼 것이 하나 더 있습니다. 서명 도메인(d=)이 보낸사람 주소의 도메인과 맞아야 DMARC의 정렬 조건을 통과합니다. 다만 DKIM 자체는 d=가 달라도 성립하므로, 이건 DKIM 설정이 틀린 것과는 다른 층의 이야기입니다.
셀렉터 — DKIM에만 있는 개념
DKIM 레코드는 도메인 루트가 아니라 셀렉터라는 이름표 아래에 들어갑니다.
<셀렉터>._domainkey.example.com
셀렉터를 쓰는 이유는 한 도메인에 키를 여러 개 둘 수 있게 하기 위해서입니다. 발송 경로마다 다른 키를 쓰거나, 키를 교체할 때 새 셀렉터로 먼저 올려 두고 전환할 수 있습니다.
여기서 자주 나는 사고가 있습니다. 발송 시스템이 서명에 쓰는 셀렉터와 DNS에 올린 셀렉터가 다르면, 받는 서버는 검증할 공개 키를 못 찾고 DKIM은 없는 것과 같아집니다. 오류 메시지가 따로 뜨지 않아서 알아채기 어렵습니다.
서명이 깨지는 3가지 경우
1. 옮겨 붙이는 과정에서 값이 변형된 경우
DKIM 공개 키는 길어서, 생성 도구가 이런 식으로 여러 조각으로 나눠 출력합니다.
"v=DKIM1; k=rsa; p=MIIBIjANBgkq..."
"...하략...IDAQAB"
조각으로 나뉜 것 자체는 문제가 아닙니다. TXT 레코드의 문자열 하나는 255자까지라 2048비트 키는 어차피 여러 문자열로 저장되고, 조회하는 쪽이 이어 붙여 읽습니다. 정상 동작 중인 레코드를 dig로 조회해도 따옴표 두 덩어리로 나옵니다.
깨지는 것은 값을 옮기는 과정입니다.
- 값 칸에 따옴표째 붙여넣어
"가 키의 일부로 들어간 경우 - 조각 사이에 줄바꿈이나 공백이 섞여 들어간 경우
- 편집기가 긴 줄을 자동으로 접으면서 문자가 끊긴 경우
관리 화면이 값을 문자열 하나로만 받는다면, 따옴표와 줄바꿈을 걷어내고 키 문자열만 이어서 넣습니다. p= 뒤에는 영문·숫자와 + / =만 있으므로, 다른 문자가 보이면 그 자리가 문제입니다.
2. 키 길이가 짧은 경우
예전에 만든 설정에는 1024비트 키가 남아 있는 경우가 있습니다. 검증 자체는 되지만 신뢰 측면에서 약합니다. 지금 새로 만든다면 2048비트가 기본입니다.
값이 길어서 관리 화면이 받아 주지 않는 경우가 있는데, 그때 1024비트로 낮추는 대신 여러 문자열을 받는 입력 방식이 있는지 먼저 봅니다.
3. 전달(forwarding) 경로를 거친 경우
메일이 중간에서 전달되면서 본문이나 헤더가 손대어지면 서명이 깨집니다. 메일링 리스트가 제목에 말머리를 붙이거나 본문 끝에 안내를 덧붙이는 경우가 대표적입니다.
이건 발신자가 통제할 수 없는 영역이라, DMARC를 SPF와 DKIM 둘 다 걸어 두는 것이 대비책이 됩니다. 둘 중 하나만 통과해도 DMARC는 통과로 처리하기 때문입니다.
확인하는 법
셀렉터를 알면 바로 조회할 수 있습니다.
dig +short TXT <셀렉터>._domainkey.example.com
p=로 시작하는 키 값이 나오면 정상입니다. 아무것도 안 나오면 셀렉터가 틀렸거나 레코드가 아직 안 올라간 것입니다.
실제로 서명이 붙어 나가는지는 보낸 메일의 원본 헤더에서 확인합니다. 볼 것은 두 줄입니다.
DKIM-Signature—s=가 DNS에 올린 셀렉터와 같은지,d=가 보낸사람 주소의 도메인과 같은지Authentication-Results—dkim=pass가 찍혀 있는지
dkim=pass인데 DMARC는 실패로 나온다면, d=가 내 도메인이 아니라 발송 도구의 도메인인 경우가 대부분입니다. 서명은 성립하지만 보낸사람 도메인과 맞지 않아 정렬 조건에서 걸립니다.
발신 자격을 다루는 SPF 레코드 설정, 실패 시 처리를 정하는 DMARC 정책과 함께 보시면 전체 그림이 맞춰집니다. 개요는 SPF·DKIM·DMARC 정리에 있습니다.
발송 도메인 인증, 무료로 점검해 드립니다
도메인만 알려주시면 SPF·DKIM·DMARC·역방향 DNS 설정을 조회해서, 무엇이 빠졌고 무엇이 위험한지 정리해 보내드립니다. 비용도 조건도 없습니다.
카카오톡 상담방에 도메인을 남겨 주세요.
전용 IP로 대량 발송할 인프라가 필요하시면 전용 IP 대량 발송 안내에서 구성과 가격을 확인하실 수 있습니다.