Reach

Grow

Manage

Automate

Reach

Grow

Manage

Automate

S/MIME Parte 2: Firmato, Sigillato e Conseguito tramite SparkPost

Email

1 min read

S/MIME Parte 2: Firmato, Sigillato e Conseguito tramite SparkPost

Email

1 min read

S/MIME Parte 2: Firmato, Sigillato e Conseguito tramite SparkPost

Nella parte 1, abbiamo fatto un veloce tour di S/MIME, esaminando la firma e la crittografia dei nostri flussi di messaggi attraverso una varietà di client di posta. I messaggi S/MIME possono essere firmati (fornendo prova dell'identità del mittente), crittografati (tenendo segreto il corpo del messaggio), o entrambi.

In questo episodio, noi:

  • Installeremo alcuni semplici strumenti da riga di comando per firmare e criptare le email

  • Otterremo la tua chiave/messaggio di certificato per la firma

  • Invieremo un messaggio firmato tramite SparkPost e guarderemo il messaggio ricevuto

  • Facoltativamente, otterremo il certificato del destinatario per la crittografia

  • Invieremo un messaggio firmato e criptato tramite SparkPost e guarderemo il messaggio ricevuto

  • Proveremo un utile strumento autonomo "mimeshow" per esaminare gli interni del file email.

OK – iniziamo!

1. Installa gli strumenti

Gli strumenti dimostrativi sono su Github qui, completi di istruzioni di installazione. Potresti notare il logo “build passing” – Travis e pytest controllano automaticamente lo stato della build. Nota che questi strumenti non sono ufficialmente supportati da SparkPost, ma ho cercato di renderli robusti e facili da usare.

Se hai una certa familiarità con Python e pip, l'installazione dovrebbe sembrarti abbastanza familiare. Il Pipfile si occupa automaticamente delle dipendenze esterne per te. Una volta fatto ciò, puoi verificare che tutto sia installato eseguendo

./sparkpostSMIME.py -h

Dovresti vedere il testo di aiuto amichevole. Successivamente, dobbiamo…

2. Ottieni la tua chiave mittente / certificato per la firma

Se hai già un file chiave per la tua identità di invio, puoi procedere oltre. Altrimenti, ecco due opzioni tra cui scegliere:

a) Chiave/certificato di test self-signed (non valido esternamente)

Se stai solo testando, puoi creare certificati e chiavi “self signed” per un indirizzo email usando lo strumento da riga di comando openssl su Linux, seguendo una procedura come questa. Alla fine di quel processo, avrai un file smime.p12. Rinomina questo file per farlo corrispondere alla tua identità di invio, incluso il segno @, per esempio, alice@example.com.p12.

oppure

b) Chiavi/certificati validi esternamente

Se vuoi ottenere chiavi/certificati validi esternamente che ti permettono di firmare, c'è un elenco di fornitori qui. Ho trovato che Comodo funziona bene (gratuito per uso non commerciale) ed è più semplice rispetto alla procedura di self-sign sopra. Segui il processo di iscrizione, ricevi la tua mail di convalida e assicurati di aprire il link in Firefox. Vai a Preferenze di Firefox / Privacy e Sicurezza. Scorri fino a Certificati / Visualizza certificati:




Seleziona il tuo certificato e usa l'opzione “Backup” per salvarlo come file in formato PKCS12 (aggiungi l'estensione .p12 al tuo nome file) che porta la chiave privata e la catena di certificati pubblici.




Fornisci una password per proteggere il file .p12:

Generare file chiave pubblica (.crt) e privata (.pem) separati

Che tu abbia usato a) o b), ora avrai un file .p12 per la tua identità di mittente. È un grande passo avanti - ora prendi un caffè!

Ora dobbiamo generare file chiave pubblica e privata separati in questo modo - sostituendo il tuo indirizzo email con quello dell’esempio. (Mac OSX e 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

Ti verrà richiesto di inserire la password fornita in precedenza. Nota che quei backslash \ sono usati per escapare il segno @ - non per separare i nomi di un percorso della directory (che è una barra in avanti / su Mac OSX e Linux).

Se stai usando Windows, ci sono implementazioni di openssl disponibili come quella MINGW64 integrata negli strumenti da riga di comando Git, ma l'ho trovata tendente solo a bloccarsi. Probabilmente troverai più facile e veloce farlo su Linux e poi copiare i tuoi file. Quegli stessi strumenti Git per Windows vengono forniti con un bel client ssh che puoi usare per accedere a una macchina Linux, come una istanza Amazon EC2.




2.1 Firmare un messaggio

C'è già una chiave/certificato e un file di origine email fittizio nella directory di test per alice@example.com, così puoi ottenere qualche risultato anche prima di avere le tue chiavi. Basta digitare il seguente comando:

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

E otterrai:

A: Bob <bob@example.com> Da: Alice <alice@example.com> Oggetto: Un messaggio 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 : :

Non puoi realmente inviare email da example.com tramite SparkPost a meno che tu non possieda quel dominio, quindi il passo successivo è usare la tua chiave e inviare un messaggio firmato dal tuo dominio.

Se hai già un file chiave per la tua identità di invio, puoi procedere oltre. Altrimenti, ecco due opzioni tra cui scegliere:

a) Chiave/certificato di test self-signed (non valido esternamente)

Se stai solo testando, puoi creare certificati e chiavi “self signed” per un indirizzo email usando lo strumento da riga di comando openssl su Linux, seguendo una procedura come questa. Alla fine di quel processo, avrai un file smime.p12. Rinomina questo file per farlo corrispondere alla tua identità di invio, incluso il segno @, per esempio, alice@example.com.p12.

oppure

b) Chiavi/certificati validi esternamente

Se vuoi ottenere chiavi/certificati validi esternamente che ti permettono di firmare, c'è un elenco di fornitori qui. Ho trovato che Comodo funziona bene (gratuito per uso non commerciale) ed è più semplice rispetto alla procedura di self-sign sopra. Segui il processo di iscrizione, ricevi la tua mail di convalida e assicurati di aprire il link in Firefox. Vai a Preferenze di Firefox / Privacy e Sicurezza. Scorri fino a Certificati / Visualizza certificati:




Seleziona il tuo certificato e usa l'opzione “Backup” per salvarlo come file in formato PKCS12 (aggiungi l'estensione .p12 al tuo nome file) che porta la chiave privata e la catena di certificati pubblici.




Fornisci una password per proteggere il file .p12:

Generare file chiave pubblica (.crt) e privata (.pem) separati

Che tu abbia usato a) o b), ora avrai un file .p12 per la tua identità di mittente. È un grande passo avanti - ora prendi un caffè!

Ora dobbiamo generare file chiave pubblica e privata separati in questo modo - sostituendo il tuo indirizzo email con quello dell’esempio. (Mac OSX e 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

Ti verrà richiesto di inserire la password fornita in precedenza. Nota che quei backslash \ sono usati per escapare il segno @ - non per separare i nomi di un percorso della directory (che è una barra in avanti / su Mac OSX e Linux).

Se stai usando Windows, ci sono implementazioni di openssl disponibili come quella MINGW64 integrata negli strumenti da riga di comando Git, ma l'ho trovata tendente solo a bloccarsi. Probabilmente troverai più facile e veloce farlo su Linux e poi copiare i tuoi file. Quegli stessi strumenti Git per Windows vengono forniti con un bel client ssh che puoi usare per accedere a una macchina Linux, come una istanza Amazon EC2.




2.1 Firmare un messaggio

C'è già una chiave/certificato e un file di origine email fittizio nella directory di test per alice@example.com, così puoi ottenere qualche risultato anche prima di avere le tue chiavi. Basta digitare il seguente comando:

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

E otterrai:

A: Bob <bob@example.com> Da: Alice <alice@example.com> Oggetto: Un messaggio 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 : :

Non puoi realmente inviare email da example.com tramite SparkPost a meno che tu non possieda quel dominio, quindi il passo successivo è usare la tua chiave e inviare un messaggio firmato dal tuo dominio.

Se hai già un file chiave per la tua identità di invio, puoi procedere oltre. Altrimenti, ecco due opzioni tra cui scegliere:

a) Chiave/certificato di test self-signed (non valido esternamente)

Se stai solo testando, puoi creare certificati e chiavi “self signed” per un indirizzo email usando lo strumento da riga di comando openssl su Linux, seguendo una procedura come questa. Alla fine di quel processo, avrai un file smime.p12. Rinomina questo file per farlo corrispondere alla tua identità di invio, incluso il segno @, per esempio, alice@example.com.p12.

oppure

b) Chiavi/certificati validi esternamente

Se vuoi ottenere chiavi/certificati validi esternamente che ti permettono di firmare, c'è un elenco di fornitori qui. Ho trovato che Comodo funziona bene (gratuito per uso non commerciale) ed è più semplice rispetto alla procedura di self-sign sopra. Segui il processo di iscrizione, ricevi la tua mail di convalida e assicurati di aprire il link in Firefox. Vai a Preferenze di Firefox / Privacy e Sicurezza. Scorri fino a Certificati / Visualizza certificati:




Seleziona il tuo certificato e usa l'opzione “Backup” per salvarlo come file in formato PKCS12 (aggiungi l'estensione .p12 al tuo nome file) che porta la chiave privata e la catena di certificati pubblici.




Fornisci una password per proteggere il file .p12:

Generare file chiave pubblica (.crt) e privata (.pem) separati

Che tu abbia usato a) o b), ora avrai un file .p12 per la tua identità di mittente. È un grande passo avanti - ora prendi un caffè!

Ora dobbiamo generare file chiave pubblica e privata separati in questo modo - sostituendo il tuo indirizzo email con quello dell’esempio. (Mac OSX e 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

Ti verrà richiesto di inserire la password fornita in precedenza. Nota che quei backslash \ sono usati per escapare il segno @ - non per separare i nomi di un percorso della directory (che è una barra in avanti / su Mac OSX e Linux).

Se stai usando Windows, ci sono implementazioni di openssl disponibili come quella MINGW64 integrata negli strumenti da riga di comando Git, ma l'ho trovata tendente solo a bloccarsi. Probabilmente troverai più facile e veloce farlo su Linux e poi copiare i tuoi file. Quegli stessi strumenti Git per Windows vengono forniti con un bel client ssh che puoi usare per accedere a una macchina Linux, come una istanza Amazon EC2.




2.1 Firmare un messaggio

C'è già una chiave/certificato e un file di origine email fittizio nella directory di test per alice@example.com, così puoi ottenere qualche risultato anche prima di avere le tue chiavi. Basta digitare il seguente comando:

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

E otterrai:

A: Bob <bob@example.com> Da: Alice <alice@example.com> Oggetto: Un messaggio 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 : :

Non puoi realmente inviare email da example.com tramite SparkPost a meno che tu non possieda quel dominio, quindi il passo successivo è usare la tua chiave e inviare un messaggio firmato dal tuo dominio.

3. Invia un messaggio firmato tramite SparkPost

Ora usiamo un vero dominio di invio, configurato come descritto nel New User Guide di SparkPost. Abbiamo i file del certificato del mittente e le chiavi nella directory corrente:

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

Il file tests/declaration.eml è incluso nel progetto. È solo un file di testo, quindi puoi personalizzare l'indirizzo From: per adattarlo al tuo dominio di invio e l'indirizzo To: per adattarlo al tuo destinatario di prova. L'inizio del file si presenta così:

A: Bob <bob.lumreeker@gmail.com> Da: Steve <steve@thetucks.com> Oggetto: Ecco la nostra dichiarazione MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Content-Language: en-GB Quando nel corso degli eventi umani diventa necessario …




Imposta la tua chiave API:

export SPARKPOST_API_KEY=<<Inserisci qui la tua chiave API>>

Invia l'email:

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




Vedrai:

Connessione aperta a https://api.sparkpost.com/api/v1 Invio tests/declaration.eml Da: Steve <steve@thetucks.com> A: Bob <bob.lumreeker@gmail.com> OK - in 1,15 secondi

Poco dopo, l'email arriva nella casella di posta di Bob. Thunderbird la visualizza con un punto rosso sulla busta, indicando una firma del mittente valida.

Successo! Finisci quel caffè, te lo sei guadagnato. Se hai problemi, controlla che l'indirizzo From: nel file dell'email corrisponda al nome dei tuoi file .crt e .pem.

4. Crittografia dei messaggi

Per crittografare un messaggio, è necessario la chiave pubblica del destinatario in formato certificato. Questo è un file di testo che appare così:

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----- sembra caratteri casuali qui -----END CERTIFICATE-----

C’è un certificato destinatario fittizio per bob@example.com nella directory dei test, quindi puoi fare pratica con esso prima di avere un vero certificato:

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




Vedrai:




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

Noterai che la lunghezza dell’output è piuttosto più lunga di un messaggio crittografato perché contiene molte informazioni extra oltre allo stesso messaggio confuso.




4.1 Invio di un messaggio crittografato e firmato tramite SparkPost

Inviamo un messaggio crittografato a un vero indirizzo email. Puoi seguire lo stesso processo di prima (autofirmato o un fornitore come Comodo) per ottenere una chiave pubblica/certificato per i tuoi indirizzi destinatari. Hai solo bisogno del file .crt – il destinatario non deve mai darti la sua chiave privata (file .p12 e .pem).

Ho il file bob.lumreeker@gmail.com.crt per il mio destinatario previsto – che corrisponde all'indirizzo From: nel mio file.

Ecco il comando da inviare:

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




Vedo:

Connessione aperta a https://api.sparkpost.com/api/v1 Inviando tests/declaration.eml From: Steve <steve@thetucks.com> To: Bob <bob.lumreeker@gmail.com> OK - in 1.168 secondi

La mail appare in Thunderbird con l'icona di firma del “punto rosso” e l'icona crittografata del “lucchetto”.




Puoi inviare email complesse basate su HTML con link e immagini altrettanto facilmente, come quella mostrata nella Parte 1. Alcuni client come Thunderbird chiedono il permesso di visualizzare collegamenti esterni e immagini all'interno di messaggi S/MIME crittografati, ma i messaggi solo firmati si visualizzano bene in client come Thunderbird e Gmail:




Nota che il menu a tendina mostra “Indirizzo email verificato”.

Ulteriori pensieri e cose di cui essere consapevoli

Questo strumento adotta un approccio super-semplice per ottenere le chiavi necessarie – cerca semplicemente file nominati nella directory corrente. Arrangiamenti più complessi, come mantenere tutte le chiavi in un database, potrebbero essere facilmente aggiunti, ma volevo che il codice fosse il più semplice possibile.

Puoi includere altri destinatari con Cc: e Bcc: e verranno consegnati; questo potrebbe essere utile per scopi di archiviazione. I messaggi firmati vengono ricevuti e possono essere visualizzati da altri destinatari completi di firma. Lo strumento rimuove l'intestazione Bcc: dal messaggio consegnato (come farebbe un client di posta desktop).

Per garantire che i messaggi passino attraverso SparkPost inalterati (il che potrebbe interrompere la firma), lo strumento imposta le opzioni API per mailing "transactional", con monitoraggio delle aperture e dei clic disabilitato.

Se utilizzi la crittografia, tieni presente che lo strumento rileva il singolo indirizzo To: per quello. Gli altri destinatari possono decodificare il corpo del messaggio solo se dispongono della chiave privata del destinatario To:. Se stai solo usando destinatari secondari come record di consegne effettuate, ad esempio, potrebbe comunque andare bene.

Firmato, sigillato consegnato... sono tuo

Questo è il nostro rapido riepilogo su come firmare, sigillare e consegnare messaggi S/MIME tramite SparkPost. Promemoria rapido: il progetto dimostrativo è su Github qui, ho cercato di renderlo facile da installare e usare.

Funzionalità bonus: visualizzare le parti MIME con "mimeshow"

I file interni multipart RFC822 MIME sono piuttosto complessi da leggere per gli esseri umani. Il progetto include uno strumento standalone per rendere questo più facile, chiamato mimeshow.




Questo accetta qualsiasi file email che hai (non solo quelli S/MIME) e mostra la struttura interna. Ecco un esempio:

./mimeshow.py testcases/img_and_attachment.eml




Vedrai:

A Bob <bob.lumreeker@gmail.com>

Da Steve <steve@thetucks.com>

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



Puoi anche usarlo come filtro per fornire un riepilogo leggibile da esseri umani dell'output sparkpostSMIME:

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




Vedrai:

A Bob <bob.lumreeker@gmail.com>

Da Steve <steve@thetucks.com>

Oggetto 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



Finalmente…

Per ricapitolare – abbiamo installato alcuni semplici strumenti da riga di comando per firmare e crittografare le email (il repository Github è qui, completo di istruzioni per l'installazione).




Abbiamo ottenuto la nostra chiave/certificato del mittente per la firma e inviato un messaggio firmato tramite SparkPost. Abbiamo ottenuto un certificato del destinatario per la crittografia e quindi inviato un messaggio firmato e crittografato tramite SparkPost.




Infine, abbiamo provato il pratico strumento indipendente “mimeshow” per esaminare le parti interne dei file email.


Questo è tutto per ora! A presto!.

Iscriviti alla nostra Newsletter.

Rimani aggiornato con Bird attraverso aggiornamenti settimanali nella tua inbox.

Inviando, accetti che Bird possa contattarti riguardo ai nostri prodotti e servizi.

Puoi annullare l'iscrizione in qualsiasi momento. Consulta la Informativa sulla Privacy di Bird per i dettagli sul trattamento dei dati.

Iscriviti alla nostra Newsletter.

Rimani aggiornato con Bird attraverso aggiornamenti settimanali nella tua inbox.

Inviando, accetti che Bird possa contattarti riguardo ai nostri prodotti e servizi.

Puoi annullare l'iscrizione in qualsiasi momento. Consulta la Informativa sulla Privacy di Bird per i dettagli sul trattamento dei dati.

Iscriviti alla nostra Newsletter.

Rimani aggiornato con Bird attraverso aggiornamenti settimanali nella tua inbox.

Inviando, accetti che Bird possa contattarti riguardo ai nostri prodotti e servizi.

Puoi annullare l'iscrizione in qualsiasi momento. Consulta la Informativa sulla Privacy di Bird per i dettagli sul trattamento dei dati.

Pinterest logo
Uber logo
Logo Square
Logo Adobe
Meta logo
Logo PayPal

Azienda

Impostazioni sulla privacy

Newsletter

Rimani aggiornato con Bird attraverso aggiornamenti settimanali nella tua inbox.

Inviando, accetti che Bird possa contattarti riguardo ai nostri prodotti e servizi.

Puoi annullare l'iscrizione in qualsiasi momento. Consulta la Informativa sulla Privacy di Bird per i dettagli sul trattamento dei dati.

Uber logo
Logo Square
Logo Adobe
Meta logo

Azienda

Impostazioni sulla privacy

Newsletter

Rimani aggiornato con Bird attraverso aggiornamenti settimanali nella tua inbox.

Inviando, accetti che Bird possa contattarti riguardo ai nostri prodotti e servizi.

Puoi annullare l'iscrizione in qualsiasi momento. Consulta la Informativa sulla Privacy di Bird per i dettagli sul trattamento dei dati.

Uber logo
Logo Adobe
Meta logo

Reach

Grow

Manage

Automate

Risorse

Azienda

Newsletter

Rimani aggiornato con Bird attraverso aggiornamenti settimanali nella tua inbox.

Inviando, accetti che Bird possa contattarti riguardo ai nostri prodotti e servizi.

Puoi annullare l'iscrizione in qualsiasi momento. Consulta la Informativa sulla Privacy di Bird per i dettagli sul trattamento dei dati.