
In deel 1 hebben we een snelle rondleiding gehad van S/MIME, waarbij we keken naar het ondertekenen en versleutelen van onze berichtenstromen over een reeks e-mailclients. S/MIME-berichten kunnen worden ondertekend (wat bewijs geeft van de identiteit van de afzender), versleuteld (waardoor de inhoud van het bericht geheim blijft), of beide.
Business in a box.
Ontdek onze oplossingen.
Praat met ons verkoopteam

In deze aflevering zullen we:
Enkele eenvoudige commandoregeltools installeren voor het ondertekenen en versleutelen van e-mail
Uw zendersleutel / certificaat voor ondertekening verkrijgen
Een ondertekend bericht verzenden via SparkPost en het ontvangen bericht bekijken
Optioneel, uw ontvangerscertificaat voor versleuteling verkrijgen
Een ondertekend en versleuteld bericht verzenden via SparkPost en het ontvangen bericht bekijken
Een handige standalone tool "mimeshow" proberen om de interne bestanden van e-mail te bekijken.
OK – laten we beginnen!
1. Installeer de tools
De demonstratietools staan op Github hier, compleet met installatie-instructies. Je zult misschien het “build passing” logo opmerken – Travis en pytest controleren automatisch de buildstatus. Let op, deze tools worden niet officieel ondersteund door SparkPost, maar ik heb geprobeerd ze robuust en gebruiksvriendelijk te maken.
Als je enige bekendheid hebt met Python en pip, zou de installatie vrij vertrouwd moeten aanvoelen. De Pipfile zorgt automatisch voor de externe afhankelijkheden. Zodra het klaar is, kun je controleren of alles geïnstalleerd is door het volgende te runnen
./sparkpostSMIME.py -h
Je zou de vriendelijke helpttekst moeten zien. Vervolgens moeten we…
2. Haal uw verzendersleutel / certificaat op voor ondertekening
3. Verstuur een ondertekend bericht via SparkPost
Laten we nu een echt verzenddomein gebruiken, ingericht volgens de SparkPost Nieuwe Gebruikershandleiding. We hebben de verzendcertificaat- en sleutelbestanden in de huidige directory:
steve@thetucks.com.crt steve@thetucks.com.pem
Het bestand tests/declaration.eml is opgenomen in het project. Het is gewoon een tekstbestand, zodat u het Van:-adres kunt aanpassen aan uw eigen verzenddomein en het Aan:-adres aan uw testontvanger. Het begin van het bestand ziet er als volgt uit:
Aan: Bob <bob.lumreeker@gmail.com> Van: Steve <steve@thetucks.com> Onderwerp: Hier is onze verklaring MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Content-Language: en-GB Wanneer het in de loop der menselijke gebeurtenissen noodzakelijk wordt...
Stel uw API-sleutel in:
export SPARKPOST_API_KEY=<<Zet hier uw API-sleutel>>
Verstuur de e-mail:
./sparkpostSMIME.py tests/declaration.eml --sign --send_api
U zult zien:
Verbonden met https://api.sparkpost.com/api/v1 Verzending van tests/declaration.eml Van: Steve <steve@thetucks.com> Aan: Bob <bob.lumreeker@gmail.com> OK - in 1,15 seconden
Een seconde later komt de e-mail aan in Bob’s inbox. Thunderbird toont deze met een rode stip op de envelop, wat duidt op een geldige afzendersignatuur.

Succes! Maak je koffie af, je hebt het verdiend. Als je problemen ondervindt, controleer dan of je Van:-adres in het e-mailbestand overeenkomt met de naam van je .crt- en .pem-bestanden.
4. Berichten versleutelen
Om een bericht te versleutelen, heb je de openbare sleutel van je ontvanger nodig in certificaatvorm. Dit is een tekstbestand dat er als volgt uitziet:
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----- lijkt op willekeurige tekens hier -----END CERTIFICATE-----
Er is een dummy-ontvangerscertificaat voor bob@example.com in de tests-directory, zodat je ermee kunt oefenen voordat je een echt certificaat hebt:
cd tests ../sparkpostSMIME.py example_email1.eml --sign --encrypt
Je ziet:
Aan: Bob <bob@example.com> Van: Alice <alice@example.com> Onderwerp: Een bericht 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 :
Je zult merken dat de lengte van de uitvoer aanzienlijk langer is dan bij een versleuteld bericht omdat het veel extra informatie bevat, evenals het versleutelde bericht zelf.
4.1 Verzenden van een versleuteld, ondertekend bericht via SparkPost
Laten we een versleuteld bericht naar een echt e-mailadres sturen. Je kunt hetzelfde proces als voorheen volgen (zelfondertekend of een provider zoals Comodo) om een openbare sleutel/certificaat voor je eigen ontvangeradressen te krijgen. Je hebt alleen het .crt-bestand nodig - de ontvanger hoeft je niet ooit hun privésleutel (.p12 en .pem-bestanden) te geven.
Ik heb het bestand bob.lumreeker@gmail.com.crt voor mijn beoogde ontvanger - overeenkomend met het Van: adres in mijn bestand.
Hier is het commando om te verzenden:
./sparkpostSMIME.py tests/declaration.eml --sign --encrypt --send_api
Ik zie:
Verbonden met https://api.sparkpost.com/api/v1 Verzenden tests/declaration.eml Van: Steve <steve@thetucks.com> Aan: Bob <bob.lumreeker@gmail.com> OK - in 1.168 seconden
De e-mail verschijnt in Thunderbird met het “rode puntje” handtekeningpictogram en het “slot” versleutelingspictogram.

Je kunt net zo gemakkelijk complexe HTML-gebaseerde e-mails met links en afbeeldingen verzenden, zoals die in Deel 1. Sommige clients zoals Thunderbird vragen om toestemming om externe links en afbeeldingen weer te geven binnen versleutelde S/MIME-berichten, maar alleen ondertekende berichten worden goed weergegeven in clients zoals Thunderbird en Gmail:


Let op de vervolgkeuzelijst toont “Geverifieerd e-mailadres”.
Verdere gedachten en zaken om op te letten
Dit hulpmiddel neemt een super-simpele benadering bij het ophalen van de noodzakelijke sleutels - het zoekt gewoon naar benoemde bestanden in de huidige directory. Meer complexe arrangementen, zoals het opslaan van alle sleutels in een database, kunnen eenvoudig worden toegevoegd, maar ik wilde dat de code zo eenvoudig mogelijk zou zijn.
U kunt andere ontvangers opnemen met Cc: en Bcc: en ze zullen worden afgeleverd; dit kan nuttig zijn voor archiveringsdoeleinden. Ondertekende berichten worden ontvangen en kunnen door andere ontvangers worden weergegeven, compleet met de handtekening. Het hulpmiddel verwijdert de Bcc:-kop van het afgeleverde bericht (zoals een desktop e-mailclient zou doen).
Om ervoor te zorgen dat berichten ongewijzigd door SparkPost worden verzonden (wat ondertekening kan verbreken), stelt het hulpmiddel API-opties in voor "transactional" mailing, met tracking van openen en klikken uitgeschakeld.
Als u encryptie gebruikt, houd er dan rekening mee dat het hulpmiddel het enkele To:-adres hiervoor oppikt. De andere ontvangers kunnen de inhoud van het bericht alleen decoderen als ze de private sleutel van de To:-ontvanger hebben. Als u bijvoorbeeld secundaire ontvangers alleen als registratie van gemaakte leveringen gebruikt, kan dat toch prima zijn.
Getekend, verzegeld, bezorgd... ik ben van jou
Dat is ons snelle overzicht van hoe u S/MIME-berichten via SparkPost kunt ondertekenen, verzegelen en bezorgen. Snelle herinnering: het demoproject staat op Github hier, ik heb geprobeerd het gemakkelijk te installeren en te gebruiken.
Bonusfunctie: het weergeven van MIME-onderdelen met "mimeshow"
RFC822 MIME multipart-bestandinternals zijn behoorlijk complex om te lezen voor mensen. Het project bevat een zelfstandige tool om dit gemakkelijker te maken, genaamd mimeshow.
Dit neemt alle e-mailbestanden die je hebt (niet alleen S/MIME) en toont de interne structuur. Hier is een voorbeeld:
./mimeshow.py testcases/img_and_attachment.eml
Je zult zien:
Aan Bob <bob.lumreeker@gmail.com>
Van Steve <steve@thetucks.com>
Onderwerp Testen van bijlagen enz
MIME-Version 1.0
Content-Type multipart/mixed; boundary="------------7D48652042860D0098C65210"
Content-Language nl-NL
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"
Je kunt ook als een filter gebruiken om een door mensen leesbare samenvatting van sparkpostSMIME-output te geven:
./sparkpostSMIME.py tests/declaration.eml --sign --encrypt | ./mimeshow.py
Je zult zien:
Aan Bob <bob.lumreeker@gmail.com>
Van Steve <steve@thetucks.com>
Onderwerp Hier is onze verklaring
Content-Language nl-NL
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
Eindelijk…
Samenvattend - we hebben enkele eenvoudige commandoregelprogramma's geïnstalleerd voor het ondertekenen en versleutelen van e-mail (de Github-repository staat hier, compleet met installatie-instructies).
We hebben onze verzendersleutel/certificaat voor ondertekening verkregen, en een ondertekend bericht verzonden via SparkPost. We hebben een ontvangerscertificaat voor versleuteling verkregen, en vervolgens een ondertekend en versleuteld bericht verzonden via SparkPost.
Tenslotte probeerden we het handige zelfstandige hulpmiddel "mimeshow" om naar de interne gegevens van e-mailbestanden te kijken.
Dat is het voor nu! Tot snel!.