DKIM 记录检查器
DomainKeys Identified Mail - DKIM签名验证、记录格式说明与配置检查项
🔐 DKIM 记录验证
📖 DKIM 记录字段详解
| 标签(tag) | 全称 | 必填 | 说明 |
|---|---|---|---|
v= | Version | 是 | 版本号,必须为 "DKIM1" |
k= | Key Type | 否(默认rsa) | 密钥类型: rsa(默认) / ed25519 |
p= | Public Key Data | 是 | Base64编码的公钥数据 |
s= | Service Type | 否 | 服务类型: email(*) / * |
g= | Granularity | 否 | 粒度,限制可使用的用户名模式 |
h= | Hash Algorithms | 否 | 哈希算法: sha256 / sha1 (默认全部) |
n= | Notes | 否 | 备注/注释文本 |
t= | Flags | 否 | 标志位: y=测试模式 / s=严格域名匹配 |
a= | Algorithm | 否 | 算法标识: rsa-sha256 / ed25519-sha256 |
⚙️ DKIM 工作原理
1️⃣ 发送方签名
邮件服务器用私钥对邮件头+正文进行签名
生成DKIM-Signature头插入邮件
2️⃣ DNS查询公钥
接收方从DNS查询:selector._domainkey.domain.com
获取公钥记录
3️⃣ 验证签名
接收方使用公钥验证签名
确认邮件未被篡改且来自声称的域
4️⃣ 结果处理
pass/fail/none/policy/temperror/permerror
结合SPF和DMARC做最终判断
DNS查询格式:
选择器._domainkey.域名 → TXT记录
示例:
google._domainkey.google.com → TXT → v=DKIM1; k=rsa; p=MIGfMA0GCSq...
DKIM-Signature头示例:
DKIM-Signature: v=1; a=rsa-sha256; d=example.com; s=google;
c=relaxed/simple; h=subject:from:date;
b=abc123def456...;
选择器._domainkey.域名 → TXT记录
示例:
google._domainkey.google.com → TXT → v=DKIM1; k=rsa; p=MIGfMA0GCSq...
DKIM-Signature头示例:
DKIM-Signature: v=1; a=rsa-sha256; d=example.com; s=google;
c=relaxed/simple; h=subject:from:date;
b=abc123def456...;
📊 DKIM 验证结果含义
| 结果 | 含义 | 处理建议 |
|---|---|---|
| pass | 签名验证通过,邮件未被篡改 | 正常投递 |
| fail | 签名验证失败,邮件可能被篡改或伪造 | 标记为垃圾邮件或拒绝 |
| none | 无DKIM签名 | 不通过DKIM验证(但不一定拒绝) |
| policy | 策略性失败(如测试模式) | 根据策略决定 |
| neutral | 中性结果(如算法不支持) | 不作为失败依据 |
| temperror | 临时错误(DNS超时等) | 稍后重试 |
| permerror | 永久错误(格式错误/公钥无效) | 拒绝并通知发件人 |
❓ 常见DKIM配置问题
| 问题 | 原因 | 解决方案 |
|---|---|---|
| 公钥被换行截断 | DNS TXT记录长度限制(255字节/段) | 将长公钥拆分为多段,每段用空格连接 |
| permerror: no key | DNS中找不到DKIM公钥记录 | 检查选择器名称和域名是否正确 |
| permerror: bad format | DKIM记录格式不符合规范 | 确保以v=DKIM1开头,包含p=标签 |
| fail: body hash mismatch | 邮件正文在传输中被修改 | 检查中间MTA是否修改了邮件内容 |
| fail: signature expired | 签名时间戳过期 | 检查服务器时间同步(x=参数) |
| key too short (<1024bit) | RSA密钥长度不足 | 升级到2048位RSA或使用Ed25519 |