Bonjour à tous,
Un petit message car la calvitie me guète suite à mon acharnement avec PHPMailer. Le problème est le suivant :
1/ J'ai suivi les tutos de Grafikart et sur le net pour mettre en place un serveur dédié.
2/ J'ai installé et configuré PostFix correctement
3/ Les mails s'envoient correctement et pour cela j'utilise PHPMailer.
4/ Lorsque je teste mon score spam sur mail-tester.com, je perds 3 points car mon DKIM n'est pas valide...
Le problème c'est que le serveur est bien configuré et quand j'utilise cet outil : DKIMvalidator j'ai le message suivant
Validating Signature
result = fail
Details: OpenSSL error: data too small for key size
Et effectivement quand je lis le détail du message reçu par le serveur de l'outil de test j'ai :
DKIM Signature
Message contains this DKIM Signature:
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; l=502; s=mail;
t=1530726481; c=relaxed/simple;
h=From:To:Date:Subject;
d=app.mondomaine.fr; i=support@app.mondomaine.fr;
z=From:=20MonDomaine=20
|To:=20Jgy2UCZCPi45U6@dkimvalidator.com
|Date:=20Wed,=204=20Jul=202018=2019:48:01=20+0200
|Subject:=20Test=20;
bh=JH6gson/L8FfiBOXc8nUer5Yt0Wr5WFfOIFhhNCbumo=;
b=
Signature Information:
v= Version: 1
a= Algorithm: rsa-sha256
c= Method: relaxed/simple
d= Domain: app.mondomaine.fr
s= Selector: mail
q= Protocol: dns/txt
bh= JH6gson/L8FfiBOXc8nUer5Yt0Wr5WFfOIFhhNCbumo=
h= Signed Headers: From:To:Date:Subject
b= Data:
Public Key DNS Lookup
Building DNS Query for mail._domainkey.app.mondomaine.fr
Retrieved this publickey from DNS: v=DKIM1; k=rsa; t=s; s=email; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDAYRSBjm+M/g483yCtwAuuKuCQwnLPLS3s0hfr6cASM8QaKS5V8tAXs2BrJvAUbuf7EIOKO8S/0HhVxpxT6aEO5vbh0U1nwp+rIzl/aPq+MC+7RBT+IHePbyxuzSfw3DRCOToFUi+fsYq1i0QjVJ2cBFR/BTTKk+4HzZfWfXrJ+QIDAQAB
Il faudrait que j'arrive à comprendre pourquoi l'attribut "b" du DKIM Signature est égale à ""...
Quand je regarde la class PHPMailer, je vois bien que le problème vient de cette fonction :
public function DKIM_Sign($signHeader)
{
if (!defined('PKCS7_TEXT')) {
if ($this->exceptions) {
throw new Exception($this->lang('extension_missing') . 'openssl');
}
return '';
}
$privKeyStr = !empty($this->DKIM_private_string) ?
$this->DKIM_private_string :
file_get_contents($this->DKIM_private);
if ('' != $this->DKIM_passphrase) {
$privKey = openssl_pkey_get_private($privKeyStr, $this->DKIM_passphrase);
} else {
$privKey = openssl_pkey_get_private($privKeyStr);
}
if (openssl_sign($signHeader, $signature, $privKey, 'sha256WithRSAEncryption')) {
openssl_pkey_free($privKey);
return base64_encode($signature);
}
openssl_pkey_free($privKey);
return '';
}
Mais je sèche lamentablement... J'ai pourtant activé l'extension SSL sur mon php.ini.
Ah et voici mon utilisation de phpMailer :
try{
$mail = new PHPMailer\PHPMailer\PHPMailer();
$mail->Priority = 3;
$mail->From = 'support@app.mondomaine.fr';
$mail->Sender = 'support@app.mondomaine.fr';
$mail->FromName = 'App';
$mail->DKIM_domain = 'app.mondomaine.fr';
$mail->DKIM_private = '/var/dkim/dkim.private';
$mail->DKIM_selector = 'mail';
$mail->DKIM_passphrase = '';
$mail->DKIM_identity = $mail->From;
$mail->Encoding = "base64";
$mail->AddAddress('jgy2uczcpi45u6@dkimvalidator.com');
$mail->Subject = 'Test';
$mail->IsHTML(TRUE);
$mail->CharSet = "text/html; charset=UTF-8;";
$mail->Body = '<html><body><p>Message de test en html</p></body></html>';
$mail->AltBody = "Message de test en HTML";
$mail->Send();
jsonKill(Success('YESP'));
}catch(Exception $e){
jsonKill(Success('MEssage' + $e->getMessage()));
}
Je vous remercie sincèrement pour l'aide que vous pourrez m'apporter !
Ok trouvé... L'utilisateur www-data n'avait pas les droits nécessaires pour accéder au ficher /var/dkim/private.key. C'était vraiment tout bête.
J'ai aussi encrypté la clé public en 2048.
Merci à tous.
Apparemment la taille de la clé privée qui a servi à signer n'est pas la même que celle de la clé publique sur ton dns
essaye de regénérer une paire de clés.
Salut Huggy,
Merci pour ta réponse. J'ai bien re-généré mes clés mais même problème... Je ne comprends pas.
Voici comment je génère mes clés :
openssl genrsa -out private.key 1024 -> Privée
openssl rsa -in private.key -pubout -out public.key => Public
Et mon paramètre b est toujours vide. Serait-il possible que se soit un problème de droit d'accès au fichier ? Pourtant si je met un chemin non valide, PHP Mailer me sort une erreur...
Mes clés sont dans /var/dkim/ et je ne pense que ça vienne de là. Par ailleurs ça m'embête de donner à l'utilisateur www-data les droits sur ce dossier.
EDIT : Je viens de migrer ma clé dans le répertoire public le temps d'un test et même soucis, le champ B est vide... :
La signature DKIM de votre message est :
v=1;
a=rsa-sha256;
q=dns/txt;
l=505;
s=mail;
t=1531387966;
c=relaxed/simple;
h=From:To:Date:Subject;
d=app.mydomain.fr;
i=support@app.mydomain.fr;
z=From:=20Test=20<
support@app.mydomain.fr>
|To:=20web-xkzph@mail-tester.com|Date:=20Thu,=2012=20Jul=202018=2011:32:46=20+0200|Subject:=20Test;
bh=VVCT+c7dEN6bxnAieNGCNjFPLW0Fb0eJE8NnB5AcuCY=;
b=
Après mon fichier à les droits suivants :
-rw------- 1 root root 887 juil. 12 10:24 private.key
ça viendrait de là ? Je suis une brêle en droit user sous Debian et Linux en général.