Bonjour à tous et à toutes. Nombreux sont ceux qui rencontrent des problèmes sur ce genre de technologies et les réponses ne courent pas les pages internet... Voici donc le problème que je vous énonce
Je désire, par le biais de PHPMailer, envoyé par SMTP (par un compte gmail) un mail signé par DKIM
Passant par cette messagerie et envoyant un mail directement à check-auth2@verifier.port25.com, celui ci me dit :
1 2 3 4 5 6 7 8
| ==========================================================
Summary of Results
==========================================================
SPF check: pass
DomainKeys check: pass
DKIM check: pass
Sender-ID check: pass
SpamAssassin check: ham |
Or, lorsque j'essaye d'envoyer un mail par le biais de PHPMailer, tout d'abord en envoyant un message avec isHTML(), il me renvoit
1 2 3 4 5
| ----------------------------------------------------------
DKIM check details:
----------------------------------------------------------
Result: fail (wrong body hash: expected d9/33fwdFUC2QFjBLdJ+eUAUOkI=)
ID(s) verified: |
Voici l'intégralité des données à savoir. Ma clé publique et privée sont bien liées
DNS : alpha._domainkey.mondomaine.com IN TXT :
v=DKIM1; t=y; g=*; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCVZFTP7HGt2vP24vr1sbhdYD187wih1hAW9jmOw1dn6stOEd47nxEP/L6reGVhrl7bZMUZymdJAXWMF9WMAMEXq3rpxYppgZsliRMnqXv3U3a36UIL1UT+9EiicY3F/smiP2udEoXa6yVA1qaTMOmU0XjAcCAhfIr4DeHcBXjV8QIDAQAB
DKIM Signature
1 2 3 4 5 6 7 8 9
| Canonicalized Headers:
mime-version:1.0'0D''0A'
date:Tue,'20'7'20'Jun'20'2011'20'12:25:56'20'+0200'0D''0A'
message-id:290e94045cd61bb797269dc58ed9dd24'0D''0A'
subject:test'0D''0A'
from:"election@mondomaine.com"'20'<election@mondomaine.com>'0D''0A'
to:check-auth2@verifier.port25.com'0D''0A'
content-type:text/plain;'20'charset="iso-8859-1"'0D''0A'
dkim-signature:v=1;'20'a=rsa-sha1;'20'q=dns/txt;'20'l=10;'20's=alpha;'20't=1307442356;'20'c=relaxed;'20'h=mime-version:x-originating-ip:date:message-id:subject:from:to:content-type;'20'd=mondomaine.com;'20'i=election@mondomaine.com;'20'z=From:=20"election@mondomaine.com"=20<election@mondomaine.com>'20'|To:=20check-auth2@verifier.port25.com'20'|Subject:=20test;'20'bh=rW0noVoasYkysD56sSWhUbVPniU=;'20'b= |
Vous noterez ici que l'attribut b n'est pas renseigné alors que dans le mail original :
1 2 3 4 5 6 7 8 9 10
| X-PHPMAILER-DKIM: phpmailer.worxware.com
DKIM-Signature: v=1; a=rsa-sha1; q=dns/txt; l=10; s=alpha;
t=1307442356; c=relaxed;
h=mime-version:x-originating-ip:date:message-id:subject:from:to:content-type;
d=mondomaine.com; i=election@mondomaine.com;
z=From:=20"election@mondomaine.com"=20<election@mondomaine.com>
|To:=20check-auth2@verifier.port25.com
|Subject:=20test;
bh=rW0noVoasYkysD56sSWhUbVPniU=;
b=HCjg5YB5QOfxHLHhVzwYI6jTeMtXf8t/JCLrqp/WPdgpurEr0UwVsdMNY3Byo/qik6SLJPMrUDvY58aABuIV8DJhRR3jds/ekLfMEwn1TvTfdHDM1amLiEOOW6+lAqvzUjJ5qSzWkKAauwfLg27s5N02ofXgjOgKojMfOcNwmN4= |
Appel de la fonction PHP
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
| // Envoi du mail via MySMTP.eu
// Chargement de la bibliothèque phpmailer
require_once("class_phpmailer/phpmailer.php5");
require_once("class_phpmailer/smtp.php5");
// Chargement des paramètres de connexion à gmail
$mail = new PHPMailer();
$mail->IsSMTP();
$mail->SMTPAuth = true;
$account = fnct_app_constant_get('smtp_dk_login');
$password = SMTP_PWD; // Définit en temps que constante
$mail->Host = '81.19.234.29'; //*'mysmtp.eu';
$mail->Port = 587;
$mail->Username = $account;
$mail->Password = $password;
$mail->From = $account;
// Chargement des entêtes du mail
$mail->FromName = 'election@mondomaine.com';
$mail->Subject = Test;
$mail->WordWrap = 75;
$mail->AddReplyTo($account,'election@mondomaine.com');
$mail->AddAddress('check-auth2@verifier.port25.com');
// Ajout de la signature DKIM
$mail->DKIM_selector = 'alpha';
$mail->DKIM_identity = $mail->From;
$mail->DKIM_domain = 'mondomaine.com';
$mail->DKIM_private = 'parametre/dkim_private.key'; // Fichier contenant la clé format PEM
$mail->DKIM_passphrase = '';
// Génération d'un identifiant de suivi
$msgID = md5(mt_rand(0, 32).time());
$mail->MessageID = $msgID;
// Chargement du contenu HTML
$html_content = '<b>Test de mail</b>';
$mail->MsgHTML($html_content);
$mail->AltBody = 'Test de mail';
$mail->IsHTML(true);
$mail->TransportId = $msgID;
// Envoi du mail
$sent = $mail->Send();
if($sent) {
echo "Le message a été envoyé";
} else {
echo "Le message n'a pas été envoyé";
};
// Fin de la fonction |
Voici donc les questions que je me pose :
1) Que dois-je modifier pour faire en sorte que ma signature passe enfin sur un mail généré par PHPMailer ?
2) Comment se fait-il que la version canonicalized des headers ne contienne pas l'attribut b, étant pourtant la signature en elle même.
Edit : en réfléchissant un peu il est logique que cet attribut soit vide. vu qu'il s'agit de la signature du header jusqu'au '... b=' il ne peut pas être pris en compte dans la canonicalization du header ou le test de la signature sera forcément faux.
Partager