S/MIME Teil 2: Signiert, versiegelt und zugestellt durch SparkPost

S/MIME Teil 2: Signiert, versiegelt und zugestellt durch SparkPost

S/MIME Teil 2: Signiert, versiegelt und zugestellt durch SparkPost

Dec 31, 2018

Herausgegeben von

Herausgegeben von

Bird

Bird

-

Kategorie:

Kategorie:

E-Mail

E-Mail

Ready to see Bird
in action?

Ready to see Bird
in action?

S/MIME Part 2: Signed, Sealed, and Delivered through SparkPost

In dieser Folge werden wir:

  • Installieren Sie einige einfache Befehlszeilentools zum Signieren und Verschlüsseln von E-Mails

  • Holen Sie sich Ihren Absenderschlüssel / Ihr Zertifikat zum Signieren

  • Senden Sie eine signierte Nachricht über SparkPost, und sehen Sie sich die empfangene Nachricht an

  • Optional können Sie Ihr Empfängerzertifikat für die Verschlüsselung abrufen

  • Senden Sie eine signierte und verschlüsselte Nachricht über SparkPost, und sehen Sie sich die empfangene Nachricht an

  • Probieren Sie das praktische Standalone-Tool "mimeshow" aus, um die Interna von E-Mail-Dateien zu betrachten.

OK - fangen wir an!

1. Installieren Sie die Werkzeuge

Die demonstration tools are in Github hier, complete with installation instructions. You might notice the “build passing” logo – Travis and pytest automatically check the build status. Note these tools are not officially supported by SparkPost, but I’ve tried to make them robust and easy to use.

If you have some acquaintance with Python and pip, installation should feel pretty familiar. Die Pipfile takes care of the external dependencies automatically for you. Once it’s done, you can check everything’s installed by running

./sparkpostSMIME.py -h

Sie sollten den freundlichen Hilfetext sehen. Als nächstes müssen wir...

2. Holen Sie sich Ihren Absenderschlüssel / Ihr Zertifikat zum Signieren

Wenn Sie bereits eine Schlüsseldatei für Ihre sendende Identität haben, können Sie den Vorgang überspringen. Andernfalls haben Sie zwei Optionen zur Auswahl:

a) Selbstsignierter Testschlüssel / Zertifikat (nicht extern gültig)



If you’re just testing, you can make “self signed” certificates and keys for an email address using the command line tool openssl on Linux,  following a procedure such as diese. At the end of that process, you’ll have a smime.p12  file. Rename this file to match your sending identity, including the @ sign, for example, alice@example.com.p12 .

or

b) Extern gültige Schlüssel/Zertifikate



If you want to get externally valid keys / certificates that enable you to sign, thier’s a list of providers here. I found Comodo works well (free for non-commercial use), and it’s easier than the self-sign procedure above. Follow the sign-up process, receive your validation mail, and be sure to open the link in Firefox. Go to Firefox Preferences / Datenschutz and Security. Scroll to Certificates / View Certificates:


Select your certificate, and use the “Backup” option to save as a file in PKCS12 format (add the file extension .p12 to your filename) which carries the private key and the public certificate chain.


Geben Sie ein Passwort an, um die .p12-Datei zu sichern:

Erzeugen Sie separate öffentliche (.crt) und private (.pem) Schlüsseldateien

Unabhängig davon, ob Sie a) oder b) verwendet haben, verfügen Sie jetzt über eine .p12-Datei für Ihre Absenderidentität. Das ist ein großer Schritt nach vorn - trinken Sie jetzt einen Kaffee!

Nun müssen wir getrennte öffentliche und private Schlüsseldateien wie folgt erzeugen, wobei Sie die Beispiel-E-Mail-Adresse durch Ihre eigene ersetzen. (Mac OSX und Linux):

openssl pkcs12 -in alice\@example.com.p12 -clcerts -nokeys -out alice\@example.com.crt openssl pkcs12 -in alice\@example.com.p12 -nocerts -nodes -out alice\@example.com.pem

You’ll need to enter the password you provided earlier. Note those backslashes \ are used to Flucht the @ sign – not separating the names of a directory path (that’s a forward-slash / on Mac OSX and Linux).

If you’re using Windows, there are openssl implementations available such as the MINGW64 one built into the Git-Befehlszeilen-Tools, but I found it tended to just lock up. You’ll probably find it easier and quicker to do this on Linux and then copy your files over. Those same Git tools for Windows come with a nice ssh client you can use to login to a Linux box, such as an Amazon EC2 instance.


2.1 Signieren einer Nachricht

Es gibt bereits einen Dummy-Schlüssel/ein Dummy-Zertifikat und eine E-Mail-Quelldatei im Verzeichnis tests für alice@example.com, so dass Sie einige Ausgaben erhalten können, bevor Sie Ihre eigenen Schlüssel haben. Geben Sie einfach das Folgende ein:

cd tests ../sparkpostSMIME.py example_email1.eml --sign

Und du bekommst:

To: Bob <bob@example.com> From: Alice <alice@example.com> Subject: A message MIME-Version: 1.0 Content-Type: application/x-pkcs7-mime; smime-type=signed-data; name="smime.p7m" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="smime.p7m" MIIKXAYJKoZIhvcNAQcCoIIKTTCCCkkCAQExDzANBglghkgBZQMEAgEFADCCAQoGCSqGSIb3DQEH AaCB/ASB+VRvOiBCb2IgPGJvYkBleGFtcGxlLmNvbT4NCkZyb206IEFsaWNlIDxhbGljZUBleGFt : :

You can’t actually send emails from example.com via SparkPost unless you own that domain, so the next step is to use your own key and send a signed message from your own domain.


3. Senden Sie eine signierte Nachricht über SparkPost

Now let’s use a real sending domain, set up as per the SparkPost Neues Benutzerhandbuch. We have the sender certificate and key files in the current directory:

steve@thetucks.com.crt steve@thetucks.com.pem

The file tests/declaration.eml is included in the project. It’s just a text file, so you can customize the From: address to suit your own sending domain and the To: address to suit your test recipient. The beginning of the file looks like this:

To: Bob <bob.lumreeker@gmail.com> From: Steve <steve@thetucks.com> Subject: Here is our declaration MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Content-Language: en-GB When in the Course of human events it becomes necessary …


Legen Sie Ihren API-Schlüssel fest:

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:

Opened connection to https://api.sparkpost.com/api/v1 Sending tests/declaration.eml From: Steve <steve@thetucks.com> To: Bob  <bob.lumreeker@gmail.com> OK - in 1.15 seconds

Etwa eine Sekunde später trifft die E-Mail in Bobs inbox ein. Thunderbird zeigt sie mit einem roten Punkt auf dem Umschlag an, was auf eine gültige Absendersignatur hinweist.

Erfolg! Trinken Sie Ihren Kaffee aus, Sie haben ihn sich verdient. Wenn Sie Probleme haben, überprüfen Sie, ob die Absenderadresse in der E-Mail-Datei mit dem Namen Ihrer .crt- und .pem-Dateien übereinstimmt.


4. Verschlüsselung von Nachrichten

Um eine Nachricht zu verschlüsseln, benötigen Sie den öffentlichen Schlüssel des Empfängers in Form eines Zertifikats. Dies ist eine Textdatei, die wie folgt 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----- looks like random characters in here -----END CERTIFICATE-----

Im Verzeichnis tests befindet sich ein Dummy-Empfängerzertifikat für bob@example.com, mit dem Sie üben können, bevor Sie ein echtes Zertifikat erhalten:

cd tests ../sparkpostSMIME.py example_email1.eml --sign --encrypt


Sie werden sehen:


To: Bob <bob@example.com> From: Alice <alice@example.com> Subject: A message 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 :

You’ll notice the length of output is quite a bit longer than with an verschlüsselt message because it carries a lot of zusätzliche Informationen as well as the scrambled message itself.


4.1 Versenden einer verschlüsselten, signierten Nachricht über SparkPost

Let’s send an encrypted message to a real email address. You can follow the same process as before (self-signed or a provider such as Comodo) to get a public key / certificate for your own recipient addresses. You only need the .crt file – the recipient does not ever need to give you their private key (.p12 and .pem files).

I have the file bob.lumreeker@gmail.com.crt for my intended recipient – matching the From: address in my file.

Hier ist der zu sendende Befehl:

./sparkpostSMIME.py tests/declaration.eml --sign --encrypt --send_api


Ich verstehe:

Opened connection to https://api.sparkpost.com/api/v1 Sending tests/declaration.eml From: Steve <steve@thetucks.com> To: Bob <bob.lumreeker@gmail.com> OK - in 1.168 seconds

Die E-Mail wird in Thunderbird mit dem Signatursymbol "roter Punkt" und dem Verschlüsselungssymbol "Vorhängeschloss" angezeigt.


You can send complex HTML-based email with links and images just as easily, such as the one shown in Part 1. Some clients such as Thunderbird ask for permission to display external links and images within encrypted S/MIME messages, but Nur mit Unterschrift messages display well in clients including Thunderbird and Gmail:


Beachten Sie, dass die Dropdown-Liste "Verifizierte E-Mail-Adresse" anzeigt.


Further thoughts & things to be aware of

Dieses Tool verfolgt einen supereinfachen Ansatz, um die erforderlichen Schlüssel zu finden - es sucht einfach nach benannten Dateien im aktuellen Verzeichnis. Komplexere Arrangements, wie z. B. die Speicherung aller Schlüssel in einer Datenbank, könnten leicht hinzugefügt werden, aber ich wollte, dass der Code so einfach wie möglich ist.

Sie können andere Empfänger mit Cc: und Bcc: einschließen und sie werden zugestellt; dies kann für Archivierungszwecke nützlich sein. Signierte Nachrichten werden empfangen und können von anderen Empfängern mit der Signatur angezeigt werden. Das Tool entfernt den Bcc: Header aus der zugestellten Nachricht (wie es ein Desktop-Mail-Client tun würde).

Um sicherzustellen, dass die Nachrichten SparkPost unverändert durchlaufen (was die Signierung unterbrechen könnte), stellt das Tool API-Optionen für den "transaktionalen" Versand ein, bei dem die Verfolgung von Öffnungen und Klicks deaktiviert ist.

Wenn Sie eine Verschlüsselung verwenden, denken Sie daran, dass das Tool die einzige To: Adresse dafür ausliest. Die anderen Empfänger können den Nachrichtentext nur entschlüsseln, wenn sie über den privaten Schlüssel des Empfängers verfügen. Wenn Sie die sekundären Empfänger nur als Nachweis für die erfolgten Lieferungen verwenden, ist das vielleicht ohnehin in Ordnung.


Unterschrieben, versiegelt und geliefert...ich gehöre dir

That’s our quick overview of how to sign, seal and deliver S/MIME messages through SparkPost. Quick reminder: the demo project is in Github here, I’ve tried to make it easy to install and use.


Bonusfunktion: Anzeige von MIME-Teilen mit "mimeshow"

Die Interna der RFC822-MIME-Multipart-Dateien sind für den Menschen recht komplex zu lesen. Das Projekt umfasst ein eigenständiges Tool namens mimeshow, das diese Aufgabe erleichtert.


Dieses Programm nimmt alle E-Mail-Dateien, die Sie haben (nicht nur S/MIME-Dateien) und zeigt die interne Struktur an. Hier ist ein Beispiel:

./mimeshow.py testcases/img_and_attachment.eml


Sie werden sehen:



To Bob <bob.lumreeker@gmail.com>

From Steve <steve@thetucks.com> 

Subject 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"

You can also use as a filter to give a human-readable summary of sparkpostSMIME  output:

./sparkpostSMIME.py tests/declaration.eml --sign --encrypt | ./mimeshow.py


Sie werden sehen:

To Bob <bob.lumreeker@gmail.com> 

From Steve <steve@thetucks.com>

Subject 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...

To recap – we’ve installed some simple command-line tools for signing and encrypting email (the Github repo is here, complete with installation instructions).


Wir haben unseren Absenderschlüssel / unser Absenderzertifikat zum Signieren erhalten und eine signierte Nachricht über SparkPost versendet. Wir haben ein Empfängerzertifikat für die Verschlüsselung erhalten und dann eine signierte und verschlüsselte Nachricht über SparkPost gesendet.


Zum Schluss haben wir das praktische Standalone-Tool "mimeshow" ausprobiert, um die Interna der E-Mail-Dateien zu betrachten.


Das war's für heute! Bis bald!.

Your new standard in Marketing, Pay & Sales. It's Bird

The right message -> zum right person -> am right time.

By clicking "See Bird" you agree to Bird's Hinweis zum Datenschutz.

Your new standard in Marketing, Pay & Sales. It's Bird

The right message -> zum right person -> am right time.

By clicking "See Bird" you agree to Bird's Hinweis zum Datenschutz.