dig TXT selector._domainkey.example.com +short openssl rsa -in dkim.key -pubout # 公钥和 DNS 记录要逐字一致
Gmail 里点显示原始邮件,认证结果写着 dkim=fail body hash did not verify。这类现象通常不是突然出现的,往前翻半天日志能看到苗头。
追下去是这么回事:签名值是在编码之前算好的,中途有环节重写了正文,或者签名域与实际发件域不一致,哈希自然就对不上。
「DKIM 签名校验失败」改完先别急着全量,挑一台机器放半天,真有问题这段时间就能看出来。监控和日志的时间要对上,时区不一致会多绕很大一圈。
临时改动用注释写上日期和原因,过两周自己都记不清为什么这么写。动手前把原文件复制一份带时间戳,出问题立刻换回去,比现场分析快得多。
一次只改一处,改完立刻验证,几个改动叠在一起,出问题就说不清是谁导致的。先做最小复现,能稳定跑出来的问题,排查成本会低一个数量级。
处理上按这个顺序:确认签名域和发件域完全一致;关掉会改写正文的插件;重发一封拿原文逐段比对哈希。
确认没问题再收工,原始邮件头里显示 dkim=pass,正文哈希与签名对得上。
