0

私はAWS EC2で仮想マシンを実行しています。これはターンキーLinuxであり、AFAIKはUbuntu / Debianに基づいています。

私は、Wordpress で運営されているウェブサイトを持っており、ニュースレターの購読者数は約 10.000 人です。そのため、Amazon SES を使用して、安価で配信率の高い E メールを送信したいと考えています。

問題は、自分で電子メールに DKIM 署名する必要があることです...そのため、phpMailer に基づく Wordpress プラグインを使用しています。

プラグインは E メールを正しく送信します。私の SPF レコードは正常です。Amazon SES は完全に動作します。唯一の問題は DKIM SIGN です - E メールが正しく署名されていません。

プラグインが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<novidades@joaodedeus.com.br>
    |To:=20ddutra@cristalinacomunicacao.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:=20fb7oNYUCwX@www.brandonchecketts.com
    |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 関数は、EMPTY $privKey で署名しようとします。

$privKeyStr はキーを正しく読み取ります (file_get_contents)。エコーすると、キーと同じ内容になります。

$this->DKIM_passphrase も正しいj0@0d3deus5です。

Wordpress Amazon SES DKIM Mailer プラグインの指示に従って、キーを生成する方法は次のとおりです。

openssl genrsa -des3 -passout pass:change-me -out .htkeyprivate 1024 && openssl rsa -in .htkeyprivate -passin pass:change-me -pubout -out .htkeypublic

もちろん、 pass:change-me を正しいパスフレーズ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) header.from=novidades@joaodedeus.com.br; dkim=permerror header.d=joaodedeus.com.br; x-hmca=pass
X-SID-PRA: novidades@joaodedeus.com.br
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<novidades@joaodedeus.com.br>
    |To:=20dmnq_sl@hotmail.com
    |Subject:=20Test=20message=20from=20your=20WordPress=20blog;
    bh=X6QtcRzw7+F7llznB77GikLQnko=;
    b=

どんな助けでも大歓迎です。

よろしくお願いします。私の英語で申し訳ありません。

4

3 に答える 3

0

私はこのプラグインでそれを動作させました:

http://wordpress.org/extend/plugins/amazon-ses-and-dkim-mailer/

秘密鍵ファイルに適切なアクセス許可を付与することを忘れないでください。ルート ディレクトリの下にある必要はありません。

ただし、まだ HTML メールに署名できません。今、それに取り組んでいます!

編集:

すべてのコンテンツが正しくエンコードされていることを確認して、DKIM を正しく取得しました。これは役に立ちました: DOM がエンコーディングを変更するのはなぜですか?

于 2012-05-19T19:48:07.903 に答える
0

SMTP API を使用して送信すると DKIM は有効ですが、REST API を使用すると DKIM が失敗することに気付きました。

SendRawEmailアクションを使用してコンテンツを送信しているので、これは奇妙ですGetSentMIMEMessage

どんな提案でも大歓迎です

于 2012-12-21T11:21:03.693 に答える