在与服务器上生成的签名中大量 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 B-B <[email protected]>,
"'Charlie C'" <[email protected]>
实际标题cc
报告如下:
cc: Alice A <[email protected]>,
Bob B-B <[email protected]>,
"'Charlie C'"
<[email protected]>
幸运的是,我能够准确地发现导致失败的原因。我的签名服务器保留了临时文件 /tmp/dkim.*,该文件表明相同的标头被规范化了,但略有不同:
cc: Alice A <[email protected]>,
Bob B-B <[email protected]>,
'Charlie C' <[email protected]>
现在到了有趣的部分。我的签名服务器运行与验证远程服务器非常相似的版本(opendkim-2.10.3-1.el6.x86_64.rpm),我无法使其重复这种错误行为,即导致规范化"'something'"
。那么远程服务器如何实现这种规范化?真实的标头(我没有在我的服务器上存档)怎么会是这样的字符串,它以某种方式在"'something'"
远程服务器和'something'
我的服务器上解码并规范化?或者也许某些附加软件会在 MTA 处理过程中改变这些引号?欢迎提出合理的猜测。
答案1
在DKIM 规格。“简单”算法根本不改变标题,而“宽松”算法除了将标题字段名称转换为小写外,仅影响空格。
因此,我发现它不太可能与 OpenDKIM 有关。
我调查了RFC 5322。虽然似乎是允许的,但它被标记为过时(遵循 ABNF:-> -> -> -> -> -> )。这可能是某些东西将其更改为 的原因。您应该尝试改用双引号 ( )。'Charlie C' <[email protected]>
address-list
address
mailbox
name-addr
display-name
phrase
obs-phrase
quoted-string
"Charlie C" <[email protected]>