
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 questa puntata, noi:
Installeremo alcuni semplici strumenti da linea di comando per firmare e crittografare le email
Otterrai la tua chiave / certificato del mittente per la firma
Invierai un messaggio firmato tramite SparkPost, e esaminerai il messaggio ricevuto
Facoltativamente, otterrai il certificato del destinatario per la crittografia
Invierai un messaggio firmato e crittografato tramite SparkPost, e esaminerai il messaggio ricevuto
Prova un utile strumento autonomo "mimeshow" per esaminare i dettagli interni del file email.
OK – iniziamo!
1. Installa gli strumenti
Gli strumenti dimostrativi sono disponibili su GitHub, completi di istruzioni per l'installazione. Potresti notare il logo "build passing" – Travis e pytest controllano automaticamente lo stato del 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 risultare abbastanza famigliare. Il Pipfile si occupa automaticamente delle dipendenze esterne per te. Una volta terminato, puoi verificare che tutto sia installato eseguendo
Dovresti vedere il testo di aiuto amichevole. Successivamente, dobbiamo…
2. Ottieni la tua chiave mittente / certificato per la firma
3. Invia un messaggio firmato tramite SparkPost
Ora usiamo un dominio di invio reale, configurato secondo la Guida Utente Nuovo di SparkPost. Abbiamo il certificato del mittente e i file chiave nella directory corrente:
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 è simile a questo:
To: Bob <bob.lumreeker@gmail.com> From: Steve <steve@thetucks.com> Subject: Here is our declaration MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Content-Language: en-GB Quando nel corso degli eventi umani diventa necessario …
Imposta la tua chiave API:
Invia l'email:
Vedrai:
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.15 secondi
Un secondo o giù di lì più tardi, l'email arriva nella inbox di Bob. Thunderbird la mostra 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 delle email corrisponda al nome dei tuoi file .crt e .pem.
4. Crittografia dei messaggi
Per crittografare un messaggio, hai bisogno della chiave pubblica del destinatario in forma di certificato. Questo è un file di testo che appare così:
Attributi della borsa 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 esercitarti con esso prima di avere un certificato reale:
Vedrai:
Noterai che la lunghezza dell'output è abbastanza più lunga rispetto a un messaggio crittografato perché contiene molte informazioni extra oltre al messaggio criptato stesso.
4.1 Invio di un messaggio crittografato e firmato attraverso SparkPost
Inviamo un messaggio crittografato a un indirizzo email reale. Puoi seguire lo stesso processo di prima (auto-firmato o un provider come Comodo) per ottenere una chiave pubblica / certificato per i tuoi indirizzi destinatari. Hai bisogno solo del file .crt – il destinatario non deve mai darti la sua chiave privata (.p12 e .pem file).
Ho il file bob.lumreeker@gmail.com.crt per il mio destinatario previsto – che corrisponde all'indirizzo From: nel mio file.
Ecco il comando per l'invio:
Vedo:
Connessione aperta a https://api.sparkpost.com/api/v1 Sending tests/declaration.eml From: Steve <steve@thetucks.com> To: Bob <bob.lumreeker@gmail.com> OK - in 1.168 secondi
La posta appare in Thunderbird con l'icona della firma “punto rosso” e l'icona del lucchetto crittografato.

Puoi inviare email basate su HTML complesse con collegamenti e immagini con la stessa facilità, come quella mostrata nella Parte 1. Alcuni client come Thunderbird chiedono il permesso per visualizzare collegamenti e immagini esterni dentro messaggi S/MIME crittografati, ma i messaggi solo firmati si visualizzano bene nei client inclusi Thunderbird e Gmail:


Nota che il menu a discesa 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
Ecco una nostra rapida panoramica su come firmare, sigillare e consegnare messaggi S/MIME tramite SparkPost. Promemoria veloce: il progetto demo è disponibile su GitHub, e ho cercato di renderlo facile da installare e utilizzare.
Funzionalità bonus: visualizzare le parti MIME con "mimeshow"
I file multiparte MIME RFC822 sono piuttosto complessi da leggere per gli esseri umani. Il progetto include uno strumento autonomo chiamato mimeshow per rendere questo più facile.
Questo prende qualsiasi file email che hai (non solo quelli S/MIME) e mostra la struttura interna. Ecco un esempio:
Vedrai:
Puoi anche usarlo come filtro per fornire un riepilogo leggibile da esseri umani dell'output di sparkpostSMIME:
Vedrai:
Finalmente…
Per ricapitolare – abbiamo installato alcuni semplici strumenti da riga di comando per firmare e crittografare le email (il GitHub repo include istruzioni complete per l'installazione).
Abbiamo ottenuto la nostra chiave / certificato del mittente per firmare e inviato un messaggio firmato tramite SparkPost. Abbiamo ottenuto un certificato del destinatario per la crittografia, quindi abbiamo inviato un messaggio firmato e crittografato tramite SparkPost.
Infine, abbiamo provato l'utile strumento autonomo “mimeshow” per esaminare gli interni dei file email.
Questo è tutto per ora! Nel nostro prossimo episodio, ti mostreremo come estendere queste capacità S/MIME a piattaforme email sicure on-premises come PowerMTA e Momentum. A presto!