S/MIME Partie 3 : Plug and Play pour le courrier électronique sécurisé sur site

Email

1 min read

S/MIME Partie 3 : Plug and Play pour le courrier électronique sécurisé sur site

Email

1 min read

S/MIME Partie 3 : Plug and Play pour le courrier électronique sécurisé sur site

Dans cette partie, nous allons examiner comment l'outil peut être adapté pour injecter des flux de courrier dans des plateformes sur site telles que PowerMTA et Momentum.

Dans la partie 1, nous avons fait un bref tour de S/MIME, en examinant la signature et le chiffrement de nos flux de messages sur une gamme de clients de messagerie. La partie 2 nous a guidés à travers un simple outil en ligne de commande pour signer et chiffrer des e-mails, puis les envoyer via SparkPost.

Dans cette partie, nous verrons comment l'outil peut être adapté pour injecter des flux de messagerie dans des plateformes locales telles que Port25 PowerMTA et Momentum.

D'accord – commençons !

1. Mise en route

L'installation de l'outil, l'obtention de vos clés, etc. est exactement la même qu'auparavant. Lorsque vous utilisez un système de messagerie sur site tel que PowerMTA ou Momentum, vous êtes déjà responsable de la configuration des domaines d'envoi, des clés DKIM, etc. Ce que nous devons faire maintenant, c'est fournir un moyen d'injecter les messages S/MIME entièrement formés dans vos serveurs.

2. Injection SMTP vers Port25 PowerMTA

PowerMTA supporte divers moyens d'injection de messages, y compris un répertoire de "ramassage" de fichiers, SMTP et une API. SMTP est la méthode utilisée ici.

Pour illustrer la configuration la plus simple possible, nous installerons les outils S/MIME sur le même serveur que PowerMTA. Nous injectons les messages à l'écouteur, qui est ouvert par défaut sur le port TCP 25, acceptant uniquement le trafic local.

export SMTP_HOST=localhost

(Si vous oubliez cette étape, vous verrez : "Variable d'environnement SMTP_HOST non définie - arrêt" lorsque vous essayez de l'exécuter.)

Nous avons déjà la clé privée de l'expéditeur (steve@thetucks.com.pem) et la clé publique du destinataire (steve.tuck@sparkpost.com.crt). Les premières lignes du fichier de message sont :

To: SteveT <steve.tuck@sparkpost.com> From: Steve <steve@thetucks.com> Subject: Ceci est un message créé en utilisant HEML MIME-Version: 1.0 Content-Type: text/html; charset=utf-8 Content-Language: en-GB Content-Transfer-Encoding: 7bit

Nous envoyons le message avec :

./sparkpostSMIME.py tests/fancy-HTML-to-smt.eml --sign --encrypt --send_smtp

Nous voyons :

Connexion SMTP (plain) ouverte à localhost, port 25, utilisateur="", mot de passe="" Envoi de tests/fancy-HTML-to-smt.eml From: Steve <steve@thetucks.com> To: SteveT <steve.tuck@sparkpost.com> OK - en 0,028 secondes

Le message arrive rapidement dans la boîte de réception et est signalé dans Mac Mail comme signé et chiffré.

Fonctionnalité bonus : DKIM avec PowerMTA

DKIM est assez facile à configurer et coexiste heureusement avec S/MIME. Les étapes sont :

  • Utilisez le site DKIM Wizard de PowerMTA pour créer la clé privée du domaine d'envoi (dans mon cas, mypmta.thetucks.com.pem) et le contenu de l'enregistrement DNS TXT public.

  • Configurez l'enregistrement DNS TXT, avec un sélecteur choisi. Par exemple, j'ai utilisé le sélecteur pmta201811. Les caractères de sélecteur valides sont définis ici.

  • Placez le fichier mypmta.thetucks.com.pem sur le serveur dans le répertoire /etc/pmta.

  • Ajoutez ce qui suit à mon /etc/pmta/config et redémarrez le service pmta. (Ici, ces directives sont écrites à l'échelle mondiale ; sur un système de production, vous pourriez préférer les ajouter sous un virtual-mta à la place.)

host-name thetucks.com domain-key pmta201811,*,/etc/pmta/mypmta.thetucks.com.pem <domain *>    dkim-sign yes </domain>

L'enregistrement DNS est validé via MX Toolbox, et DKIM est désormais actif.

PowerMTA supporte divers moyens d'injection de messages, y compris un répertoire de "ramassage" de fichiers, SMTP et une API. SMTP est la méthode utilisée ici.

Pour illustrer la configuration la plus simple possible, nous installerons les outils S/MIME sur le même serveur que PowerMTA. Nous injectons les messages à l'écouteur, qui est ouvert par défaut sur le port TCP 25, acceptant uniquement le trafic local.

export SMTP_HOST=localhost

(Si vous oubliez cette étape, vous verrez : "Variable d'environnement SMTP_HOST non définie - arrêt" lorsque vous essayez de l'exécuter.)

Nous avons déjà la clé privée de l'expéditeur (steve@thetucks.com.pem) et la clé publique du destinataire (steve.tuck@sparkpost.com.crt). Les premières lignes du fichier de message sont :

To: SteveT <steve.tuck@sparkpost.com> From: Steve <steve@thetucks.com> Subject: Ceci est un message créé en utilisant HEML MIME-Version: 1.0 Content-Type: text/html; charset=utf-8 Content-Language: en-GB Content-Transfer-Encoding: 7bit

Nous envoyons le message avec :

./sparkpostSMIME.py tests/fancy-HTML-to-smt.eml --sign --encrypt --send_smtp

Nous voyons :

Connexion SMTP (plain) ouverte à localhost, port 25, utilisateur="", mot de passe="" Envoi de tests/fancy-HTML-to-smt.eml From: Steve <steve@thetucks.com> To: SteveT <steve.tuck@sparkpost.com> OK - en 0,028 secondes

Le message arrive rapidement dans la boîte de réception et est signalé dans Mac Mail comme signé et chiffré.

Fonctionnalité bonus : DKIM avec PowerMTA

DKIM est assez facile à configurer et coexiste heureusement avec S/MIME. Les étapes sont :

  • Utilisez le site DKIM Wizard de PowerMTA pour créer la clé privée du domaine d'envoi (dans mon cas, mypmta.thetucks.com.pem) et le contenu de l'enregistrement DNS TXT public.

  • Configurez l'enregistrement DNS TXT, avec un sélecteur choisi. Par exemple, j'ai utilisé le sélecteur pmta201811. Les caractères de sélecteur valides sont définis ici.

  • Placez le fichier mypmta.thetucks.com.pem sur le serveur dans le répertoire /etc/pmta.

  • Ajoutez ce qui suit à mon /etc/pmta/config et redémarrez le service pmta. (Ici, ces directives sont écrites à l'échelle mondiale ; sur un système de production, vous pourriez préférer les ajouter sous un virtual-mta à la place.)

host-name thetucks.com domain-key pmta201811,*,/etc/pmta/mypmta.thetucks.com.pem <domain *>    dkim-sign yes </domain>

L'enregistrement DNS est validé via MX Toolbox, et DKIM est désormais actif.

PowerMTA supporte divers moyens d'injection de messages, y compris un répertoire de "ramassage" de fichiers, SMTP et une API. SMTP est la méthode utilisée ici.

Pour illustrer la configuration la plus simple possible, nous installerons les outils S/MIME sur le même serveur que PowerMTA. Nous injectons les messages à l'écouteur, qui est ouvert par défaut sur le port TCP 25, acceptant uniquement le trafic local.

export SMTP_HOST=localhost

(Si vous oubliez cette étape, vous verrez : "Variable d'environnement SMTP_HOST non définie - arrêt" lorsque vous essayez de l'exécuter.)

Nous avons déjà la clé privée de l'expéditeur (steve@thetucks.com.pem) et la clé publique du destinataire (steve.tuck@sparkpost.com.crt). Les premières lignes du fichier de message sont :

To: SteveT <steve.tuck@sparkpost.com> From: Steve <steve@thetucks.com> Subject: Ceci est un message créé en utilisant HEML MIME-Version: 1.0 Content-Type: text/html; charset=utf-8 Content-Language: en-GB Content-Transfer-Encoding: 7bit

Nous envoyons le message avec :

./sparkpostSMIME.py tests/fancy-HTML-to-smt.eml --sign --encrypt --send_smtp

Nous voyons :

Connexion SMTP (plain) ouverte à localhost, port 25, utilisateur="", mot de passe="" Envoi de tests/fancy-HTML-to-smt.eml From: Steve <steve@thetucks.com> To: SteveT <steve.tuck@sparkpost.com> OK - en 0,028 secondes

Le message arrive rapidement dans la boîte de réception et est signalé dans Mac Mail comme signé et chiffré.

Fonctionnalité bonus : DKIM avec PowerMTA

DKIM est assez facile à configurer et coexiste heureusement avec S/MIME. Les étapes sont :

  • Utilisez le site DKIM Wizard de PowerMTA pour créer la clé privée du domaine d'envoi (dans mon cas, mypmta.thetucks.com.pem) et le contenu de l'enregistrement DNS TXT public.

  • Configurez l'enregistrement DNS TXT, avec un sélecteur choisi. Par exemple, j'ai utilisé le sélecteur pmta201811. Les caractères de sélecteur valides sont définis ici.

  • Placez le fichier mypmta.thetucks.com.pem sur le serveur dans le répertoire /etc/pmta.

  • Ajoutez ce qui suit à mon /etc/pmta/config et redémarrez le service pmta. (Ici, ces directives sont écrites à l'échelle mondiale ; sur un système de production, vous pourriez préférer les ajouter sous un virtual-mta à la place.)

host-name thetucks.com domain-key pmta201811,*,/etc/pmta/mypmta.thetucks.com.pem <domain *>    dkim-sign yes </domain>

L'enregistrement DNS est validé via MX Toolbox, et DKIM est désormais actif.

3. Injection SMTP vers Momentum

Momentum prend en charge différents moyens d'injection de messages, y compris API et SMTP. SMTP est la méthode utilisée ici, vers un hôte exécutant déjà Momentum. Nous laisserons sa configuration inchangée, car elle a déjà la capacité d'accepter des injections entrantes d'autres hôtes approuvés.

C'est une version plus petite d'une configuration de production, où les nœuds de « génération » et les nœuds MTA sont séparés, mais étroitement couplés via un VLAN privé et des équilibrages de charge, transportant le trafic d'injection SMTP interne.




Les outils S/MIME sont installés comme auparavant, et nous injecterons des messages à l'adresse de l'hôte SMTP (MTA) :

export SMTP_HOST=xx.xx.xx.xx # définissez ici votre propre adresse MTA / VIP

Comme précédemment, nous avons la clé privée de l'expéditeur (steve@thetucks.com.pem) et la clé publique du destinataire (steve.tuck@sparkpost.com.crt) déjà présentes sur le nœud de « génération ». Les premières lignes du fichier message correspondent à ces adresses.

Nous envoyons le message depuis le nœud de « génération » avec exactement la même commande qu'avant, et le message apparaît dans l'Inbox.

./sparkpostSMIME.py tests/fancy-HTML-to-smt.eml --sign --encrypt --send_smtp

Comme vous vous en doutez, S/MIME coexiste également joyeusement avec DKIM signing de Momentum.

4. Injection SMTP vers SparkPost

Dans la partie 2, nous avons utilisé l'API REST des transmissions de SparkPost pour injecter des messages. Bien sûr, il est également possible d'injecter des messages dans SparkPost en utilisant SMTP. Nous définissons les variables d'environnement ainsi :

export SMTP_PASSWORD=<<YOUR API KEY HERE>> export SMTP_HOST=smtp.sparkpostmail.com export SMTP_USER=SMTP_Injection export SMTP_PORT=587

Si vous utilisez le service hébergé par l'UE de SparkPost, alors définissez SMTP_HOST comme smtp.eu.sparkpostmail.com.
(Voir ici pour plus d'options – par exemple, vous pouvez injecter sur le port 2525 plutôt que 587.)

La sortie ci-dessous montre que STARTTLS est utilisé, avec le nom d'utilisateur et le mot de passe.

./sparkpostSMIME.py tests/fancy-HTML-to-smt.eml --sign --encrypt --send_smtp

Vous verrez :

Connexion SMTP ouverte (STARTTLS) à smtp.sparkpostmail.com, port 587, user="SMTP_Injection", password="****************************************" Envoi de tests/fancy-HTML-to-smt.eml De : Steve <steve@thetucks.com> À : SteveT <steve.tuck@sparkpost.com> OK - en 0.057 secondes

Le mot de passe est imprimé avec des caractères de substitution ***, donc vous ne compromettrez pas la confidentialité de votre clé si quelqu'un regarde par-dessus votre épaule.

Sécurisation de vos identifiants

Notez que les variables d'environnement pourraient être configurées dans un fichier script shell ou similaire, pour éviter de les retaper. Si vous le faites, prenez soin de vos mots de passe/clés API en limitant l'accès à ce fichier uniquement à vous-même. Par exemple, si votre fichier de configuration des identifiants est nommé my_envs.sh, alors exécutez :

chmod 0700 my_envs.sh

Avertissements liés à SMTP que vous pourriez voir

L'injection SMTP de SparkPost est assez stricte, comme vous vous y attendez pour un service public. Si vous n'avez pas défini le numéro de port SMTP, vous verrez un avertissement :

{'bob.lumreeker@gmail.com': (550, b'5.7.1 relaying denied')}

Si vous n'avez pas défini le nom d'utilisateur SMTP ou n'avez pas défini le mot de passe, vous verrez :

(530, b'5.7.1 Authorization required. Ref. https://developers.sparkpost.com/api/index#header-smtp-relay-endpoints', 'steve@thetucks.com')

Ces messages d'erreur sont simplement rapportés tel quel par la bibliothèque SMTP de Python, d'où le formatage.

Lequel est plus rapide – SMTP ou API ?

Franchement, S/MIME n'est probablement pas un cas d'utilisation à fort volume, mais avoir le même outil avec deux options de sortie, c'était nous donner envie de courir une course !

Le fichier de test de courrier électronique "Avocado" utilisé ici pèse environ 19KB. Répéter les tests 10 fois via une boucle bash a montré que les temps moyens étaient similaires pour SMTP et API, environ 60 millisecondes par message, ce qui est assez rapide. Dans ce cas, nous avons injecté depuis une instance EC2 moyenne dans la même région d'hébergement que SparkPost.com, ce qui est un bon moyen de maintenir bas les temps de latence réseau.

En répétant cela avec un fichier de test plus grand (577KB), l'API a pris environ 200 millisecondes, tandis que SMTP a pris 280 millisecondes par message – toujours impressionnant pour une taille de fichier 30x plus grande. Bien sûr, vos résultats peuvent varier en fonction de l'emplacement, de la congestion internet, etc., mais les performances ne devraient pas poser problème.

Si vous avez vraiment besoin de performances maximales, un bon point de départ serait de lancer un nombre défini de processus/sessions d'injection concurrents selon nos recommandations de meilleures pratiques de transmission – par exemple, depuis une tâche de superviseur.

En résumé…

Nous avons vu comment l'outil basé sur l'API SparkPost utilisé dans Partie 2 est mis à jour pour prendre en charge l'injection SMTP afin de prendre en charge les MTA sur site tels que Port25 PowerMTA et Momentum dans une variété de configurations, ainsi qu'avec SparkPost.

C'est tout pour le moment ! Bon envoi.

Rejoignez notre Newsletter.

Restez à jour avec Bird grâce aux mises à jour hebdomadaires dans votre boîte de réception.

En soumettant, vous acceptez que Bird puisse vous contacter au sujet de nos produits et services.

Vous pouvez vous désabonner à tout moment. Consultez la Déclaration de confidentialité de Bird pour plus de détails sur le traitement des données.

Rejoignez notre Newsletter.

Restez à jour avec Bird grâce aux mises à jour hebdomadaires dans votre boîte de réception.

En soumettant, vous acceptez que Bird puisse vous contacter au sujet de nos produits et services.

Vous pouvez vous désabonner à tout moment. Consultez la Déclaration de confidentialité de Bird pour plus de détails sur le traitement des données.

Rejoignez notre Newsletter.

Restez à jour avec Bird grâce aux mises à jour hebdomadaires dans votre boîte de réception.

En soumettant, vous acceptez que Bird puisse vous contacter au sujet de nos produits et services.

Vous pouvez vous désabonner à tout moment. Consultez la Déclaration de confidentialité de Bird pour plus de détails sur le traitement des données.

Pinterest logo
Uber logo
Logo Square
Logo Adobe
Meta logo
logo PayPal

Company

Paramètres de confidentialité

Newsletter

Restez à jour avec Bird grâce aux mises à jour hebdomadaires dans votre boîte de réception.

En soumettant, vous acceptez que Bird puisse vous contacter au sujet de nos produits et services.

Vous pouvez vous désabonner à tout moment. Consultez la Déclaration de confidentialité de Bird pour plus de détails sur le traitement des données.

Uber logo
Logo Square
Logo Adobe
Meta logo

Company

Paramètres de confidentialité

Newsletter

Restez à jour avec Bird grâce aux mises à jour hebdomadaires dans votre boîte de réception.

En soumettant, vous acceptez que Bird puisse vous contacter au sujet de nos produits et services.

Vous pouvez vous désabonner à tout moment. Consultez la Déclaration de confidentialité de Bird pour plus de détails sur le traitement des données.

Uber logo
Logo Adobe
Meta logo

Reach

Grow

Manage

Automate

Resources

Company

Newsletter

Restez à jour avec Bird grâce aux mises à jour hebdomadaires dans votre boîte de réception.

En soumettant, vous acceptez que Bird puisse vous contacter au sujet de nos produits et services.

Vous pouvez vous désabonner à tout moment. Consultez la Déclaration de confidentialité de Bird pour plus de détails sur le traitement des données.