Bonjour à tous,

Un petit message car la calvitie me guète suite à mon acharnement avec PHPMailer. Le problème est le suivant :

Ce que je fais

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

Ce que je veux

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 !

3 réponses


Seeryos
Auteur
Réponse acceptée

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.

Seeryos
Auteur

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.