S/MIME Deel 4: Het eenvoudig verzamelen van ontvangers openbare sleutels – met SparkPost Inbound Relay Webhooks

Bird

1 feb 2019

E-mail

1 min read

S/MIME Deel 4: Het eenvoudig verzamelen van ontvangers openbare sleutels – met SparkPost Inbound Relay Webhooks

Belangrijkste punten

    • Premise: Het verzenden van S/MIME-versleutelde e-mail is niet moeilijk zodra je automatisch de publieke sleutel van elke ontvanger kunt verzamelen. Dit bericht sluit die kloof door gebruik te maken van SparkPost Inbound Relay Webhooks om ondertekende e-mails te ontvangen, certificaten te extraheren en deze op te slaan voor latere encryptie.

    • Goal: Bouw een Flask-gebaseerde webhookservice die luistert naar binnenkomende ondertekende berichten, deze valideert (DKIM + certificaatcontroles) en veilig elke publieke sleutel op schijf schrijft voor gebruik in uitgaande beveiligde mail.

    • Highlights:

      1. Problem: Handmatige sleuteluitlevering schaalt niet voor door apps gegenereerde e-mail.

      2. Solution: Nodig gebruikers uit om een ondertekende e-mail te sturen; de inkomende webhook parseert en slaat automatisch hun PEM-certificaat op.

      3. Setup steps:

        • Configureer een Inbound Domain en MX-records (bijv. inbound.jouwdomein.com).

        • Creëer een Inbound Relay Webhook via de SparkPost API die naar het eindpunt van je app wijst.

        • Implementeer een kleine Flask app (webapp.py) met configuratie van webapp.ini.

        • Log uitgebreid voor transparantie; integreer Pytest + Travis CI voor geautomatiseerde validatie.

      4. Security measures:

        • Verifieer DKIM-handtekeningen en de authenticiteit van berichten.

        • Valideer certificaatvertrouwensketen vóór opslag.

        • Gebruik een geheime auth token in webhook-headers.

      5. Output:

        • Elk geldig inkomend bericht creëert een certificaatbestand zoals bob.lumreeker@gmail.com.crt.

        • Nadat ze zijn opgeslagen, stellen deze sleutels versleutelde antwoorden in staat met behulp van eerdere scripts van delen 2 en 3.

Q&A Hoogtepunten

  • Waarom is het verzamelen van ontvangersleutels zo cruciaal voor S/MIME?

    Omdat versleuteling de openbare sleutel van elke ontvanger vereist; het automatiseren van deze stap laat elke app beveiligde mail verzenden zonder handmatige uitwisseling.

  • Hoe vereenvoudigt SparkPost Inbound Relay Webhook de belangrijke verzameling?

    Het converteert elke ondertekende inkomende e-mail naar een gestructureerde JSON-payload, waardoor uw app certificaten programmatisch kan ontleden en behouden.

  • Welke waarborgen voorkomen spoofing of ongewenste inzendingen?

    De service valideert DKIM-handtekeningen, handhaaft authenticatietokens en weigert verkeerd gevormde of niet-ondertekende berichten.

  • Waar worden certificaten opgeslagen en in welk formaat?

    Ze worden op schijf geschreven in PEM-formaat (.crt bestanden), klaar voor gebruik door de ondertekenings-/versleutelingstoolketen die in eerdere delen is gebouwd.

  • Wat is de developer workflow?

    Voer de Flask-app uit, verifieer met Postman met behulp van de meegeleverde voorbeeldpayload en verbind deze vervolgens met de live webhook van SparkPost voor continue werking.

  • Algemene conclusie?

    S/MIME-sleutelbeheer kan volledig worden geautomatiseerd met een paar regels Python en SparkPost API's—waardoor schaalbare encryptie naar elke door een app gegenereerde e-mailworkflow wordt gebracht.

In deel 1, maakten we een snelle rondleiding door S/MIME, waarbij we keken naar het ondertekenen en versleutelen van onze berichtstromen over een reeks mailclients. Deel 2 leidde ons door een eenvoudige opdrachtregeltool om e-mails te ondertekenen en versleutelen en deze vervolgens via SparkPost te verzenden. Deel 3 toonde aan hoe je veilige mailstromen kunt injecteren in on-premises platforms zoals Port25 PowerMTA en Momentum.

In deze serie hebben we gezien hoe het opnemen van een S/MIME-handtekening redelijk eenvoudig is. Het verzenden van S/MIME-versleutelde mail is complexer omdat je openbare sleutels van ontvangers moet verkrijgen. Het is één ding als je een mailclient voor mensen gebruikt zoals Thunderbird – maar hoe werkt dat met app-gegenereerde e-mailstromen? App-gegenereerde e-mails, zoals die worden gebruikt door datingplatforms, vereisen een zorgvuldige strategie om betrokkenheid te maximaliseren. Zie hoe dating-apps boeiende getriggerde e-mailexperiences creëren.

Maar wacht – er is een andere manier om die sleutels in Mordor te krijgen. Je dienst kan je klanten uitnodigen (via e-mail, natuurlijk) om je een ondertekende mail terug te sturen naar een bekend klantserviceadres. Door gebruik te maken van de magische krachten van SparkPost Inbound Relay-webhooks, zullen we die openbare sleutel voor jou extraheren en opslaan om te gebruiken.

We kunnen dit samenvatten in een eenvoudig gebruiksscenario:

  • Als ontvanger van berichten voorzie ik je dienst van mijn persoonlijke e-mailhandtekening via e-mail, zodat in de toekomst e-mails in S/MIME-versleutelde vorm naar mij verzonden kunnen worden.

Hieruit kunnen we enkele meer gedetailleerde vereisten afleiden:

  • We hebben een altijd-werkende, betrouwbare inkomende e-mailservice nodig om die ondertekende e-mails te ontvangen.

  • Er mogen geen bijzondere eisen aan het mailformaat zijn, behalve dat het een S/MIME-handtekening moet bevatten.

  • Aangezien iedereen een mail naar deze dienst kan proberen te sturen, moet deze defensief worden ontworpen, bijvoorbeeld om "spoof"-berichten van slechte actoren af te wijzen. Er moeten verschillende controlelagen zijn.

  • Als alles in orde lijkt, slaat de dienst het certificaat op in een bestand, gebruikmakend van het bekende plain-text Privacy-Enhanced Mail (PEM)-formaat.

Er zijn enkele niet-functionele vereisten:

  • Machine-to-machine webhook-diensten kunnen moeilijk te zien zijn alleen vanuit de reacties op wat er intern gebeurt. De dienst moet uitgebreide mensleesbare applicatielogboeken bieden. In het bijzonder moet de parsing en controle van het certificaat worden gelogd.

  • We voegen testcases toe voor de app-internals, gebruikmakend van het fijne Pytest framework, en voeren die tests automatisch uit bij check-in gebruikmakend van Travis CI integratie met GitHub.

OK – laten we beginnen!

In deel 1, maakten we een snelle rondleiding door S/MIME, waarbij we keken naar het ondertekenen en versleutelen van onze berichtstromen over een reeks mailclients. Deel 2 leidde ons door een eenvoudige opdrachtregeltool om e-mails te ondertekenen en versleutelen en deze vervolgens via SparkPost te verzenden. Deel 3 toonde aan hoe je veilige mailstromen kunt injecteren in on-premises platforms zoals Port25 PowerMTA en Momentum.

In deze serie hebben we gezien hoe het opnemen van een S/MIME-handtekening redelijk eenvoudig is. Het verzenden van S/MIME-versleutelde mail is complexer omdat je openbare sleutels van ontvangers moet verkrijgen. Het is één ding als je een mailclient voor mensen gebruikt zoals Thunderbird – maar hoe werkt dat met app-gegenereerde e-mailstromen? App-gegenereerde e-mails, zoals die worden gebruikt door datingplatforms, vereisen een zorgvuldige strategie om betrokkenheid te maximaliseren. Zie hoe dating-apps boeiende getriggerde e-mailexperiences creëren.

Maar wacht – er is een andere manier om die sleutels in Mordor te krijgen. Je dienst kan je klanten uitnodigen (via e-mail, natuurlijk) om je een ondertekende mail terug te sturen naar een bekend klantserviceadres. Door gebruik te maken van de magische krachten van SparkPost Inbound Relay-webhooks, zullen we die openbare sleutel voor jou extraheren en opslaan om te gebruiken.

We kunnen dit samenvatten in een eenvoudig gebruiksscenario:

  • Als ontvanger van berichten voorzie ik je dienst van mijn persoonlijke e-mailhandtekening via e-mail, zodat in de toekomst e-mails in S/MIME-versleutelde vorm naar mij verzonden kunnen worden.

Hieruit kunnen we enkele meer gedetailleerde vereisten afleiden:

  • We hebben een altijd-werkende, betrouwbare inkomende e-mailservice nodig om die ondertekende e-mails te ontvangen.

  • Er mogen geen bijzondere eisen aan het mailformaat zijn, behalve dat het een S/MIME-handtekening moet bevatten.

  • Aangezien iedereen een mail naar deze dienst kan proberen te sturen, moet deze defensief worden ontworpen, bijvoorbeeld om "spoof"-berichten van slechte actoren af te wijzen. Er moeten verschillende controlelagen zijn.

  • Als alles in orde lijkt, slaat de dienst het certificaat op in een bestand, gebruikmakend van het bekende plain-text Privacy-Enhanced Mail (PEM)-formaat.

Er zijn enkele niet-functionele vereisten:

  • Machine-to-machine webhook-diensten kunnen moeilijk te zien zijn alleen vanuit de reacties op wat er intern gebeurt. De dienst moet uitgebreide mensleesbare applicatielogboeken bieden. In het bijzonder moet de parsing en controle van het certificaat worden gelogd.

  • We voegen testcases toe voor de app-internals, gebruikmakend van het fijne Pytest framework, en voeren die tests automatisch uit bij check-in gebruikmakend van Travis CI integratie met GitHub.

OK – laten we beginnen!

In deel 1, maakten we een snelle rondleiding door S/MIME, waarbij we keken naar het ondertekenen en versleutelen van onze berichtstromen over een reeks mailclients. Deel 2 leidde ons door een eenvoudige opdrachtregeltool om e-mails te ondertekenen en versleutelen en deze vervolgens via SparkPost te verzenden. Deel 3 toonde aan hoe je veilige mailstromen kunt injecteren in on-premises platforms zoals Port25 PowerMTA en Momentum.

In deze serie hebben we gezien hoe het opnemen van een S/MIME-handtekening redelijk eenvoudig is. Het verzenden van S/MIME-versleutelde mail is complexer omdat je openbare sleutels van ontvangers moet verkrijgen. Het is één ding als je een mailclient voor mensen gebruikt zoals Thunderbird – maar hoe werkt dat met app-gegenereerde e-mailstromen? App-gegenereerde e-mails, zoals die worden gebruikt door datingplatforms, vereisen een zorgvuldige strategie om betrokkenheid te maximaliseren. Zie hoe dating-apps boeiende getriggerde e-mailexperiences creëren.

Maar wacht – er is een andere manier om die sleutels in Mordor te krijgen. Je dienst kan je klanten uitnodigen (via e-mail, natuurlijk) om je een ondertekende mail terug te sturen naar een bekend klantserviceadres. Door gebruik te maken van de magische krachten van SparkPost Inbound Relay-webhooks, zullen we die openbare sleutel voor jou extraheren en opslaan om te gebruiken.

We kunnen dit samenvatten in een eenvoudig gebruiksscenario:

  • Als ontvanger van berichten voorzie ik je dienst van mijn persoonlijke e-mailhandtekening via e-mail, zodat in de toekomst e-mails in S/MIME-versleutelde vorm naar mij verzonden kunnen worden.

Hieruit kunnen we enkele meer gedetailleerde vereisten afleiden:

  • We hebben een altijd-werkende, betrouwbare inkomende e-mailservice nodig om die ondertekende e-mails te ontvangen.

  • Er mogen geen bijzondere eisen aan het mailformaat zijn, behalve dat het een S/MIME-handtekening moet bevatten.

  • Aangezien iedereen een mail naar deze dienst kan proberen te sturen, moet deze defensief worden ontworpen, bijvoorbeeld om "spoof"-berichten van slechte actoren af te wijzen. Er moeten verschillende controlelagen zijn.

  • Als alles in orde lijkt, slaat de dienst het certificaat op in een bestand, gebruikmakend van het bekende plain-text Privacy-Enhanced Mail (PEM)-formaat.

Er zijn enkele niet-functionele vereisten:

  • Machine-to-machine webhook-diensten kunnen moeilijk te zien zijn alleen vanuit de reacties op wat er intern gebeurt. De dienst moet uitgebreide mensleesbare applicatielogboeken bieden. In het bijzonder moet de parsing en controle van het certificaat worden gelogd.

  • We voegen testcases toe voor de app-internals, gebruikmakend van het fijne Pytest framework, en voeren die tests automatisch uit bij check-in gebruikmakend van Travis CI integratie met GitHub.

OK – laten we beginnen!

1. Oplossingsoverzicht

Dit is hoe de algehele oplossing eruit zal zien.

Diagram depicting a secure email flow illustrating how emails are verified using certificates for secure transmission.

Dit is hoe de algehele oplossing eruit zal zien.

Diagram depicting a secure email flow illustrating how emails are verified using certificates for secure transmission.

Dit is hoe de algehele oplossing eruit zal zien.

Diagram depicting a secure email flow illustrating how emails are verified using certificates for secure transmission.

2. Installeren, configureren en starten van de webapp

We beginnen met dit deel, zodat we het volledig hebben getest voordat we de inbound relay-webhooks gaan behandelen.

De web-app is opgenomen in hetzelfde GitHub-project als delen 1 – 3, dus als je die delen hebt gevolgd, heb je het al. Hier zijn de nieuwe onderdelen:

  • Programmeer readSMIMEsig.py – lees een e-mail en analyseer tussenliggende en gebruikerscertificaten.

  • Programmeer webapp.py – eenvoudige Flask-compatibele webapplicatie voor gebruik met SparkPost Inbound Relay Webhooks.

  • webapp.ini – configuratiebestand voor het bovenstaande. Een configuratiebestand maakt het gemakkelijk om dezelfde waarden zowel aan opdrachtregel- als webapplicaties door te geven.

Je moet ervoor zorgen dat je host het juiste TCP-poortnummer heeft openstaan voor inkomende verzoeken van buitenaf, zodat SparkPost berichten naar je app kan POSTen. Als je bijvoorbeeld bent gehost op AWS EC2, moet je de Security Group van je instantie configureren.

Instructies voor het configureren en starten van de web-app worden gegeven in onze installatiehandleiding – het is vrij eenvoudig. Om te controleren of je app draait en toegankelijk is van buitenaf, kun je (lege) verzoeken sturen vanaf een andere host met behulp van curl, bijvoorbeeld:

curl -X POST https://app.trymsys.net:8855/

Je zou een reactie moeten zien zoals:

{"message":"Unknown Content-Type in request headers"}

Dit is een goed teken – je app draait!

In webapp.log op je host, zie je uitvoer die hierop lijkt:

2019-01-15 00:11:07,575,root,INFO,Request from 38.96.5.10,scheme=https,path=/
2019-01-15 00:11:07,575,root,INFO,| len(headers)=3,len(body)=None
2019-01-15 00:11:07,575,root,INFO,| Unknown Content-Type: None

Om je te helpen meteen met echte gegevens in je app te spelen, kun je dit specifieke Postman-verzoek uit de projectrepo importeren. Dit simuleert wat je SparkPost-account zal doen, d.w.z. het stuurt een https POST met een e-mail met een specifieke, geldige certificaat (behorend tot een testaccount van mij) naar je app.

Je hoeft alleen maar het doeladres in het verzoek (in het grijze vak hierboven) te wijzigen om overeen te komen met je installatie. Als je de tokenwaarde in webapp.ini hebt gewijzigd, pas dan de hoofdwaarde in Postman aan om overeen te komen.

Als je app werkt, zie je een "200 OK" reactie terug in Postman. Je host webapp.log-bestand bevat uitvoer zoals deze:

2019-01-15 00:11:48,554,root,INFO,Request from 38.96.5.10,scheme=https,path=/
2019-01-15 00:11:48,554,root,INFO,| len(headers)=10,len(body)=14778
2019-01-15 00:11:48,555,root,INFO,| msg_from=bob.lumreeker@gmail.com,rcpt_to=secureme@inbound.thetucks.com,len(email_rfc822)=9223
2019-01-15 00:11:48,599,root,INFO,| from=bob.lumreeker@gmail.com,DKIM passed
2019-01-15 00:11:48,600,root,INFO,| content-type=multipart/signed; protocol="application/pkcs7-signature"; micalg=sha-256; boundary="------------ms010908020707040304020406",content-description=None
2019-01-15 00:11:48,600,root,INFO,| content-type=text/plain; charset=utf-8; format=flowed,content-description=None
2019-01-15 00:11:48,600,root,INFO,| content-type=application/pkcs7-signature; name="smime.p7s",content-description=S/MIME Cryptographic Signature
2019-01-15 00:11:48,600,root,INFO,| filename=smime.p7s,bytes=3998
2019-01-15 00:11:48,601,root,INFO,| Certificate: subject email_address=['bob.lumreeker@gmail.com'],not_valid_before=2018-10-03 00:00:00,not_valid_after=2019-10-03 23:59:59,hash_algorithm=sha256,key_size=2048 bytes, issuer={'countryName': 'GB', 'stateOrProvinceName': 'Greater Manchester', 'localityName': 'Salford', 'organizationName': 'COMODO CA Limited', 'commonName': 'COMODO RSA Client Authentication and Secure Email CA'}
2019-01-15 00:11:48,602,root,INFO,| Certificate: subject email_address=[],not_valid_before=2013-01-10 00:00:00,not_valid_after=2028-01-09 23:59:59,hash_algorithm=sha384,key_size=2048 bytes, issuer={'countryName': 'GB', 'stateOrProvinceName': 'Greater Manchester', 'localityName': 'Salford', 'organizationName': 'COMODO CA Limited', 'commonName': 'COMODO RSA Certification Authority'}
2019-01-15 00:11:48,616,root,INFO,| written file ./bob.lumreeker@gmail.com.crt,bytes=1870,ok=True

Voor een snelle controle, kijk naar de laatste regel – als er "geschreven bestand" staat, dan zit je goed. De rest laat het DKIM-controle- en certificaatvalidatieproces zien.

We beginnen met dit deel, zodat we het volledig hebben getest voordat we de inbound relay-webhooks gaan behandelen.

De web-app is opgenomen in hetzelfde GitHub-project als delen 1 – 3, dus als je die delen hebt gevolgd, heb je het al. Hier zijn de nieuwe onderdelen:

  • Programmeer readSMIMEsig.py – lees een e-mail en analyseer tussenliggende en gebruikerscertificaten.

  • Programmeer webapp.py – eenvoudige Flask-compatibele webapplicatie voor gebruik met SparkPost Inbound Relay Webhooks.

  • webapp.ini – configuratiebestand voor het bovenstaande. Een configuratiebestand maakt het gemakkelijk om dezelfde waarden zowel aan opdrachtregel- als webapplicaties door te geven.

Je moet ervoor zorgen dat je host het juiste TCP-poortnummer heeft openstaan voor inkomende verzoeken van buitenaf, zodat SparkPost berichten naar je app kan POSTen. Als je bijvoorbeeld bent gehost op AWS EC2, moet je de Security Group van je instantie configureren.

Instructies voor het configureren en starten van de web-app worden gegeven in onze installatiehandleiding – het is vrij eenvoudig. Om te controleren of je app draait en toegankelijk is van buitenaf, kun je (lege) verzoeken sturen vanaf een andere host met behulp van curl, bijvoorbeeld:

curl -X POST https://app.trymsys.net:8855/

Je zou een reactie moeten zien zoals:

{"message":"Unknown Content-Type in request headers"}

Dit is een goed teken – je app draait!

In webapp.log op je host, zie je uitvoer die hierop lijkt:

2019-01-15 00:11:07,575,root,INFO,Request from 38.96.5.10,scheme=https,path=/
2019-01-15 00:11:07,575,root,INFO,| len(headers)=3,len(body)=None
2019-01-15 00:11:07,575,root,INFO,| Unknown Content-Type: None

Om je te helpen meteen met echte gegevens in je app te spelen, kun je dit specifieke Postman-verzoek uit de projectrepo importeren. Dit simuleert wat je SparkPost-account zal doen, d.w.z. het stuurt een https POST met een e-mail met een specifieke, geldige certificaat (behorend tot een testaccount van mij) naar je app.

Je hoeft alleen maar het doeladres in het verzoek (in het grijze vak hierboven) te wijzigen om overeen te komen met je installatie. Als je de tokenwaarde in webapp.ini hebt gewijzigd, pas dan de hoofdwaarde in Postman aan om overeen te komen.

Als je app werkt, zie je een "200 OK" reactie terug in Postman. Je host webapp.log-bestand bevat uitvoer zoals deze:

2019-01-15 00:11:48,554,root,INFO,Request from 38.96.5.10,scheme=https,path=/
2019-01-15 00:11:48,554,root,INFO,| len(headers)=10,len(body)=14778
2019-01-15 00:11:48,555,root,INFO,| msg_from=bob.lumreeker@gmail.com,rcpt_to=secureme@inbound.thetucks.com,len(email_rfc822)=9223
2019-01-15 00:11:48,599,root,INFO,| from=bob.lumreeker@gmail.com,DKIM passed
2019-01-15 00:11:48,600,root,INFO,| content-type=multipart/signed; protocol="application/pkcs7-signature"; micalg=sha-256; boundary="------------ms010908020707040304020406",content-description=None
2019-01-15 00:11:48,600,root,INFO,| content-type=text/plain; charset=utf-8; format=flowed,content-description=None
2019-01-15 00:11:48,600,root,INFO,| content-type=application/pkcs7-signature; name="smime.p7s",content-description=S/MIME Cryptographic Signature
2019-01-15 00:11:48,600,root,INFO,| filename=smime.p7s,bytes=3998
2019-01-15 00:11:48,601,root,INFO,| Certificate: subject email_address=['bob.lumreeker@gmail.com'],not_valid_before=2018-10-03 00:00:00,not_valid_after=2019-10-03 23:59:59,hash_algorithm=sha256,key_size=2048 bytes, issuer={'countryName': 'GB', 'stateOrProvinceName': 'Greater Manchester', 'localityName': 'Salford', 'organizationName': 'COMODO CA Limited', 'commonName': 'COMODO RSA Client Authentication and Secure Email CA'}
2019-01-15 00:11:48,602,root,INFO,| Certificate: subject email_address=[],not_valid_before=2013-01-10 00:00:00,not_valid_after=2028-01-09 23:59:59,hash_algorithm=sha384,key_size=2048 bytes, issuer={'countryName': 'GB', 'stateOrProvinceName': 'Greater Manchester', 'localityName': 'Salford', 'organizationName': 'COMODO CA Limited', 'commonName': 'COMODO RSA Certification Authority'}
2019-01-15 00:11:48,616,root,INFO,| written file ./bob.lumreeker@gmail.com.crt,bytes=1870,ok=True

Voor een snelle controle, kijk naar de laatste regel – als er "geschreven bestand" staat, dan zit je goed. De rest laat het DKIM-controle- en certificaatvalidatieproces zien.

We beginnen met dit deel, zodat we het volledig hebben getest voordat we de inbound relay-webhooks gaan behandelen.

De web-app is opgenomen in hetzelfde GitHub-project als delen 1 – 3, dus als je die delen hebt gevolgd, heb je het al. Hier zijn de nieuwe onderdelen:

  • Programmeer readSMIMEsig.py – lees een e-mail en analyseer tussenliggende en gebruikerscertificaten.

  • Programmeer webapp.py – eenvoudige Flask-compatibele webapplicatie voor gebruik met SparkPost Inbound Relay Webhooks.

  • webapp.ini – configuratiebestand voor het bovenstaande. Een configuratiebestand maakt het gemakkelijk om dezelfde waarden zowel aan opdrachtregel- als webapplicaties door te geven.

Je moet ervoor zorgen dat je host het juiste TCP-poortnummer heeft openstaan voor inkomende verzoeken van buitenaf, zodat SparkPost berichten naar je app kan POSTen. Als je bijvoorbeeld bent gehost op AWS EC2, moet je de Security Group van je instantie configureren.

Instructies voor het configureren en starten van de web-app worden gegeven in onze installatiehandleiding – het is vrij eenvoudig. Om te controleren of je app draait en toegankelijk is van buitenaf, kun je (lege) verzoeken sturen vanaf een andere host met behulp van curl, bijvoorbeeld:

curl -X POST https://app.trymsys.net:8855/

Je zou een reactie moeten zien zoals:

{"message":"Unknown Content-Type in request headers"}

Dit is een goed teken – je app draait!

In webapp.log op je host, zie je uitvoer die hierop lijkt:

2019-01-15 00:11:07,575,root,INFO,Request from 38.96.5.10,scheme=https,path=/
2019-01-15 00:11:07,575,root,INFO,| len(headers)=3,len(body)=None
2019-01-15 00:11:07,575,root,INFO,| Unknown Content-Type: None

Om je te helpen meteen met echte gegevens in je app te spelen, kun je dit specifieke Postman-verzoek uit de projectrepo importeren. Dit simuleert wat je SparkPost-account zal doen, d.w.z. het stuurt een https POST met een e-mail met een specifieke, geldige certificaat (behorend tot een testaccount van mij) naar je app.

Je hoeft alleen maar het doeladres in het verzoek (in het grijze vak hierboven) te wijzigen om overeen te komen met je installatie. Als je de tokenwaarde in webapp.ini hebt gewijzigd, pas dan de hoofdwaarde in Postman aan om overeen te komen.

Als je app werkt, zie je een "200 OK" reactie terug in Postman. Je host webapp.log-bestand bevat uitvoer zoals deze:

2019-01-15 00:11:48,554,root,INFO,Request from 38.96.5.10,scheme=https,path=/
2019-01-15 00:11:48,554,root,INFO,| len(headers)=10,len(body)=14778
2019-01-15 00:11:48,555,root,INFO,| msg_from=bob.lumreeker@gmail.com,rcpt_to=secureme@inbound.thetucks.com,len(email_rfc822)=9223
2019-01-15 00:11:48,599,root,INFO,| from=bob.lumreeker@gmail.com,DKIM passed
2019-01-15 00:11:48,600,root,INFO,| content-type=multipart/signed; protocol="application/pkcs7-signature"; micalg=sha-256; boundary="------------ms010908020707040304020406",content-description=None
2019-01-15 00:11:48,600,root,INFO,| content-type=text/plain; charset=utf-8; format=flowed,content-description=None
2019-01-15 00:11:48,600,root,INFO,| content-type=application/pkcs7-signature; name="smime.p7s",content-description=S/MIME Cryptographic Signature
2019-01-15 00:11:48,600,root,INFO,| filename=smime.p7s,bytes=3998
2019-01-15 00:11:48,601,root,INFO,| Certificate: subject email_address=['bob.lumreeker@gmail.com'],not_valid_before=2018-10-03 00:00:00,not_valid_after=2019-10-03 23:59:59,hash_algorithm=sha256,key_size=2048 bytes, issuer={'countryName': 'GB', 'stateOrProvinceName': 'Greater Manchester', 'localityName': 'Salford', 'organizationName': 'COMODO CA Limited', 'commonName': 'COMODO RSA Client Authentication and Secure Email CA'}
2019-01-15 00:11:48,602,root,INFO,| Certificate: subject email_address=[],not_valid_before=2013-01-10 00:00:00,not_valid_after=2028-01-09 23:59:59,hash_algorithm=sha384,key_size=2048 bytes, issuer={'countryName': 'GB', 'stateOrProvinceName': 'Greater Manchester', 'localityName': 'Salford', 'organizationName': 'COMODO CA Limited', 'commonName': 'COMODO RSA Certification Authority'}
2019-01-15 00:11:48,616,root,INFO,| written file ./bob.lumreeker@gmail.com.crt,bytes=1870,ok=True

Voor een snelle controle, kijk naar de laatste regel – als er "geschreven bestand" staat, dan zit je goed. De rest laat het DKIM-controle- en certificaatvalidatieproces zien.

3. SparkPost inbound relay webhooks instellen

Ten eerste selecteren we een domein om te gebruiken als ons inkomende berichtadres – hier zal het inbound.thetucks.com zijn. Stel je domein in volgens deze gids. Hier zijn de stappen die ik in detail heb gebruikt:

3.1 Voeg MX Records toe

Je hebt toegang nodig tot je specifieke Internet Service Provider-account. Als dat is gedaan, kun je ze controleren met dig – hier is het commando voor mijn domein.

dig +short MX inbound.thetucks.com

Je zou moeten zien:

10 rx3.sparkpostmail.com. 10 rx1.sparkpostmail.com. 10 rx2.sparkpostmail.com

3.2 Maak een Inbound Domein

Gebruik de SparkPost Postman API collection, waarbij je de Inbound Domains / Create .. call selecteert. De inhoud van de POST-aanvraag bevat je domein, bijvoorbeeld:

{ "domain": "inbound.thetucks.com" }
Postman desktop application with an open tab displaying a 'Create an Inbound Domain' API request, featuring fields such as domain input, several header options, and a JSON payload, aimed at testing and automating API workflows.


3.3 Maak een Relay Webhook

Maak een inbound relay webhook met behulp van de relevante Postman call. De berichtinhoud in mijn geval bevat:

{
  "name": "Certificate Collection Webhook",
  "target": "https://app.trymsys.net:8855/",
  "auth_token": "t0p s3cr3t t0k3n",
  "match": {
    "protocol": "SMTP",
    "domain": "inbound.thetucks.com"
  }
}

Zoals eerder vermeld, raad ik aan een auth_token in te stellen op je eigen geheime waarde, zoals ingesteld in het webapp.ini-bestand op je host.

Je "target"-waarde moet overeenkomen met je hostadres en TCP-poort waar je de webapp gaat hosten.

Je "domain"-waarde moet overeenkomen met je MX-records ingesteld in stap 1.

Postman interface, showing the process of creating a relay webhook with detailed JSON configuration, with sections including request method, parameters, and code snippet.


Dat is het! De verbindingen zijn gelegd. Je zou nu in staat moeten zijn om certificaten naar je inkomende adres te sturen, ze worden verwerkt en verschijnen op je webapplicatiehost – in dit geval, een bestand genaamd bob.lumreeker@gmail.com.crt.

Nu kun je versleutelde e-mails naar Bob sturen, met de tools beschreven in onderdelen 2 & 3 van deze serie.

Je kunt de inhoud van een certificaat onderzoeken met:

openssl x509 -inform PEM -in bob.lumreeker\@gmail.com.crt -text -noout

Ten eerste selecteren we een domein om te gebruiken als ons inkomende berichtadres – hier zal het inbound.thetucks.com zijn. Stel je domein in volgens deze gids. Hier zijn de stappen die ik in detail heb gebruikt:

3.1 Voeg MX Records toe

Je hebt toegang nodig tot je specifieke Internet Service Provider-account. Als dat is gedaan, kun je ze controleren met dig – hier is het commando voor mijn domein.

dig +short MX inbound.thetucks.com

Je zou moeten zien:

10 rx3.sparkpostmail.com. 10 rx1.sparkpostmail.com. 10 rx2.sparkpostmail.com

3.2 Maak een Inbound Domein

Gebruik de SparkPost Postman API collection, waarbij je de Inbound Domains / Create .. call selecteert. De inhoud van de POST-aanvraag bevat je domein, bijvoorbeeld:

{ "domain": "inbound.thetucks.com" }
Postman desktop application with an open tab displaying a 'Create an Inbound Domain' API request, featuring fields such as domain input, several header options, and a JSON payload, aimed at testing and automating API workflows.


3.3 Maak een Relay Webhook

Maak een inbound relay webhook met behulp van de relevante Postman call. De berichtinhoud in mijn geval bevat:

{
  "name": "Certificate Collection Webhook",
  "target": "https://app.trymsys.net:8855/",
  "auth_token": "t0p s3cr3t t0k3n",
  "match": {
    "protocol": "SMTP",
    "domain": "inbound.thetucks.com"
  }
}

Zoals eerder vermeld, raad ik aan een auth_token in te stellen op je eigen geheime waarde, zoals ingesteld in het webapp.ini-bestand op je host.

Je "target"-waarde moet overeenkomen met je hostadres en TCP-poort waar je de webapp gaat hosten.

Je "domain"-waarde moet overeenkomen met je MX-records ingesteld in stap 1.

Postman interface, showing the process of creating a relay webhook with detailed JSON configuration, with sections including request method, parameters, and code snippet.


Dat is het! De verbindingen zijn gelegd. Je zou nu in staat moeten zijn om certificaten naar je inkomende adres te sturen, ze worden verwerkt en verschijnen op je webapplicatiehost – in dit geval, een bestand genaamd bob.lumreeker@gmail.com.crt.

Nu kun je versleutelde e-mails naar Bob sturen, met de tools beschreven in onderdelen 2 & 3 van deze serie.

Je kunt de inhoud van een certificaat onderzoeken met:

openssl x509 -inform PEM -in bob.lumreeker\@gmail.com.crt -text -noout

Ten eerste selecteren we een domein om te gebruiken als ons inkomende berichtadres – hier zal het inbound.thetucks.com zijn. Stel je domein in volgens deze gids. Hier zijn de stappen die ik in detail heb gebruikt:

3.1 Voeg MX Records toe

Je hebt toegang nodig tot je specifieke Internet Service Provider-account. Als dat is gedaan, kun je ze controleren met dig – hier is het commando voor mijn domein.

dig +short MX inbound.thetucks.com

Je zou moeten zien:

10 rx3.sparkpostmail.com. 10 rx1.sparkpostmail.com. 10 rx2.sparkpostmail.com

3.2 Maak een Inbound Domein

Gebruik de SparkPost Postman API collection, waarbij je de Inbound Domains / Create .. call selecteert. De inhoud van de POST-aanvraag bevat je domein, bijvoorbeeld:

{ "domain": "inbound.thetucks.com" }
Postman desktop application with an open tab displaying a 'Create an Inbound Domain' API request, featuring fields such as domain input, several header options, and a JSON payload, aimed at testing and automating API workflows.


3.3 Maak een Relay Webhook

Maak een inbound relay webhook met behulp van de relevante Postman call. De berichtinhoud in mijn geval bevat:

{
  "name": "Certificate Collection Webhook",
  "target": "https://app.trymsys.net:8855/",
  "auth_token": "t0p s3cr3t t0k3n",
  "match": {
    "protocol": "SMTP",
    "domain": "inbound.thetucks.com"
  }
}

Zoals eerder vermeld, raad ik aan een auth_token in te stellen op je eigen geheime waarde, zoals ingesteld in het webapp.ini-bestand op je host.

Je "target"-waarde moet overeenkomen met je hostadres en TCP-poort waar je de webapp gaat hosten.

Je "domain"-waarde moet overeenkomen met je MX-records ingesteld in stap 1.

Postman interface, showing the process of creating a relay webhook with detailed JSON configuration, with sections including request method, parameters, and code snippet.


Dat is het! De verbindingen zijn gelegd. Je zou nu in staat moeten zijn om certificaten naar je inkomende adres te sturen, ze worden verwerkt en verschijnen op je webapplicatiehost – in dit geval, een bestand genaamd bob.lumreeker@gmail.com.crt.

Nu kun je versleutelde e-mails naar Bob sturen, met de tools beschreven in onderdelen 2 & 3 van deze serie.

Je kunt de inhoud van een certificaat onderzoeken met:

openssl x509 -inform PEM -in bob.lumreeker\@gmail.com.crt -text -noout

4. Internals: DKIM controle, certificaat validatie

De app controleert of ontvangen e-mails een geldige DKIM hebben en controleert of de certificaten zelf geldig zijn, zoals hier beschreven. Er zijn ook implementatie-opmerkingen en ideeën voor verder werk.

De app controleert of ontvangen e-mails een geldige DKIM hebben en controleert of de certificaten zelf geldig zijn, zoals hier beschreven. Er zijn ook implementatie-opmerkingen en ideeën voor verder werk.

De app controleert of ontvangen e-mails een geldige DKIM hebben en controleert of de certificaten zelf geldig zijn, zoals hier beschreven. Er zijn ook implementatie-opmerkingen en ideeën voor verder werk.

Samenvattend…

We hebben gezien hoe openbare sleutels van ontvangers eenvoudig kunnen worden verzameld door een e-mail naar een inkomend relay-webhooksadres te sturen. Zodra dit is gedaan, kunnen die ontvangers hun berichten in S/MIME-versleutelde vorm ontvangen.

Dat is het voor nu! Veel plezier met verzenden.

We hebben gezien hoe openbare sleutels van ontvangers eenvoudig kunnen worden verzameld door een e-mail naar een inkomend relay-webhooksadres te sturen. Zodra dit is gedaan, kunnen die ontvangers hun berichten in S/MIME-versleutelde vorm ontvangen.

Dat is het voor nu! Veel plezier met verzenden.

We hebben gezien hoe openbare sleutels van ontvangers eenvoudig kunnen worden verzameld door een e-mail naar een inkomend relay-webhooksadres te sturen. Zodra dit is gedaan, kunnen die ontvangers hun berichten in S/MIME-versleutelde vorm ontvangen.

Dat is het voor nu! Veel plezier met verzenden.

Andere nieuws

Lees meer uit deze categorie

A person is standing at a desk while typing on a laptop.

Het complete AI-native platform dat met uw bedrijf meegroeit.

A person is standing at a desk while typing on a laptop.

Het complete AI-native platform dat met uw bedrijf meegroeit.