
In Teil 1 hatten wir eine kurze Einführung in S/MIME, wobei wir uns das Signieren und die Verschlüsselung unserer Nachrichtenströme über eine Reihe von E-Mail-Clients angesehen haben. S/MIME-Nachrichten können signiert werden (was den Nachweis der Identität des Absenders erbringt), verschlüsselt werden (um den Nachrichteninhalt geheim zu halten) oder beides.

In dieser Folge werden wir:
Einige einfache Befehlszeilentools zum Signieren und Verschlüsseln von E-Mails installieren
Ihren Sender-Schlüssel/Zertifikat zum Signieren erhalten
Eine signierte Nachricht über SparkPost senden und die empfangene Nachricht ansehen
Optional: Ihr Empfängerzertifikat für die Verschlüsselung erhalten
Eine signierte und verschlüsselte Nachricht über SparkPost senden und die empfangene Nachricht ansehen
Ein praktisches eigenständiges Tool „mimeshow“ ausprobieren, um sich die E-Mail-Dateiinterna anzusehen.
OK – los geht's!
1. Installiere die Tools
Die Demonstrationswerkzeuge befinden sich hier auf Github, komplett mit Installationsanweisungen. Sie könnten das „Build Passing“-Logo bemerken – Travis und pytest überprüfen den Build-Status automatisch. Beachten Sie, dass diese Werkzeuge nicht offiziell von SparkPost unterstützt werden, aber ich habe versucht, sie robust und einfach zu bedienen zu machen.
Wenn Sie etwas mit Python und pip vertraut sind, sollte die Installation ziemlich vertraut wirken. Die Pipfile kümmert sich automatisch um die externen Abhängigkeiten für Sie. Sobald es fertig ist, können Sie überprüfen, ob alles installiert ist, indem Sie
./sparkpostSMIME.py -h
ausführen. Sie sollten den freundlichen Hilfetext sehen. Als nächstes müssen wir…
2. Holen Sie sich Ihren Sender-Schlüssel / Ihr Zertifikat für die Signierung
3. Senden Sie eine unterschriebene Nachricht über SparkPost
Nun verwenden wir eine echte Absenderdomain, entsprechend dem SparkPost New User Guide eingerichtet. Wir haben die Absenderzertifikat- und Schlüsseldateien im aktuellen Verzeichnis:
steve@thetucks.com.crt steve@thetucks.com.pem
Die Datei tests/declaration.eml ist im Projekt enthalten. Es ist nur eine Textdatei, sodass Sie die From:-Adresse an Ihre eigene Absenderdomain und die To:-Adresse an Ihren Testempfänger anpassen können. Der Anfang der Datei sieht so aus:
To: Bob <bob.lumreeker@gmail.com> From: Steve <steve@thetucks.com> Subject: Hier ist unsere Erklärung MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Content-Language: en-GB Wenn im Verlauf menschlicher Ereignisse es notwendig wird …
Setzen Sie Ihren API-Schlüssel:
export SPARKPOST_API_KEY=<<Put your API key here>>
Senden Sie die E-Mail:
./sparkpostSMIME.py tests/declaration.eml --sign --send_api
Sie werden sehen:
Verbindung geöffnet zu https://api.sparkpost.com/api/v1 Tests/declaration.eml wird gesendet From: Steve <steve@thetucks.com> To: Bob <bob.lumreeker@gmail.com> OK - in 1,15 Sekunden
Ein oder zwei Sekunden später kommt die E-Mail in Bobs Inbox an. Thunderbird zeigt sie mit einem roten Punkt auf dem Umschlag an, was eine gültige Absender-Signatur anzeigt.

Erfolg! Beende deinen Kaffee, den hast du dir verdient. Wenn Sie Probleme haben, überprüfen Sie, ob die From:-Adresse in der E-Mail-Datei mit dem Namen Ihrer .crt- und .pem-Dateien übereinstimmt.
4. Nachrichten verschlüsseln
Um eine Nachricht zu verschlüsseln, benötigen Sie den öffentlichen Schlüssel Ihres Empfängers in Zertifikatsform. Dies ist eine Textdatei, die so aussieht:
Bag Attributes freundlicher Name: s COMODO CA Limited ID #2 lokale Schlüssel-ID: 32 84 AB 9C 56 5C 80 C6 89 4D 40 46 DD D4 7C 71 E8 CD ED C1 Betreff=/E-Mail-Adresse=bob.lumreeker@gmail.com Aussteller=/C=GB/ST=Greater Manchester/L=Salford/O=COMODO CA Limited/CN=COMODO RSA Client Authentication and Secure Email CA -----BEGIN CERTIFICATE----- sieht hier aus wie zufällige Zeichen -----END CERTIFICATE-----
Es gibt ein Dummy-Empfängerzertifikat für bob@example.com im Tests-Verzeichnis, sodass Sie damit üben können, bevor Sie ein echtes Zertifikat haben:
cd tests ../sparkpostSMIME.py example_email1.eml --sign --encrypt
Sie werden folgendes sehen:
Sie werden bemerken, dass die Ausgabe deutlich länger ist als bei einer verschlüsselten Nachricht, da sie viele zusätzliche Informationen sowie die verschlüsselte Nachricht selbst enthält.
4.1 Senden einer verschlüsselten, signierten Nachricht über SparkPost
Lasst uns eine verschlüsselte Nachricht an eine echte E-Mail-Adresse senden. Sie können denselben Prozess wie zuvor (selbstsigniert oder ein Anbieter wie Comodo) folgen, um einen öffentlichen Schlüssel / ein Zertifikat für Ihre eigenen Empfängeradressen zu erhalten. Sie benötigen nur die .crt Datei – der Empfänger muss Ihnen niemals seinen privaten Schlüssel (.p12 und .pem Dateien) geben.
Ich habe die Datei bob.lumreeker@gmail.com.crt für meinen vorgesehenen Empfänger – passend zur From: Adresse in meiner Datei.
Hier ist der Befehl zum Senden:
./sparkpostSMIME.py tests/declaration.eml --sign --encrypt --send_api
Ich sehe:
Verbindung zu https://api.sparkpost.com/api/v1 geöffnet Sende tests/declaration.eml From: Steve <steve@thetucks.com> To: Bob <bob.lumreeker@gmail.com> OK - in 1.168 Sekunden
Die Mail erscheint in Thunderbird mit dem „roten Punkt“ Signatursymbol und dem „Schloss“ Verschlüsselungssymbol.

Sie können komplexe HTML-basierte E-Mails mit Links und Bildern ebenso leicht senden, wie in Teil 1 gezeigt. Einige Clients wie Thunderbird fragen um Erlaubnis, externe Links und Bilder in verschlüsselten S/MIME-Nachrichten anzuzeigen, aber nur-signierte Nachrichten werden gut in Clients wie Thunderbird und Gmail angezeigt:


Beachten Sie, dass die Dropdown-Schaltfläche „Verifizierte E-Mail-Adresse“ anzeigt.
Weitere Gedanken & Dinge, die zu beachten sind
Dieses Tool verfolgt einen super einfachen Ansatz, um die benötigten Schlüssel abzurufen – es sucht einfach nach benannten Dateien im aktuellen Verzeichnis. Komplexere Anordnungen, wie z.B. das Halten aller Schlüssel in einer Datenbank, könnten leicht hinzugefügt werden, aber ich wollte, dass der Code so einfach wie möglich bleibt.
Sie können andere Empfänger mit Cc: und Bcc: einbeziehen und sie werden zugestellt; dies könnte zu Archivierungszwecken nützlich sein. Empfangene signierte Nachrichten können von anderen Empfängern zusammen mit der Signatur angezeigt werden. Das Tool entfernt die Bcc:-Kopfzeile aus der zugestellten Nachricht (wie es ein Desktop-Mail-Client tun würde).
Um sicherzustellen, dass Nachrichten unverändert durch SparkPost gehen (was die Signatur brechen könnte), setzt das Tool API-Optionen für „transaktionales“ Mailing, wobei das Öffnen und das Klick-Tracking deaktiviert sind.
Wenn Sie Verschlüsselung verwenden, beachten Sie, dass das Tool die einzelne To:-Adresse dafür aufnimmt. Die anderen Empfänger können den Nachrichteninhalt nur entschlüsseln, wenn sie den privaten Schlüssel des To:-Empfängers haben. Wenn Sie beispielsweise sekundäre Empfänger nur als Protokoll der erfolgten Zustellungen verwenden, könnte das ohnehin in Ordnung sein.
Signiert, versiegelt, geliefert... ich bin dein
Das ist unser kurzer Überblick darüber, wie man S/MIME-Nachrichten über SparkPost signiert, versiegelt und sendet. Kurze Erinnerung: Das Demo-Projekt ist in Github hier, ich habe versucht, es einfach zu installieren und zu verwenden.
Bonusfunktion: Anzeigen von MIME-Teilen mit „mimeshow“
RFC822 MIME Multipart-Dateien sind für Menschen recht komplex zu lesen. Das Projekt beinhaltet ein eigenständiges Tool, um dies zu erleichtern, genannt mimeshow.
Dieses Tool kann jede E-Mail-Datei, die Sie haben (nicht nur S/MIME-Dateien), nehmen und die interne Struktur anzeigen. Hier ist ein Beispiel:
./mimeshow.py testcases/img_and_attachment.eml
Sie werden sehen:
Sie können es auch als Filter verwenden, um eine menschenlesbare Zusammenfassung des sparkpostSMIME-Ausgangs zu geben:
./sparkpostSMIME.py tests/declaration.eml --sign --encrypt | ./mimeshow.py
Sie werden sehen:
Endlich…
Zusammenfassung – wir haben einige einfache Befehlszeilen-Tools zum Signieren und Verschlüsseln von E-Mails installiert (das Github-Repo ist hier, komplett mit Installationsanweisungen).
Wir haben unseren Sender-Schlüssel / unser Zertifikat zum Signieren erhalten und eine signierte Nachricht über SparkPost gesendet. Wir haben ein Empfängerzertifikat zur Verschlüsselung erhalten und dann eine signierte und verschlüsselte Nachricht über SparkPost gesendet.
Zuletzt haben wir das praktische eigenständige Tool „mimeshow“ ausprobiert, um uns die E-Mail-Dateiinternas anzusehen.
Das war's für den Moment! Bis bald!