veilletech.fr
30 sept. Feed du jour
#04 SYMFONY Article

Symfony 8.2 : le mail chiffré PGP, et un piège S/MIME

Un destinataire sans certificat ne devrait pas décider pour tous les autres.

Symfony 8.2 ajoute la signature et le chiffrement PGP/MIME (RFC 3156) aux e-mails, via le binaire gpg et deux en-têtes. Le chantier a mis au jour un défaut de l'existant : en S/MIME, un seul destinataire sans certificat suffisait à envoyer le message en clair à tous. L'option on_missing_certificate permet désormais d'échouer ou d'écarter ce destinataire, mais le comportement par défaut ne change qu'avec Symfony 9.

2 min de lectureintermédiairevidéo 1:27
Partager
Sommaire4 sections
  1. Ce qui se passe
  2. Le piège S/MIME
  3. Les limites
  4. À retenir

Ce qui se passe

Symfony signe et chiffre les e-mails en S/MIME depuis la 4.4, avec des certificats X.509 émis par une autorité. Beaucoup de correspondants utilisent plutôt des clés OpenPGP : Symfony 8.2 les prend en charge dans le composant Mime, selon PGP/MIME (RFC 3156).

Le fonctionnement reprend celui de S/MIME : signature détachée d'un côté, chiffrement avec les clés publiques des destinataires de l'autre. En application complète, on configure une fois le Mailer, puis on ajoute X-Pgp-Sign et/ou X-Pgp-Encrypt aux messages concernés. Symfony agit après le rendu (donc avec TemplatedEmail) et signe toujours avant de chiffrer. Pas d'extension PHP : le binaire gpg est appelé par le composant Process.

L'option on_missing_key règle le cas d'un destinataire sans clé publique : fail, encrypt (il ne pourra pas lire) ou skip (retiré de l'envoi). Le message ne part jamais en clair, et les destinataires en Bcc sont masqués dans la partie chiffrée.

Le piège S/MIME

Jusqu'ici, en S/MIME, un seul destinataire sans certificat faisait partir le message non chiffré pour tout le monde. La 8.2 ajoute on_missing_certificate, avec les mêmes valeurs, et permet de déclarer les certificats directement en configuration.

Mais par compatibilité, la valeur par défaut reste send_unencrypted — dépréciée, elle ne lèvera une exception qu'en Symfony 9.0. Un message peut aussi fixer son propre comportement :

PHP
$email->getHeaders()->addTextHeader('X-SMime-Encrypt', 'skip');

Enfin, les écouteurs DKIM et S/MIME s'exécutent désormais dans un ordre fixe — signature, chiffrement, puis DKIM — pour qu'un message à la fois signé et chiffré passe toujours.

Les limites

Source : New in Symfony 8.2: PGP/MIME Signed and Encrypted Emails, Symfony, 29 septembre 2026 ; contribution de Florent Morselli.