Nuevo en Symfony 4.4: Firmando y encriptando emails

Symfony 4.4 se publicará a finales de noviembre de 2019. Este artículo es el primero de una serie que muestra las novedades más interesantes de esta versión.


Los componentes Mailer y Mime se publicaron en Symfony 4.3 para reemplazar a la anterior solución basada en SwiftMailer. En Symfony 4.4 los hemos mejorado con nuevas opciones para firmar y encriptar emails gracias al estándar S/MIME.

Firmar un mensaje mejora su integridad ya que el mensaje incluye la firma digital del hash de todos los contenidos del email; así puedes asegurarte de que los contenidos del email no se han modificado desde que se envió:

use Symfony\Component\Mime\Crypto\SMimeSigner;
use Symfony\Component\Mime\Email;
 
$email = (new Email())->from('...')->to('...')->html('...');
 
$signer = new SMimeSigner('/ruta/a/certificado.crt', '/ruta/a/clave-privada-de-certificado.key');
$signedEmail = $signer->sign($email);
// ahora usa el Mailer para enviar $signedEmail en vez de $email

Encriptar un mensaje mejora su seguridad ya que sus contenidos, incluyendo sus archivos adjuntos, solo se pueden leer si tienes la clave privada asociada a la clave pública usada para encriptarlos:

use Symfony\Component\Mime\Crypto\SMimeEncrypter;
use Symfony\Component\Mime\Email;
 
$email = (new Email())->from('...')->to('...')->html('...');
 
$encrypter = new SMimeEncrypter('/ruta/a/certificado.crt');
$encryptedEmail = $encrypter->encrypt($email);
// ahora usa el Mailer para enviar $encryptedEmail en vez de $email

Lee el artículo Signing and Encrypting Messages en la documentación oficial de Symfony para conocer todos los detalles sobre esta nueva funcionalidad.

Esta funcionalidad fue contribuida por Sebastiaan Stok en el pull request #30981.

Fuente: New in Symfony 4.4: Signing and Encrypting Email Messages

Comentarios

Publicada el

10 de octubre de 2019

Etiquetas

Proyectos Symfony destacados

La forma más sencilla de generar el backend de tus aplicaciones Symfony. Ver más

Síguenos en @symfony_es para acceder a las últimas noticias.