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

Uccello

31 dic 2018

Email

1 min read

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

Punti Chiave

    • Premessa: La Parte 2 passa dalla teoria S/MIME alla pratica, dimostrando come firmare e crittografare le email digitalmente utilizzando SparkPost come piattaforma di consegna.

    • Obiettivo: Fornire agli sviluppatori un flusso di lavoro leggero da riga di comando per firmare i messaggi in uscita, verificare le firme e (opzionalmente) crittografare i contenuti per destinatari specifici.

    • Punti salienti:

      1. Configurazione: Installa gli strumenti dimostrativi open-source da GitHub (con controlli automatici Travis + pytest). Il file Pipfile gestisce tutte le dipendenze Python.

      2. Chiavi del mittente:

        • Crea un certificato autofirmato o emesso da CA (.p12) per la tua identità email.

        • Dividilo in file privati (.pem) e pubblici (.crt) da utilizzare con lo strumento di firma.

      3. Firma:

        • Utilizza lo script incluso sparkpostSMIME.py per firmare i messaggi di prova (ad es., tests/declaration.eml).

        • Conferma visivamente le firme nei client come Thunderbird (icona del punto rosso).

      4. Crittografia:

        • Ottieni il certificato pubblico di ciascun destinatario (.crt).

        • Esegui di nuovo lo strumento per produrre un messaggio firmato + crittografato.

        • I destinatari possono verificare e decrittografare utilizzando le loro chiavi private.

      5. Consegna tramite SparkPost:

        • Configura un dominio di invio valido e una chiave API.

        • Invia messaggi attraverso l'API di SparkPost con tracciamento disabilitato per preservare l'integrità.

      6. Utility bonus – mimeshow:

        • Mostra la struttura MIME RFC822 leggibile dall'uomo per debugging o ispezione.

      7. Consigli pratici:

        • Mantieni i nomi dei file allineati con l'indirizzo del mittente.

        • Evita di modificare i corpi dei messaggi dopo la firma.

        • Usa Bcc solo per le copie di archiviazione - quei destinatari non possono decrittografare se la mail è crittografata su un singolo indirizzo a cui.

Punti salienti del Q&A

  • Perché utilizzare la firma S/MIME?

    Autenticà il mittente e garantisce l'integrità del messaggio — i client come Thunderbird mostrano un indicatore visivo quando la firma è valida.

  • Come posso ottenere il mio certificato di mittente?

    O firmare autonomamente tramite OpenSSL (per test) o ottenere un certificato affidabile da fornitori come Comodo (gratuito per uso non commerciale).

  • Posso crittografare messaggi per più destinatari?

    Solo se hai la chiave pubblica di ciascun destinatario. Lo script demo cripta per l'indirizzo To singolo per impostazione predefinita.

  • Quali garanzie impediscono alle firme di rompersi durante il trasporto?

    Lo strumento imposta le opzioni dell'API SparkPost per l'invio transazionale e disabilita il tracciamento delle aperture/clic, in modo che il payload passi attraverso senza modifiche.

  • Qual è il ruolo di mimeshow?

    Analizza file di email grezzi e stampa la loro struttura multipart - utile per ispezionare le firme S/MIME, gli allegati e le intestazioni.

  • Cosa c'è dopo nella serie?

    La parte 3 estende queste capacità S/MIME a piattaforme di email sicure on-premises come PowerMTA e Momentum.

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

Diagram illustrating email security layers showing the relationship between S/MIME signing, S/MIME encryption, and TLS connections in the email delivery process from message source through email server to recipient.

In questo episodio, faremo:

  • Installare alcuni semplici strumenti da riga di comando per firmare e crittografare le email

  • Ottenere la tua chiave / certificato mittente per la firma

  • Inviare un messaggio firmato tramite SparkPost e guardare il messaggio ricevuto

  • Eventualmente, ottenere il certificato del destinatario per la crittografia

  • Inviare un messaggio firmato e crittografato tramite SparkPost e guardare il messaggio ricevuto

  • Provare un comodo strumento indipendente “mimeshow” per esaminare gli interni del file email.

OK – iniziamo!

Diagram illustrating email security layers showing the relationship between S/MIME signing, S/MIME encryption, and TLS connections in the email delivery process from message source through email server to recipient.

In questo episodio, faremo:

  • Installare alcuni semplici strumenti da riga di comando per firmare e crittografare le email

  • Ottenere la tua chiave / certificato mittente per la firma

  • Inviare un messaggio firmato tramite SparkPost e guardare il messaggio ricevuto

  • Eventualmente, ottenere il certificato del destinatario per la crittografia

  • Inviare un messaggio firmato e crittografato tramite SparkPost e guardare il messaggio ricevuto

  • Provare un comodo strumento indipendente “mimeshow” per esaminare gli interni del file email.

OK – iniziamo!

Diagram illustrating email security layers showing the relationship between S/MIME signing, S/MIME encryption, and TLS connections in the email delivery process from message source through email server to recipient.

In questo episodio, faremo:

  • Installare alcuni semplici strumenti da riga di comando per firmare e crittografare le email

  • Ottenere la tua chiave / certificato mittente per la firma

  • Inviare un messaggio firmato tramite SparkPost e guardare il messaggio ricevuto

  • Eventualmente, ottenere il certificato del destinatario per la crittografia

  • Inviare un messaggio firmato e crittografato tramite SparkPost e guardare il messaggio ricevuto

  • Provare un comodo strumento indipendente “mimeshow” per esaminare gli interni del file email.

OK – iniziamo!

Funzione bonus: visualizzazione delle parti MIME con “mimeshow”

Le interne dei file MIME multipart RFC822 sono abbastanza complesse da leggere per gli esseri umani. Il progetto include uno strumento autonomo per semplificare questo, chiamato mimeshow.

Questo prende 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:

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"

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

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


Vedrai:

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

Le interne dei file MIME multipart RFC822 sono abbastanza complesse da leggere per gli esseri umani. Il progetto include uno strumento autonomo per semplificare questo, chiamato mimeshow.

Questo prende 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:

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"

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

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


Vedrai:

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

Le interne dei file MIME multipart RFC822 sono abbastanza complesse da leggere per gli esseri umani. Il progetto include uno strumento autonomo per semplificare questo, chiamato mimeshow.

Questo prende 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:

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"

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

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


Vedrai:

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

1. Installa gli strumenti

Gli strumenti di dimostrazione sono disponibili su GitHub, completi di istruzioni per l'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 sembrare abbastanza familiare. Il Pipfile si occupa automaticamente delle dipendenze esterne per te. Una volta completato, puoi verificare che tutto sia installato eseguendo

./sparkpostSMIME.py -h

Dovresti vedere il testo di aiuto amichevole. Ora dobbiamo…

Gli strumenti di dimostrazione sono disponibili su GitHub, completi di istruzioni per l'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 sembrare abbastanza familiare. Il Pipfile si occupa automaticamente delle dipendenze esterne per te. Una volta completato, puoi verificare che tutto sia installato eseguendo

./sparkpostSMIME.py -h

Dovresti vedere il testo di aiuto amichevole. Ora dobbiamo…

Gli strumenti di dimostrazione sono disponibili su GitHub, completi di istruzioni per l'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 sembrare abbastanza familiare. Il Pipfile si occupa automaticamente delle dipendenze esterne per te. Una volta completato, puoi verificare che tutto sia installato eseguendo

./sparkpostSMIME.py -h

Dovresti vedere il testo di aiuto amichevole. Ora dobbiamo…

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

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

a) Chiave / certificato di test autofirmato (non valido esternamente)

Se stai solo testando, puoi creare certificati e chiavi "autofirmati" per un indirizzo email utilizzando 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 corrispondere alla tua identità di invio, inclusi il segno @, per esempio, alice@example.com.p12 .

oppure

b) Chiavi / certificati validi esternamente

Se vuoi ottenere chiavi / certificati validi esternamente che ti permettano di firmare, c'è un elenco di fornitori qui. Ho trovato che Comodo funziona bene (gratis per uso non commerciale), ed è più semplice della procedura di autofirma sopra. Segui il processo di registrazione, ricevi la tua email di convalida e assicurati di aprire il link in Firefox. Vai su Preferenze di Firefox / Privacy e Sicurezza. Scorri fino a Certificati / Visualizza Certificati:

Firefox browser settings page showing certificate management options under the Privacy & Security section, with controls for how the browser handles personal certificate requests.


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

Certificate Manager window showing a list of software security device certificates from COMODO CA Limited, with details including certificate names and serial numbers


Fornisci una password per proteggere il file .p12:

Certificate backup password entry dialog with password fields and strength meter


Genera 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. Questo è un grande passo avanti – prendi un caffè adesso!

Ora dobbiamo generare file chiave pubblica e privata separati in questo modo – sostituendo il tuo indirizzo email a quello di 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

Dovrai inserire la password fornita in precedenza. Nota che quelle barre rovesciate \ sono usate per escapare il segno @ – non separano i nomi di un percorso di directory (quella è una barra in avanti / su Mac OSX e Linux).

Se stai usando Windows, ci sono implementazioni di openssl disponibili come quella di MINGW64 integrata negli strumenti da riga di comando Git, ma ho trovato che tendeva 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 fittizia e un file sorgente email nella directory di test per alice@example.com, quindi puoi ottenere un output anche prima di avere le tue chiavi. Basta digitare quanto segue:

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

E otterrai:

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

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

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

a) Chiave / certificato di test autofirmato (non valido esternamente)

Se stai solo testando, puoi creare certificati e chiavi "autofirmati" per un indirizzo email utilizzando 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 corrispondere alla tua identità di invio, inclusi il segno @, per esempio, alice@example.com.p12 .

oppure

b) Chiavi / certificati validi esternamente

Se vuoi ottenere chiavi / certificati validi esternamente che ti permettano di firmare, c'è un elenco di fornitori qui. Ho trovato che Comodo funziona bene (gratis per uso non commerciale), ed è più semplice della procedura di autofirma sopra. Segui il processo di registrazione, ricevi la tua email di convalida e assicurati di aprire il link in Firefox. Vai su Preferenze di Firefox / Privacy e Sicurezza. Scorri fino a Certificati / Visualizza Certificati:

Firefox browser settings page showing certificate management options under the Privacy & Security section, with controls for how the browser handles personal certificate requests.


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

Certificate Manager window showing a list of software security device certificates from COMODO CA Limited, with details including certificate names and serial numbers


Fornisci una password per proteggere il file .p12:

Certificate backup password entry dialog with password fields and strength meter


Genera 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. Questo è un grande passo avanti – prendi un caffè adesso!

Ora dobbiamo generare file chiave pubblica e privata separati in questo modo – sostituendo il tuo indirizzo email a quello di 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

Dovrai inserire la password fornita in precedenza. Nota che quelle barre rovesciate \ sono usate per escapare il segno @ – non separano i nomi di un percorso di directory (quella è una barra in avanti / su Mac OSX e Linux).

Se stai usando Windows, ci sono implementazioni di openssl disponibili come quella di MINGW64 integrata negli strumenti da riga di comando Git, ma ho trovato che tendeva 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 fittizia e un file sorgente email nella directory di test per alice@example.com, quindi puoi ottenere un output anche prima di avere le tue chiavi. Basta digitare quanto segue:

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

E otterrai:

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

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

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

a) Chiave / certificato di test autofirmato (non valido esternamente)

Se stai solo testando, puoi creare certificati e chiavi "autofirmati" per un indirizzo email utilizzando 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 corrispondere alla tua identità di invio, inclusi il segno @, per esempio, alice@example.com.p12 .

oppure

b) Chiavi / certificati validi esternamente

Se vuoi ottenere chiavi / certificati validi esternamente che ti permettano di firmare, c'è un elenco di fornitori qui. Ho trovato che Comodo funziona bene (gratis per uso non commerciale), ed è più semplice della procedura di autofirma sopra. Segui il processo di registrazione, ricevi la tua email di convalida e assicurati di aprire il link in Firefox. Vai su Preferenze di Firefox / Privacy e Sicurezza. Scorri fino a Certificati / Visualizza Certificati:

Firefox browser settings page showing certificate management options under the Privacy & Security section, with controls for how the browser handles personal certificate requests.


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

Certificate Manager window showing a list of software security device certificates from COMODO CA Limited, with details including certificate names and serial numbers


Fornisci una password per proteggere il file .p12:

Certificate backup password entry dialog with password fields and strength meter


Genera 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. Questo è un grande passo avanti – prendi un caffè adesso!

Ora dobbiamo generare file chiave pubblica e privata separati in questo modo – sostituendo il tuo indirizzo email a quello di 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

Dovrai inserire la password fornita in precedenza. Nota che quelle barre rovesciate \ sono usate per escapare il segno @ – non separano i nomi di un percorso di directory (quella è una barra in avanti / su Mac OSX e Linux).

Se stai usando Windows, ci sono implementazioni di openssl disponibili come quella di MINGW64 integrata negli strumenti da riga di comando Git, ma ho trovato che tendeva 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 fittizia e un file sorgente email nella directory di test per alice@example.com, quindi puoi ottenere un output anche prima di avere le tue chiavi. Basta digitare quanto segue:

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

E otterrai:

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

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

3. Invia un messaggio firmato tramite SparkPost

Ora utilizziamo un dominio di invio reale, impostato secondo la Guida per Nuovi Utenti di SparkPost. Abbiamo i file del certificato e della chiave del mittente 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 Del: per adattarlo al tuo dominio di invio e l'indirizzo A: per adattarlo al tuo destinatario di prova. L'inizio del file appare così:

A: Bob <bob.lumreeker@gmail.com> Del: 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=<<Put your API key here>

Invia l'email:

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

Vedrai:

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

Un secondo 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.

Thunderbird email inbox showing an email with a subject 'Here is our declaration'

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

Ora utilizziamo un dominio di invio reale, impostato secondo la Guida per Nuovi Utenti di SparkPost. Abbiamo i file del certificato e della chiave del mittente 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 Del: per adattarlo al tuo dominio di invio e l'indirizzo A: per adattarlo al tuo destinatario di prova. L'inizio del file appare così:

A: Bob <bob.lumreeker@gmail.com> Del: 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=<<Put your API key here>

Invia l'email:

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

Vedrai:

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

Un secondo 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.

Thunderbird email inbox showing an email with a subject 'Here is our declaration'

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

Ora utilizziamo un dominio di invio reale, impostato secondo la Guida per Nuovi Utenti di SparkPost. Abbiamo i file del certificato e della chiave del mittente 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 Del: per adattarlo al tuo dominio di invio e l'indirizzo A: per adattarlo al tuo destinatario di prova. L'inizio del file appare così:

A: Bob <bob.lumreeker@gmail.com> Del: 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=<<Put your API key here>

Invia l'email:

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

Vedrai:

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

Un secondo 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.

Thunderbird email inbox showing an email with a subject 'Here is our declaration'

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

4. Crittografare i messaggi

Per crittografare un messaggio, è necessario il certificato della chiave pubblica del destinatario. 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 avere caratteri casuali qui dentro -----END CERTIFICATE-----

Esiste un certificato per un destinatario fittizio per bob@example.com nella directory dei test, quindi puoi esercitarti 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: 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 :

Noterai che la lunghezza dell'output è significativamente più lunga rispetto a un messaggio crittografato perché porta con sé una grande quantità di informazioni extra oltre al messaggio stesso mescolato.


4.1 Inviare 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 ha mai bisogno di darti la propria chiave privata (.p12 e .pem).

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

Questa è la comando per inviare:

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

Vedo:

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

L'email appare in Thunderbird con l'icona del “punto rosso” di firma e l'icona “padlock” crittografata.

Thunderbird email view with signature and encryption icons

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

Avocado marketing email with guacamole in a blue bowl and product order sectionsGmail interface showing an HTML email with guacamole image and Avocado marketing content

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

Per crittografare un messaggio, è necessario il certificato della chiave pubblica del destinatario. 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 avere caratteri casuali qui dentro -----END CERTIFICATE-----

Esiste un certificato per un destinatario fittizio per bob@example.com nella directory dei test, quindi puoi esercitarti 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: 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 :

Noterai che la lunghezza dell'output è significativamente più lunga rispetto a un messaggio crittografato perché porta con sé una grande quantità di informazioni extra oltre al messaggio stesso mescolato.


4.1 Inviare 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 ha mai bisogno di darti la propria chiave privata (.p12 e .pem).

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

Questa è la comando per inviare:

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

Vedo:

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

L'email appare in Thunderbird con l'icona del “punto rosso” di firma e l'icona “padlock” crittografata.

Thunderbird email view with signature and encryption icons

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

Avocado marketing email with guacamole in a blue bowl and product order sectionsGmail interface showing an HTML email with guacamole image and Avocado marketing content

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

Per crittografare un messaggio, è necessario il certificato della chiave pubblica del destinatario. 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 avere caratteri casuali qui dentro -----END CERTIFICATE-----

Esiste un certificato per un destinatario fittizio per bob@example.com nella directory dei test, quindi puoi esercitarti 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: 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 :

Noterai che la lunghezza dell'output è significativamente più lunga rispetto a un messaggio crittografato perché porta con sé una grande quantità di informazioni extra oltre al messaggio stesso mescolato.


4.1 Inviare 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 ha mai bisogno di darti la propria chiave privata (.p12 e .pem).

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

Questa è la comando per inviare:

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

Vedo:

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

L'email appare in Thunderbird con l'icona del “punto rosso” di firma e l'icona “padlock” crittografata.

Thunderbird email view with signature and encryption icons

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

Avocado marketing email with guacamole in a blue bowl and product order sectionsGmail interface showing an HTML email with guacamole image and Avocado marketing content

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

Ulteriori riflessioni e cose di cui essere consapevoli

Questo strumento adotta un approccio super semplice per raccogliere le chiavi necessarie – cerca semplicemente file nominati nella directory corrente. Disposizioni più complesse, come mantenere tutte le chiavi in un database, potrebbero essere facilmente aggiunte, 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 fini 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 invariati (il che potrebbe compromettere la firma), lo strumento imposta le opzioni API per la posta “transazionale”, con tracciamento di apertura e clic disabilitato.

Se utilizzi la crittografia, tieni presente che lo strumento raccoglie il singolo indirizzo To: per questo. Gli altri destinatari possono decifrare il corpo del messaggio solo se possiedono la chiave privata del destinatario To:. Se stai semplicemente utilizzando destinatari secondari come registrazione delle consegne effettuate, ad esempio, potrebbe andare bene comunque.

Questo strumento adotta un approccio super semplice per raccogliere le chiavi necessarie – cerca semplicemente file nominati nella directory corrente. Disposizioni più complesse, come mantenere tutte le chiavi in un database, potrebbero essere facilmente aggiunte, 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 fini 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 invariati (il che potrebbe compromettere la firma), lo strumento imposta le opzioni API per la posta “transazionale”, con tracciamento di apertura e clic disabilitato.

Se utilizzi la crittografia, tieni presente che lo strumento raccoglie il singolo indirizzo To: per questo. Gli altri destinatari possono decifrare il corpo del messaggio solo se possiedono la chiave privata del destinatario To:. Se stai semplicemente utilizzando destinatari secondari come registrazione delle consegne effettuate, ad esempio, potrebbe andare bene comunque.

Questo strumento adotta un approccio super semplice per raccogliere le chiavi necessarie – cerca semplicemente file nominati nella directory corrente. Disposizioni più complesse, come mantenere tutte le chiavi in un database, potrebbero essere facilmente aggiunte, 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 fini 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 invariati (il che potrebbe compromettere la firma), lo strumento imposta le opzioni API per la posta “transazionale”, con tracciamento di apertura e clic disabilitato.

Se utilizzi la crittografia, tieni presente che lo strumento raccoglie il singolo indirizzo To: per questo. Gli altri destinatari possono decifrare il corpo del messaggio solo se possiedono la chiave privata del destinatario To:. Se stai semplicemente utilizzando destinatari secondari come registrazione delle consegne effettuate, ad esempio, potrebbe andare bene comunque.

Firmato, sigillato e consegnato... sei mio

Questa è la nostra rapida panoramica su come firmare, sigillare e inviare messaggi S/MIME tramite SparkPost. Promemoria veloce: il progetto demo è disponibile su GitHub, e ho cercato di renderlo facile da installare e utilizzare.

Questa è la nostra rapida panoramica su come firmare, sigillare e inviare messaggi S/MIME tramite SparkPost. Promemoria veloce: il progetto demo è disponibile su GitHub, e ho cercato di renderlo facile da installare e utilizzare.

Questa è la nostra rapida panoramica su come firmare, sigillare e inviare messaggi S/MIME tramite SparkPost. Promemoria veloce: il progetto demo è disponibile su GitHub, e ho cercato di renderlo facile da installare e utilizzare.

Altre notizie

Leggi di più da questa categoria

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

La piattaforma completa nativa dell'IA che si espande con la tua azienda.

© 2025 Uccello

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

La piattaforma completa nativa dell'IA che si espande con la tua azienda.

© 2025 Uccello