0x1: DKIM是邮件发件人身份验证技术实现方式之一,数字签名在其中的应用同时保证了发件人身份可靠以及邮件内容的完整,用于防护发件人欺诈,是拦截垃圾邮件及钓鱼邮件的有效手段。
我们先来看一个DKIM签名,如下:
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=<sender domain>;
s=selector1;
h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
bh=0yxAGQYAXZRrgDxuKKJ/yZaxG5v3IDluFDDN4tzAZFM=;
b=OYCVOTGgcZlZwAWYtmUsWIGev+zMqVCE0mVuqVQvhWfxwcG7W7tcdq5ObEPYvZTf2W8PK8U9bMI2QAnA9fB9lfqW/ndfy00k5lGJk6igZlyH2Hr3FC+A/8EcYBifWdqz2AbTVDo8uwHYVK5RZjgHPohzypyDsR+o4f1qXqLfjYc=
签名中各标签的含义,这里不作解释。我们将在这篇文章里通过手动验证这个数字签名来了解DKIM签名验证过程。
0x2: 执行DKIM的手动验证,关键点是对邮件正文及信头的规范化(Canonicalization)。relaxed/relaxed是广泛使用的处理方式,允许邮件服务器对邮件内容的少量变更,比如插入空行等。
The "simple" Header Canonicalization Algorithm
‘Simple’方式的邮件信头的规范化处理不对信头做任何修改,保留原始信头原。但是需按照DKIM