
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.
Business in a box.
Entdecken Sie unsere Lösungen.
Sprechen Sie mit unserem Vertriebsteam

In dieser Folge werden wir:
Einige einfache Befehlszeilentools zum Signieren und Verschlüsseln von E-Mails installieren
Ihren Sender-Schlüssel / Ihr Zertifikat zum Signieren erhalten
Eine signierte Nachricht über SparkPost senden und die empfangene Nachricht ansehen
Optional Ihr Empfängerzertifikat zur 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 das Innere einer E-Mail-Datei anzusehen.
OK – lass uns anfangen!
1. Installiere die Tools
Die Demonstrationswerkzeuge befinden sich in Github hier, komplett mit Installationsanweisungen. Sie könnten das „build passing“ Logo bemerken – Travis und pytest überprüfen automatisch den Build-Status. 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 recht vertraut wirken. Das Pipfile kümmert sich automatisch um die externen Abhängigkeiten. 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
Jetzt verwenden wir eine echte Absenderdomain, die gemäß dem SparkPost New User Guide eingerichtet wurde. Wir haben die Senderzertifikats- 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> Betreff: 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 es im Lauf menschlicher Ereignisse notwendig wird …
Setzen Sie Ihren API-Schlüssel:
export SPARKPOST_API_KEY=<<Fügen Sie hier Ihren API-Schlüssel ein>>
Senden Sie die E-Mail:
./sparkpostSMIME.py tests/declaration.eml --sign --send_api
Folgendes wird angezeigt:
Geöffnete Verbindung zu https://api.sparkpost.com/api/v1 Senden tests/declaration.eml From: Steve <steve@thetucks.com> To: Bob <bob.lumreeker@gmail.com> OK - in 1.15 Sekunden
Ein oder zwei Sekunden später trifft die E-Mail im Posteingang von Bob ein. Thunderbird zeigt sie mit einem roten Punkt auf dem Umschlag an, was auf eine gültige Absenderunterschrift hinweist.

Erfolg! Beenden Sie Ihren Kaffee, Sie haben es sich 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 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----- sieht aus wie zufällige Zeichen hier -----END CERTIFICATE-----
Es gibt ein Dummy-Empfängerzertifikat für bob@example.com im Verzeichnis tests, sodass Sie damit üben können, bevor Sie ein echtes Zertifikat haben:
cd tests ../sparkpostSMIME.py example_email1.eml --sign --encrypt
Sie werden sehen:
An: Bob <bob@example.com> Von: Alice <alice@example.com> Betreff: Eine Nachricht MIME-Version: 1.0 Content-Type: application/pkcs7-mime; smime-type=enveloped-data; name=smime.p7m Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=smime.p7m MIIRwQYJKoZIhvcNAQcDoIIRsjCCEa4CAQAxggKlMIICoQIBADCBijCBhDELMAkG :
Sie werden bemerken, dass die Länge der Ausgabe deutlich länger ist als bei einer verschlüsselten Nachricht, da sie viel zusätzliche Informationen sowie die verschlüsselte Nachricht selbst enthält.
4.1 Versenden einer verschlüsselten, signierten Nachricht über SparkPost
Lassen Sie uns eine verschlüsselte Nachricht an eine echte E-Mail-Adresse senden. Sie können denselben Prozess wie zuvor verwenden (selbstsigniert oder ein Anbieter wie Comodo), 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 beabsichtigten Empfänger – passend zur Von:-Adresse in meiner Datei.
Hier ist der Befehl zum Senden:
./sparkpostSMIME.py tests/declaration.eml --sign --encrypt --send_api
Ich sehe:
Geöffnete Verbindung zu https://api.sparkpost.com/api/v1 Tests/declaration.eml gesendet Von: Steve <steve@thetucks.com> An: Bob <bob.lumreeker@gmail.com> OK - in 1.168 Sekunden
Die Mail erscheint in Thunderbird mit dem „roten Punkt“ Signatur-Icon und dem „Vorhängeschloss“ Verschlüsselungs-Icon.

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


Beachten Sie, dass das Dropdown-Feld „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 enthält ein eigenständiges Tool, um dies zu erleichtern, genannt mimeshow.
Dieses nimmt alle E-Mail-Dateien, die Sie haben (nicht nur S/MIME-Dateien), und zeigt die interne Struktur. Hier ist ein Beispiel:
./mimeshow.py testcases/img_and_attachment.eml
Sie werden sehen:
An Bob <bob.lumreeker@gmail.com>
Von Steve <steve@thetucks.com>
Betreff Testing attachments etc
MIME-Version 1.0
Content-Type multipart/mixed; boundary="------------7D48652042860D0098C65210"
Content-Language en-GB
Content-Type multipart/alternative; boundary="------------58C0BF87598336550D70EB95"
Content-Type text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding 7bit
Content-Transfer-Encoding quoted-printable
Content-Type text/html; charset="utf-8"
Content-Type application/pdf; name="sparkpost-datasheet-tam-technical-account-management.pdf"
Content-Transfer-Encoding base64
Content-Disposition attachment; filename="sparkpost-datasheet-tam-technical-account-management.pdf"
Sie können es auch als Filter verwenden, um eine menschenlesbare Zusammenfassung der sparkpostSMIME-Ausgabe zu geben:
./sparkpostSMIME.py tests/declaration.eml --sign --encrypt | ./mimeshow.py
Sie werden sehen:
An Bob <bob.lumreeker@gmail.com>
Von Steve <steve@thetucks.com>
Betreff Here is our declaration
Content-Language en-GB
MIME-Version 1.0
Content-Type application/pkcs7-mime; smime-type=enveloped-data; name=smime.p7m
Content-Transfer-Encoding base64
Content-Disposition attachment; filename=smime.p7m
Endlich…
Um zusammenzufassen – wir haben einige einfache Kommandozeilen-Tools installiert, um E-Mails zu signieren und zu verschlüsseln (das Github-Repo ist hier, komplett mit Installationsanleitungen).
Wir haben unseren Sender-Schlüssel/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 internen Daten von E-Mail-Dateien anzusehen.
Das war's für jetzt! Bis bald!.