所以,我失眠了,我在网上搜索,找到了库、解释等,但我还没有找到创建要添加到电子邮件中的域密钥签名的分步指南标头来签署我从 PHP 程序发送的经过身份验证的电子邮件。实际上,我找到了一些说明,但似乎总是缺少一个步骤!
阅读 Jeff Atwood 的“所以你想发送一些电子邮件(通过代码)”对我有很大帮助,实际上让我了解了所有这些签名方法。到目前为止,我有:
使用 openVPN 和以下 openssl 命令创建了一个公钥/私钥对
openssl genrsa -out rsa.private 1024 -
openssl rsa -in rsa.private -out rsa.public -pubout -outform PEM
添加了必要的 TXT DNS 记录(全局策略和公共 base64 密钥)
- 在电子邮件标题中添加(似乎是)必要的参数
但是,使用 Port25 的身份验证报告会返回:
DomainKeys 检查详情: -------------------------------------------------- -------- 结果:失败(签名错误) 已验证 ID:header.From=truth@truthuniversal.com DNS 记录: truthuniversal._domainkey.truthuniversal.com。86400 IN TXT "k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDdxr0auyWOszMhdPW0LR3/Duf3t6XcvlwTpYuoS1lzCuT35voqcEhctCh2dTzq2RAXOrinbG8HuTg/IBde3GWaRwBMSQRJ/ZwiNZHomMfqnZEhC9MT+J9OAEbm5TdwZ0HcIOKGBGi0fZvhYs5kw34mk0cwO7AacgSInDf+QjOE+QIDAQAB"
您可以在那里看到使用密钥的 TXT 记录。
这是我使用 openssl 命令生成的公钥——文件 rsa.public:
-----开始公钥----- MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDdxr0auyWOszMhdPW0LR3/Duf3 t6XcvlwTpYuoS1lzCuT35voqcEhctCh2dTzq2RAXOrinbG8HuTg/IBde3GWaRwBM SQRJ/ZwiNZHomMfqnZEhC9MT+J9OAEbm5TdwZ0HcIOKGBGi0fZvhYs5kw34mk0cw O7AacgSInDf+QjOE+QIDAQAB -----结束公钥-----
在 PHP 中,我以这种方式构造标题:
$pkey="MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDdxr0auyWOszMhdPW0LR3/Duf3t6XcvlwTpYuoS1lzCuT35voqcEhctCh2dTzq2RAXOrinbG8HuTg/IBde3GWaRwBMSQRJ/ZwiNZHomMfqnZEhC9MT+J9OAEbm5TdwZ0HcIOKGBGi0fZvhYs5kw34mk0cwO7AacgSInDf+QjOE+QIDAQAB";
$dkeysig = "DomainKey-Signature: a=rsa-sha1;
s=truthuniversal;d=truthuniversal.com;c=simple;q=dns;b=$pkey;"
$newLine = "\r\n";
//Construct Headers
$headers = "MIME-Version: 1.0" . $newLine;
$headers .= "Content-type: text/html; charset=iso-8859-1" . $newLine;
$headers .= "$dkeysig" . $newLine;
当我检查收到的消息的标题时,它看起来是这样的:
域密钥签名:a=rsa-sha1;s=truthuniversal;d=truthuniversal.com;c=simple;q=dns;b=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDdxr0auyWOszMhdPW0LR3/Duf3t6XcvlwTpYuoS1lzCuT35voqcEhctCh2dTzq2RAXOrinbG8HuTg/IBde3GWaRwBMSQRJ/ZwiNZHomMfqnZEhC9MT+J9OAEbm5TdwZ0HcIOKGBGi0fZvhYs5kw34mk0cwO7AacgSInDf+QjOE+QIDAQAB;
我错过了什么?
还有一步吗?