
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 sur Github ici, complets avec les 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 supportés 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 prend en charge les dépendances externes automatiquement pour vous. Une fois terminé, vous pouvez vérifier que tout est installé en exécutant
./sparkpostSMIME.py -h
Vous devriez voir le texte d'aide sympathique. Ensuite, nous devons…
2. Obtenez votre clé / certificat d'expéditeur pour la signature
3. Envoyer un message signé via SparkPost
Utilisons maintenant un domaine d'envoi réel, configuré selon le Nouveau Guide de l'Utilisateur de SparkPost. Nous avons les fichiers de certificat et de clé de l'expéditeur dans le répertoire actuel :
steve@thetucks.com.crt steve@thetucks.com.pem
Le fichier tests/declaration.eml est inclus dans le projet. C'est juste un fichier texte, vous pouvez donc personnaliser l'adresse From : pour qu'elle corresponde à votre propre domaine d'envoi et l'adresse To : pour qu'elle corresponde à votre destinataire de test. Le début du fichier ressemble à ceci :
To : Bob <bob.lumreeker@gmail.com> From : Steve <steve@thetucks.com> Subject : 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 Quand au cours des événements humains, il devient nécessaire de...
Définissez votre clé API :
export SPARKPOST_API_KEY=<<Mettez votre clé API ici>>
Envoyez l'email :
./sparkpostSMIME.py tests/declaration.eml --sign --send_api
Vous verrez :
Connexion ouverte à https://api.sparkpost.com/api/v1 Envoi de tests/declaration.eml From : Steve <steve@thetucks.com> To : Bob <bob.lumreeker@gmail.com> OK - en 1,15 secondes
Une seconde plus tard, l'email arrive dans l'Inbox 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 mérité. Si vous rencontrez des problèmes, vérifiez que votre adresse From : dans le fichier de l'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----- ressemble à des caractères aléatoires ici -----END CERTIFICATE-----
Il y a un certificat de destinataire fictif pour bob@example.com dans le répertoire de tests, donc vous pouvez vous exercer avec avant d'avoir un vrai certificat :
cd tests ../sparkpostSMIME.py example_email1.eml --sign --encrypt
Vous verrez :
Vous remarquerez que la longueur du résultat est beaucoup plus longue qu’avec un message chiffré car il 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 vraie adresse e-mail. Vous pouvez suivre le même processus qu'auparavant (auto-signé ou un fournisseur tel que Comodo) pour obtenir une clé publique / certificat pour vos propres adresses de destinataires. Vous n'avez besoin que 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 From: dans mon fichier.
Voici la commande à envoyer :
./sparkpostSMIME.py tests/declaration.eml --sign --encrypt --send_api
Je vois :
Connexion ouverte à https://api.sparkpost.com/api/v1 Envoi tests/declaration.eml From: Steve <steve@thetucks.com> To: Bob <bob.lumreeker@gmail.com> OK - en 1.168 secondes
Le mail apparaît dans Thunderbird avec l'icône de signature « point rouge » et l'icône de verrouillage chiffré.

Vous pouvez envoyer des emails complexes basés sur HTML avec des liens et des images tout aussi facilement, comme celui montré dans la Partie 1. Certains clients tels que Thunderbird demandent la permission pour afficher des liens externes et des images dans des messages S/MIME chiffrés, mais les messages signés uniquement s'affichent bien dans des clients y compris Thunderbird et Gmail :


Notez que le menu déroulant montre « 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 rapide aperçu de comment signer, sceller et livrer des messages S/MIME via SparkPost. Bref rappel : le projet démo est sur Github ici, 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.
Cela prend tous les fichiers d'email que vous avez (pas seulement ceux S/MIME) et montre la structure interne. Voici un exemple :
./mimeshow.py testcases/img_and_attachment.eml
Vous verrez :
Vous pouvez également l'utiliser comme un filtre pour donner un résumé lisible par les humains de la sortie sparkpostSMIME :
./sparkpostSMIME.py tests/declaration.eml --sign --encrypt | ./mimeshow.py
Vous verrez :
Enfin…
Pour récapituler – nous avons installé quelques outils simples en ligne de commande pour signer et chiffrer les e-mails (le dépôt Github est ici, avec des instructions d'installation).
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 d'e-mail internes.
C'est tout pour le moment ! À bientôt !