我在AWS EC2下運行虛擬機,它是一個Turnkey Linux,其AFAIK基於Ubuntu/Debian。phpMailer DKIM Sign for Amazon SES
我有一個網站,它在Wordpress上運行,它有一個約10,000人的新聞訂閱基地,所以我想使用亞馬遜SES發送電子郵件,便宜和良好的傳送率。
問題是我必須DKIM自己簽署電子郵件......所以我使用的是基於phpMailer的Wordpress插件。
插件正確發送電子郵件,我的SPF記錄正常,亞馬遜SES完美工作,唯一的問題是DKIM SIGN - 電子郵件未被正確簽名。
我被卡住了@插件試圖做的一個點openssl_pkey_get_private - 它應該返回一些東西,但它什麼都不返回。這也引發對openssl_error_string()對象的錯誤,如下圖所示:
error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt
這個錯誤不會停止腳本,我不得不挖找到它。
那麼,腳本會繼續,因爲它試圖用一個空的privKey openssl_sign。
結果是一封電子郵件,它不驗證DKIM。下面是我的Gmail收件箱頭DKIM位:
DKIM-Signature: v=1; a=rsa-sha1; q=dns/txt; l=233; s=ses;
t=1336494976; c=relaxed/simple;
h=From:To:Subject;
d=joaodedeus.com.br;
z=From:=20=3D?UTF-8?Q?Casa_Dom_In=3DC3=3DA1cio_de_Loyola?=3D=20<[email protected]>
|To:[email protected].com.br
|Subject:=20Test=20message=20from=20your=20WordPress=20blog;
bh=Z+aAYGyi+5Sk1vIJcjjdy28rCuQ=;
b=
以下是http://www.brandonchecketts.com/emailtest.php說,這個電子郵件的DKIM登錄:
result = fail
Details: OpenSSL error: data too small for key size
Message contains this DKIM Signature:
DKIM-Signature: v=1; a=rsa-sha1; q=dns/txt; l=270; s=ses;
t=1336494983; c=relaxed/simple;
h=From:To:Subject;
d=joaodedeus.com.br;
z=From:=20=3D?UTF-8?Q?Casa_Dom_In=3DC3=3DA1cio_de_Loyola?=3D=20
|To:[email protected]
|Subject:=20Test=20message=20from=20your=20WordPress=20blog;
bh=LVAqBtz26jyffwhHPhhXdLQOLhA=;
b=
Signature Information:
v= Version: 1
a= Algorithm: rsa-sha1
c= Method: relaxed/simple
d= Domain: joaodedeus.com.br
s= Selector: ses
q= Protocol: dns/txt
bh= LVAqBtz26jyffwhHPhhXdLQOLhA=
h= Signed Headers: From:To:Subject
b= Data:
**Public Key DNS Lookup**
Building DNS Query for ses._domainkey.joaodedeus.com.br
Retrieved this publickey from DNS: v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDYCkhM+6KDL5ndu4uhaP+jBp1BYBVN8Z8/BnXJ7JFc/HXcqW9Emt1vgmlcVqzBcHLFLk6GRRMbm4RIgOV1TCkr41ZTB8UYCjmUB6qqSY88hCdVIBQmTHgxq2DWhzlWiiOlqzeIQuMiMc0lgEaO8Zq3+d5gntPZXoxmTPQH32zA7wIDAQAB
這裏是在PHPMailer的DKIM_Sign函數試圖做的事:
public function DKIM_Sign($s) {
$privKeyStr = file_get_contents($this->DKIM_private);
if ($this->DKIM_passphrase!='') {
$privKey = openssl_pkey_get_private($privKeyStr,$this->DKIM_passphrase);
} else {
$privKey = $privKeyStr;
}
$privKey = $privKeyStr;
if (openssl_sign($s, $signature, $privKey)) {
return base64_encode($signature);
}
}
問題是openssl_pkey_get_private返回任何內容。然後,openssl_sign函數將嘗試使用$ privKey簽署一個EMPTY。
$ privKeyStr正確讀取關鍵字(file_get_contents),如果我回顯它,它的內容與關鍵字相同。
$ this-> DKIM_passphrase也是正確的,j0 @ 0d3deus5。
這是我如何生成的密鑰,WordPress的亞馬遜SES DKIM梅勒插件的指令後:
openssl genrsa -des3 -passout pass:change-me -out .htkeyprivate 1024 && openssl rsa -in .htkeyprivate -passin pass:change-me -pubout -out .htkeypublic
當然,我改變過:變化 - 我正確的密碼,J0 @ 0d3deus5。
我離不開DKIM。似乎hotmail很大程度上依賴於它。
以下是我的hotmail帳戶的一個例子 - >注意,由於DKIM ERROR,它直接進入垃圾文件夾。
x-store-info:4r51+eLowCe79NzwdU2kRyU+pBy2R9QCQ1WNUtV+VDcgEpN5KOTd9UyMPxTZoGJzS/h26zeEkCEVmH2zMg90yYxKot4DO0sKOsk98MBHLTNpOuzjxN5a42AR5Kz/5hEhx7XveDgnXqY=
Authentication-Results: hotmail.com; sender-id=pass (sender IP is 199.255.192.147) [email protected]; dkim=permerror header.d=joaodedeus.com.br; x-hmca=pass
X-SID-PRA: [email protected]
X-DKIM-Result: PermError
X-Message-Status: n:0:n
X-SID-Result: Pass
X-AUTH-Result: PASS
X-Message-Delivery: Vj0xLjE7dXM9MDtsPTA7YT0wO0Q9MjtHRD0yO1NDTD00
X-Message-Info: 11chDOWqoTkwLXPc6a+BBmU8PZ8Fa4uSQFuX56QoKCDSXsl9i7U4MyfUnfj2m3DtVW2PyTXMqyT/fwR9UtNuG4HNxTPmpoMwQBL+DemPeAzSpRs8zDKsN3uVpfPKiw+g1EW50e42Qd0=
Received: from a192-147.smtp-out.amazonses.com ([199.255.192.147]) by BAY0-MC4-F33.Bay0.hotmail.com with Microsoft SMTPSVC(6.0.3790.4900);
Tue, 8 May 2012 10:26:29 -0700
X-PHPMAILER-DKIM: phpmailer.anatta.com
DKIM-Signature: v=1; a=rsa-sha1; q=dns/txt; l=233; s=ses;
t=1336497986; c=relaxed/simple;
h=From:To:Subject;
d=joaodedeus.com.br;
z=From:=20=3D?UTF-8?Q?Casa_Dom_In=3DC3=3DA1cio_de_Loyola?=3D=20<[email protected]>
|To:[email protected]
|Subject:=20Test=20message=20from=20your=20WordPress=20blog;
bh=X6QtcRzw7+F7llznB77GikLQnko=;
b=
任何幫助是值得歡迎的。
最好的問候和抱歉,我的英語。
有一個問題在這裏的內容? – TheOx
抱歉TheOx,當我寫這個問題時,我搞砸了。 – ddutra