S/MIME Partie 2 : signé, scellé et livré par SparkPost
Oiseau
31 déc. 2018
1 min read

Points Clés
Premise : La partie 2 passe de la théorie S/MIME à la pratique — démontrant comment signer numériquement et chiffrer des emails en utilisant SparkPost comme plateforme de livraison.
Objectif : Équiper les développeurs d'un flux de travail léger en ligne de commande pour signer les messages sortants, vérifier les signatures, et (optionnellement) chiffrer le contenu pour des destinataires spécifiques.
Points forts :
Installation : Installez les outils de démonstration open-source à partir de GitHub (avec des vérifications automatisées Travis + pytest). Le Pipfile gère toutes les dépendances Python.
Clés de l'expéditeur :
Créez un certificat auto-signé ou délivré par une AC (
.p12) pour votre identité email.Divisez-le en fichiers privés (
.pem) et publics (.crt) pour l'utilisation par l'outil de signature.
Signature :
Utilisez le script
sparkpostSMIME.pyinclus pour signer les messages de test (par exemple,tests/declaration.eml).Confirmez visuellement les signatures dans des clients comme Thunderbird (icône point rouge).
Chiffrement :
Obtenez le certificat public de chaque destinataire (
.crt).Exécutez à nouveau l'outil pour produire un message signé + chiffré.
Les destinataires peuvent vérifier et déchiffrer en utilisant leurs clés privées.
Livraison via SparkPost :
Configurez un domaine d'envoi valide et une clé API.
Envoyez les messages via l'API de SparkPost avec le suivi désactivé pour préserver l'intégrité.
Utilitaire bonus – mimeshow :
Affiche la structure MIME RFC822 lisible pour les humains pour le débogage ou l'inspection.
Conseils pratiques :
Maintenez les noms de fichiers alignés avec l'adresse From :
Évitez de modifier le corps des messages après signature.
Utilisez le Cci uniquement pour des copies archivées — ces destinataires ne peuvent pas déchiffrer si le courrier est chiffré pour une seule adresse To.
Points forts des Q&A
Pourquoi utiliser la signature S/MIME?
Il authentifie l'expéditeur et garantit l'intégrité du message — les clients comme Thunderbird affichent un indicateur visuel lorsque la signature est valide.
Comment obtenir mon sender certificate ?
Soit auto-signer via OpenSSL (pour les tests) soit obtenir un certificat de confiance auprès de fournisseurs tels que Comodo (gratuit pour un usage non commercial).
Can I encrypt messages for multiple recipients?
Seulement si vous avez la clé publique de chaque destinataire. Le script de démonstration chiffre par défaut à l'adresse unique "To".
Quelles protections empêchent les signatures de se briser pendant le transit ?
L'outil configure les options de l'API SparkPost pour l'envoi transactionnel et désactive le suivi des ouvertures/cliqueurs, de sorte que la charge utile passe sans être modifiée.
Quel est le rôle de mimeshow?
Il analyse les fichiers email bruts et imprime leur structure multipartie — utile pour inspecter les signatures S/MIME, pièces jointes et en-têtes.
Quelle est la prochaine étape dans la série ?
La partie 3 étend ces capacités S/MIME aux plateformes de messagerie sécurisées sur site telles que PowerMTA et Momentum.
Dans la première partie, nous avons effectué un rapide tour d'horizon de S/MIME, en examinant la signature et le cryptage de nos flux de messages à travers une gamme de clients de messagerie. Les messages S/MIME peuvent être signés (fournissant une preuve de l'identité de l'expéditeur), cryptés (gardant le corps du message secret), ou les deux.

Dans cette partie, nous allons :
Installer quelques outils de ligne de commande simples pour signer et chiffrer les emails
Obtenir votre clé/certificat d'expéditeur pour la signature
Envoyer un message signé via SparkPost, et examiner le message reçu
Obtenir éventuellement le certificat de votre destinataire pour le chiffrement
Envoyer un message signé et chiffré via SparkPost, et examiner le message reçu
Essayer un outil autonome pratique "mimeshow" pour examiner l'intérieur des fichiers email.
D'accord – commençons !
1. Installer les outils
Les outils de démonstration sont disponibles sur GitHub, complets avec des instructions d'installation. Vous pourriez remarquer le logo “build passing” – Travis et pytest vérifient automatiquement le statut de la construction. Notez que ces outils ne sont pas officiellement soutenus par SparkPost, mais j'ai essayé de les rendre robustes et faciles à utiliser.
Si vous avez une certaine connaissance de Python et pip, l'installation devrait vous sembler assez familière. Le Pipfile s'occupe automatiquement des dépendances externes pour vous. Une fois que c'est terminé, vous pouvez vérifier que tout est installé en exécutant.
Vous devriez voir le texte d'aide amical. Ensuite, nous devons…
2. Obtenez votre clé / certificat d'expéditeur pour la signature
3. Envoyer un message signé via SparkPost
Maintenant, utilisons un véritable domaine d'envoi, configuré selon le Nouveau Guide d'Utilisateur de SparkPost. Nous avons le certificat de l'expéditeur et les fichiers clés dans le répertoire actuel :
Le fichier tests/declaration.eml est inclus dans le projet. C’est juste un fichier texte, vous pouvez donc personnaliser l'adresse De : pour convenir à votre propre domaine d'envoi et l'adresse À : pour convenir à votre destinataire de test. Le début du fichier ressemble à ceci :
À : Bob <bob.lumreeker@gmail.com> De : Steve <steve@thetucks.com> Sujet : Voici notre déclaration MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Content-Language: en-GB Lorsque, au cours des événements humains, il devient nécessaire…
Définissez votre clé API :
Envoyez l'email :
Vous verrez :
Connexion ouverte à https://api.sparkpost.com/api/v1 Envoi tests/declaration.eml De : Steve <steve@thetucks.com> À : Bob <bob.lumreeker@gmail.com> OK - en 1,15 secondes
Une seconde ou deux plus tard, l'email arrive dans la boîte de réception de Bob. Thunderbird l'affiche avec un point rouge sur l'enveloppe, indiquant une signature d'expéditeur valide.

Succès ! Finissez ce café, vous l'avez bien mérité. Si vous avez des difficultés, vérifiez que votre adresse De : dans le fichier email correspond au nom de vos fichiers .crt et .pem.
4. Chiffrement des messages
Pour chiffrer un message, vous avez besoin de la clé publique de votre destinataire sous forme de certificat. Il s'agit d'un fichier texte qui ressemble à ceci :
Bag Attributes friendlyName: s COMODO CA Limited ID #2 localKeyID: 32 84 AB 9C 56 5C 80 C6 89 4D 40 46 DD D4 7C 71 E8 CD ED C1 subject=/emailAddress=bob.lumreeker@gmail.com issuer=/C=GB/ST=Greater Manchester/L=Salford/O=COMODO CA Limited/CN=COMODO RSA Client Authentication and Secure Email CA -----BEGIN CERTIFICATE----- semble contenir des caractères aléatoires ici -----END CERTIFICATE-----
Il y a un certificat de destinataire factice pour bob@example.com dans le répertoire de tests, donc vous pouvez vous entraîner avec avant d'avoir un certificat réel :
Vous verrez :
Vous remarquerez que la longueur de la sortie est assez longue par rapport à un message chiffré car elle contient beaucoup d' informations supplémentaires ainsi que le message brouillé lui-même.
4.1 Envoi d'un message chiffré et signé via SparkPost
Envoyons un message chiffré à une adresse e-mail réelle. Vous pouvez suivre le même processus qu'auparavant (auto-signé ou via un fournisseur tel que Comodo) pour obtenir une clé publique / certificat pour vos propres adresses de destinataire. Vous avez seulement besoin du fichier .crt – le destinataire ne doit jamais vous donner sa clé privée (.p12 et .pem fichiers).
J'ai le fichier bob.lumreeker@gmail.com.crt pour mon destinataire prévu – correspondant à l'adresse De : dans mon fichier.
Voici la commande pour envoyer :
Je vois :
Connexion ouverte à https://api.sparkpost.com/api/v1 Envoi tests/declaration.eml De : Steve <steve@thetucks.com> À : Bob <bob.lumreeker@gmail.com> OK - en 1.168 secondes
Le courrier apparaît dans Thunderbird avec l'icône de signature « point rouge » et l'icône chiffrée « cadenas ».

Vous pouvez envoyer des e-mails complexes basés sur HTML avec des liens et des images aussi facilement, comme celui montré dans la Partie 1. Certains clients comme Thunderbird demandent l'autorisation d'afficher des liens externes et des images dans les messages S/MIME chiffrés, mais les messages signés uniquement s'affichent bien dans les clients y compris Thunderbird et Gmail :


Notez que le menu déroulant affiche « Adresse e-mail vérifiée ».
Réflexions supplémentaires et choses à prendre en compte
Cet outil adopte une approche ultra-simple pour récupérer les clés nécessaires – il cherche simplement des fichiers nommés dans le répertoire actuel. Des arrangements plus complexes, tels que la conservation de toutes les clés dans une base de données, pourraient facilement être ajoutés, mais je voulais que le code soit aussi simple que possible.
Vous pouvez inclure d'autres destinataires avec Cc: et Bcc: et ils seront livrés ; cela pourrait être utile pour des fins d'archivage. Les messages signés sont reçus et peuvent être affichés par d'autres destinataires avec la signature complète. L'outil retire l'en-tête Bcc: du message livré (comme le ferait un client de messagerie de bureau).
Pour garantir que les messages passent par SparkPost sans changements (ce qui pourrait casser la signature), l'outil définit les options API pour les envois « transactionnels », avec le suivi de l'ouverture et du clic désactivé.
Si vous utilisez le cryptage, gardez à l'esprit que l'outil récupère l'adresse To: unique pour cela. Les autres destinataires ne peuvent décoder le corps du message que s'ils possèdent la clé privée du destinataire To:. Si vous n’utilisez que des destinataires secondaires pour garder trace des livraisons effectuées, par exemple, cela peut convenir malgré tout.
Signé, scellé, livré…Je suis à toi
C'est notre aperçu rapide de la manière de signer, sceller et envoyer des messages S/MIME via SparkPost. Petit rappel : le projet de démonstration est disponible sur GitHub, et j’ai essayé de le rendre facile à installer et à utiliser.
Fonctionnalité bonus : affichage des parties MIME avec "mimeshow"
Les fichiers multiparties MIME RFC822 sont assez complexes à lire pour les humains. Le projet comprend un outil autonome pour rendre cela plus facile, appelé mimeshow.
Ceci prend tous les fichiers d'emails que vous avez (pas seulement ceux en S/MIME) et montre la structure interne. Voici un exemple :
Vous verrez :
Vous pouvez également l'utiliser comme filtre pour donner un résumé lisible par un humain de la sortie de sparkpostSMIME :
Vous verrez :
Enfin…
Pour récapituler – nous avons installé quelques outils simples en ligne de commande pour signer et chiffrer les emails (le dépôt GitHub comprend des instructions d'installation complètes).
Nous avons obtenu notre clé / certificat d'expéditeur pour signer, et envoyé un message signé via SparkPost. Nous avons obtenu un certificat de destinataire pour le chiffrement, puis envoyé un message signé et chiffré via SparkPost.
Enfin, nous avons essayé l'outil autonome pratique « mimeshow » pour examiner les fichiers internes des emails.
C'est tout pour le moment ! Dans notre prochain épisode, nous vous montrerons comment étendre ces capacités S/MIME à des plateformes d'email sécurisées sur site comme PowerMTA et Momentum. À bientôt!






