S/MIME del 2: Signerat, förseglat och levererat via SparkPost

S/MIME del 2: Signerat, förseglat och levererat via SparkPost

S/MIME del 2: Signerat, förseglat och levererat via SparkPost

Dec 31, 2018

Publicerad av

Publicerad av

Bird

Bird

Kategori:

Kategori:

E-post

E-post

Ready to see Bird
in action?

Ready to see Bird
in action?

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

I denna del kommer vi att:

  • Installera några enkla kommandoradsverktyg för att signera och kryptera e-post

  • Hämta din avsändarnyckel / certifikat för signering

  • Skicka ett signerat meddelande via SparkPost och titta på det mottagna meddelandet

  • Alternativt kan du hämta ditt mottagarcertifikat för kryptering

  • Skicka ett signerat och krypterat meddelande via SparkPost och titta på det mottagna meddelandet

  • Prova det praktiska fristående verktyget "mimeshow" för att titta på e-postfilernas interna funktioner.

OK - nu sätter vi igång!

1. Installera verktygen

Den demonstration tools are in Github här, 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. Den 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

Du bör se den vänliga hjälptexten. Därefter behöver vi...

2. Hämta din avsändarnyckel / certifikat för signering

Om du redan har en nyckelfil för din sändaridentitet kan du hoppa vidare. Annars finns det två alternativ att välja mellan:

a) Egenhändigt signerad testnyckel/certifikat (ej externt giltigt)



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 denna. 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) Externt giltiga nycklar/certifikat



If you want to get externally valid keys / certificates that enable you to sign, thär’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 / Integritet 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.


Ange ett lösenord för att säkra .p12-filen:

Skapa separata filer med offentliga (.crt) och privata (.pem) nycklar

Oavsett om du använde a) eller b) har du nu en .p12-fil för din avsändaridentitet. Det är ett stort steg framåt - ta en kopp kaffe nu!

Nu måste vi generera separata filer med offentliga och privata nycklar på följande sätt - ersätt exemplet med din egen e-postadress. (Mac OSX och 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 flykt 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 Kommandoradsverktyg för Git, 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 Signera ett meddelande

Det finns redan en falsk nyckel/cert och e-postkällfil i testkatalogen för alice@example.com, så du kan få lite utdata även innan du har dina egna nycklar. Skriv bara följande:

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

Och du kommer att få:

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. Skicka ett signerat meddelande via SparkPost

Now let’s use a real sending domain, set up as per the SparkPost Ny användarhandbok. 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 …


Ange din API-nyckel:

export SPARKPOST_API_KEY=<<Put your API key here>>

Skicka e-postmeddelandet:

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


Du kommer att se:

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

Någon sekund senare anländer e-postmeddelandet till Bobs inbox. Thunderbird visar det med en röd prick på kuvertet, vilket indikerar en giltig avsändarsignatur.

Framgång! Drick upp kaffet, du har förtjänat det. Om du har problem kan du kontrollera att From: -adressen i e-postfilen matchar namnet på dina .crt- och .pem-filer.


4. Kryptering av meddelanden

För att kryptera ett meddelande behöver du mottagarens offentliga nyckel i certifikatform. Detta är en textfil som ser ut så här:

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

Det finns ett dummy-mottagarcertifikat för bob@example.com i testkatalogen, så att du kan öva med det innan du har ett riktigt certifikat:

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


Du kommer att få se:


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 krypterad message because it carries a lot of extra information as well as the scrambled message itself.


4.1 Skicka ett krypterat, signerat meddelande via 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.

Här är kommandot som ska skickas:

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


Jag förstår:

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

Mailet visas i Thunderbird med signaturikonen "röd punkt" och den krypterade ikonen "hänglås".


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 endast undertecknad messages display well in clients including Thunderbird and Gmail:


Notera att rullgardinsmenyn visar "Verifierad e-postadress".


Further thoughts & things to be aware of

Det här verktyget har en superenkel metod för att hämta de nödvändiga nycklarna - det letar bara efter namngivna filer i den aktuella katalogen. Mer komplexa arrangemang, som att hålla alla nycklar i en databas, skulle lätt kunna läggas till, men jag ville att koden skulle vara så enkel som möjligt.

Du kan inkludera andra mottagare med Cc: och Bcc: och de kommer att levereras; detta kan vara användbart för arkivändamål. Signerade meddelanden tas emot och kan visas av andra mottagare tillsammans med signaturen. Verktyget tar bort Bcc: -rubriken från det levererade meddelandet (som en stationär e-postklient skulle göra).

För att säkerställa att meddelanden passerar genom SparkPost oförändrade (vilket kan bryta signeringen), ställer verktyget in API-alternativ för "transaktionell" postning, med öppen och klickspårning inaktiverad.

Om du använder kryptering bör du tänka på att verktyget bara hämtar den enda To: -adressen för detta. De andra mottagarna kan bara avkoda meddelandetexten om de har To: mottagarens privata nyckel. Om du bara använder sekundära mottagare som ett register över leveranser, till exempel, kan det vara OK ändå.


Undertecknat, förseglat och levererat...jag är din

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: visning av MIME-delar med "mimeshow"

RFC822 MIME multipart file internals är ganska komplexa att läsa för människor. Projektet innehåller ett fristående verktyg för att göra detta enklare, kallat mimeshow.


Detta tar alla e-postfiler du har (inte bara S/MIME-filer) och visar den interna strukturen. Här är ett exempel:

./mimeshow.py testcases/img_and_attachment.eml


Du kommer att få se:



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


Du kommer att få se:

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


Äntligen...

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


Vi fick vår avsändarnyckel / certifikat för signering och skickade ett signerat meddelande via SparkPost. Vi fick ett mottagarcertifikat för kryptering och skickade sedan ett signerat och krypterat meddelande via SparkPost.


Slutligen provade vi det praktiska fristående verktyget "mimeshow" för att titta på e-postfilernas interna funktioner.


Det var allt för den här gången! Vi ses snart igen!

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

The right message -> till right person -> vid right time.

By clicking "See Bird" you agree to Bird's Meddelande om integritet.

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

The right message -> till right person -> vid right time.

By clicking "See Bird" you agree to Bird's Meddelande om integritet.