在与我的服务器上生成的签名相当大比例的DKIM故障的长期战斗中,我注意到了一个有趣的发生。 今天我有这个DKIM失败报告:
User-Agent: OpenDKIM-Filter/2.10.3 Version: 0.1 ... Delivery-Result: other Feedback-Type: auth-failure Auth-Failure: signature (signature verification failed) DKIM-Failure: signature ... DKIM-Canonicalized-Header: (base64 string) DKIM-Canonicalized-Body: (another base64 string)
我注意到DKIM-Canonicalized-Header包含了这个:
cc: Alice A <[email protected]>, Bob BB <[email protected]>, "'Charlie C'" <[email protected]>
并且实际的报头cc被报告为:
cc: Alice A <[email protected]>, Bob BB <[email protected]>, "'Charlie C'" <[email protected]>
幸运的是,我已经能够准确地发现导致失败的原因。 我的签名服务器保留了临时文件/tmp/dkim.*,它说相同的头文件被标准化了一点:
cc: Alice A <[email protected]>, Bob BB <[email protected]>, 'Charlie C' <[email protected]>
现在有趣的部分。 我的签名服务器运行一个非常类似的构build(opendkim-2.10.3-1.el6.x86_64.rpm)到validation的远程服务器,我一直无法使它重复这种错误的行为,这是导致规范化"'something'" 。 那么远程服务器如何到达这样的标准化呢? 真正的标题(我没有存档在我的服务器上)怎么可能是这样的一个string,它在某种程度上被解码并规范化为远程服务器上的'something'在我的服务器上'something' ? 或者也许一些额外的软件往往会改变这些报价在MTA处理? 受过良好教育的猜测是受欢迎的。
DKIM规范中有两个规范化algorithm。 “简单”algorithm根本不会改变头部,除了将头部字段名称转换为小写字母之外,“轻松”只影响空白。
正因为如此,我觉得OpenDKIM不太可能有什么关系。
我研究了RFC 5322 。 尽pipe'Charlie C' <[email protected]>似乎被允许,但它被标记为已过时(在ABNF: address-list – > address – > mailbox – > name-addr – > display-name – > phrase ) > obs-phrase )。 这可能是某些东西把它变成了quoted-string 。 您应该尝试使用双引号( "Charlie C" <[email protected]> )。