S/MIME Część 2: Podpisane, Zatwierdzone i Dostarczone przez SparkPost
Ptak
31 gru 2018
1 min read

Kluczowe Wnioski
Premise: Część 2 przechodzi od teorii S/MIME do praktyki — demonstrując, jak cyfrowo podpisywać i szyfrować e-maile przy użyciu SparkPost jako platformy dostarczania.
Goal: Wyposażyć deweloperów w lekki, wierszowy przepływ pracy do podpisywania wychodzących wiadomości, weryfikowania podpisów i (opcjonalnie) szyfrowania treści dla określonych odbiorców.
Highlights:
Setup: Zainstaluj narzędzia demo open-source z GitHub (z automatycznymi kontrolami Travis + pytest). Pipfile obsługuje wszystkie zależności Pythona.
Sender keys:
Utwórz samopodpisany lub wystawiony przez CA certyfikat (
.p12) dla swojej tożsamości e-mail.Podziel go na pliki prywatne (
.pem) i publiczne (.crt) do użycia przez narzędzie podpisujące.
Signing:
Użyj dołączonego skryptu
sparkpostSMIME.pydo podpisywania wiadomości testowych (np.tests/declaration.eml).Potwierdź podpisy wizualnie w klientach takich jak Thunderbird (ikona czerwonej kropki).
Encryption:
Pozyskaj publiczny certyfikat każdego odbiorcy (
.crt).Uruchom narzędzie ponownie, aby wygenerować podpisaną + zaszyfrowaną wiadomość.
Odbiorcy mogą weryfikować i odszyfrować za pomocą swoich kluczy prywatnych.
Delivery via SparkPost:
Skonfiguruj ważną domenę nadawczą i klucz API.
Wysyłaj wiadomości przez API SparkPost z wyłączonym śledzeniem, aby zachować integralność.
Bonus utility – mimeshow:
Wyświetla czytelną strukturę MIME RFC822 dla debugowania lub inspekcji.
Practical tips:
Utrzymuj nazwy plików zgodne z adresem From:.
Unikaj modyfikowania treści wiadomości po podpisaniu.
Używaj Bcc tylko do kopii archiwalnych — ci odbiorcy nie mogą odszyfrować, jeśli wiadomość jest zaszyfrowana do jednego adresu To.
Q&A Highlights
Dlaczego używać S/MIME signing?
Uwierzytelnia nadawcę i zapewnia integralność wiadomości — klienci, tacy jak Thunderbird, pokazują wizualny wskaźnik, gdy podpis jest ważny.
Jak mogę uzyskać mój certyfikat nadawcy?
Możesz samodzielnie podpisać za pomocą OpenSSL (do testów) lub uzyskać zaufany certyfikat od dostawców takich jak Comodo (darmowy do użytku niekomercyjnego).
Czy mogę szyfrować wiadomości dla wielu odbiorców?
Tylko jeśli masz klucz publiczny każdego odbiorcy. Skrypt demo szyfruje domyślnie do pojedynczego adresu To.
Jakie środki ostrożności zapobiegają uszkodzeniu podpisów podczas przesyłania?
Narzędzie ustawia opcje API SparkPost dla wysyłki transakcyjnej i wyłącza śledzenie otwarć/kliknięć, więc ładunek przechodzi bez zmian.
Jaka jest rola mimeshow?
Analizuje surowe pliki e-mail i wyświetla ich wieloczęściową strukturę — przydatne do sprawdzania podpisów S/MIME, załączników i nagłówków.
Co dalej w serii?
Część 3 rozszerza te możliwości S/MIME na lokalne bezpieczne platformy emailowe takie jak PowerMTA i Momentum.
W części 1 mieliśmy szybką wycieczkę po S/MIME, przyglądając się podpisywaniu i szyfrowaniu naszych strumieni wiadomości w różnych klientach pocztowych. Wiadomości S/MIME mogą być podpisywane (co daje dowód tożsamości nadawcy), szyfrowane (utrzymując treść wiadomości w tajemnicy) lub oba.

W tej części, my:
Zainstaluj proste narzędzia wiersza poleceń do podpisywania i szyfrowania e-maili
Uzyskaj klucz/nsertifikujący do podpisywania dla nadawcy
Wyślij podpisaną wiadomość przez SparkPost i spójrz na otrzymaną wiadomość
Opcjonalnie, uzyskaj certyfikat odbiorcy do szyfrowania
Wyślij podpisaną i zaszyfrowaną wiadomość przez SparkPost i spójrz na otrzymaną wiadomość
Wypróbuj przydatne niezależne narzędzie “mimeshow” do przeglądania wewnętrznych plików e-mail.
OK – zaczynajmy!

W tej części, my:
Zainstaluj proste narzędzia wiersza poleceń do podpisywania i szyfrowania e-maili
Uzyskaj klucz/nsertifikujący do podpisywania dla nadawcy
Wyślij podpisaną wiadomość przez SparkPost i spójrz na otrzymaną wiadomość
Opcjonalnie, uzyskaj certyfikat odbiorcy do szyfrowania
Wyślij podpisaną i zaszyfrowaną wiadomość przez SparkPost i spójrz na otrzymaną wiadomość
Wypróbuj przydatne niezależne narzędzie “mimeshow” do przeglądania wewnętrznych plików e-mail.
OK – zaczynajmy!

W tej części, my:
Zainstaluj proste narzędzia wiersza poleceń do podpisywania i szyfrowania e-maili
Uzyskaj klucz/nsertifikujący do podpisywania dla nadawcy
Wyślij podpisaną wiadomość przez SparkPost i spójrz na otrzymaną wiadomość
Opcjonalnie, uzyskaj certyfikat odbiorcy do szyfrowania
Wyślij podpisaną i zaszyfrowaną wiadomość przez SparkPost i spójrz na otrzymaną wiadomość
Wypróbuj przydatne niezależne narzędzie “mimeshow” do przeglądania wewnętrznych plików e-mail.
OK – zaczynajmy!
1. Zainstaluj narzędzia
Narzędzia demonstracyjne są dostępne na GitHub, wraz z instrukcjami instalacji. Możesz zauważyć logo „build passing” – Travis i pytest automatycznie sprawdzają status kompilacji. Zwróć uwagę, że te narzędzia nie są oficjalnie wspierane przez SparkPost, ale starałem się, aby były solidne i łatwe w użyciu.
Jeśli masz znajomość Python i pip, instalacja powinna być całkiem znajoma. Pipfile automatycznie zajmuje się zewnętrznymi zależnościami za Ciebie. Gdy to się zakończy, możesz sprawdzić, czy wszystko jest zainstalowane, uruchamiając
./sparkpostSMIME.py -hPowinieneś zobaczyć przyjazny tekst pomocy. Następnie musimy…
Narzędzia demonstracyjne są dostępne na GitHub, wraz z instrukcjami instalacji. Możesz zauważyć logo „build passing” – Travis i pytest automatycznie sprawdzają status kompilacji. Zwróć uwagę, że te narzędzia nie są oficjalnie wspierane przez SparkPost, ale starałem się, aby były solidne i łatwe w użyciu.
Jeśli masz znajomość Python i pip, instalacja powinna być całkiem znajoma. Pipfile automatycznie zajmuje się zewnętrznymi zależnościami za Ciebie. Gdy to się zakończy, możesz sprawdzić, czy wszystko jest zainstalowane, uruchamiając
./sparkpostSMIME.py -hPowinieneś zobaczyć przyjazny tekst pomocy. Następnie musimy…
Narzędzia demonstracyjne są dostępne na GitHub, wraz z instrukcjami instalacji. Możesz zauważyć logo „build passing” – Travis i pytest automatycznie sprawdzają status kompilacji. Zwróć uwagę, że te narzędzia nie są oficjalnie wspierane przez SparkPost, ale starałem się, aby były solidne i łatwe w użyciu.
Jeśli masz znajomość Python i pip, instalacja powinna być całkiem znajoma. Pipfile automatycznie zajmuje się zewnętrznymi zależnościami za Ciebie. Gdy to się zakończy, możesz sprawdzić, czy wszystko jest zainstalowane, uruchamiając
./sparkpostSMIME.py -hPowinieneś zobaczyć przyjazny tekst pomocy. Następnie musimy…
2. Uzyskaj swój klucz nadawcy / certyfikat do podpisywania
Jeśli już masz plik klucza dla swojej tożsamości nadawcy, możesz przejść do przodu. W przeciwnym razie oto dwie opcje do wyboru:
a) Klucz/certyfikat testowy z własnym podpisem (nieważny zewnętrznie)
Jeśli tylko testujesz, możesz stworzyć certyfikaty i klucze „z własnym podpisem” dla adresu e-mail przy użyciu narzędzia wiersza poleceń openssl na Linuksie, postępując zgodnie z procedurą taką jak ta tutaj. Na końcu tego procesu będziesz mieć plik smime.p12. Zmień jego nazwę, aby pasowała do twojej tożsamości nadawcy, w tym znak @, na przykład, alice@example.com.p12.
lub
b) Zewnętrznie ważne klucze/certyfikaty
Jeśli chcesz uzyskać zewnętrznie ważne klucze/certyfikaty, które umożliwiają podpisywanie, jest lista dostawców tutaj. Znalazłem, że Comodo działa dobrze (darmowe do użytku niekomercyjnego) i jest łatwiejsze niż powyższa procedura własnego podpisu. Przejdź przez proces rejestracji, otrzymaj maila z weryfikacją i upewnij się, że otworzysz link w przeglądarce Firefox. Przejdź do Preferencje Firefox / Prywatność i bezpieczeństwo. Przewiń do Certyfikaty / Wyświetl certyfikaty:

Wybierz swój certyfikat i użyj opcji „Kopia zapasowa”, aby zapisać jako plik w formacie PKCS12 (dodaj rozszerzenie pliku .p12 do nazwy pliku), który zawiera klucz prywatny i publiczny łańcuch certyfikatów.

Podaj hasło, aby zabezpieczyć plik .p12:

Generowanie osobnych plików klucza publicznego (.crt) i prywatnego (.pem)
Niezależnie od tego, czy użyłeś a) czy b), będziesz teraz mieć plik .p12 dla swojej tożsamości nadawcy. To duży krok naprzód – czas na kawę!
Teraz musimy wygenerować osobne publiczne i prywatne pliki klucza, jak poniżej – zastępując swój własny adres e-mail zamiast przykładowego. (Mac OSX i 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
Będziesz musiał wprowadzić hasło, które podałeś wcześniej. Zwróć uwagę, że te ukośniki \ są używane do ucieczki znaku @ – nie do oddzielania nazw w ścieżce katalogowej (to jest ukośnik na Mac OSX i Linux).
Jeśli używasz systemu Windows, dostępne są implementacje openssl, takie jak wbudowane w Git command-line tools MINGW64, ale znalazłem, że zazwyczaj się zawieszają. Prawdopodobnie łatwiej i szybciej będzie to zrobić na Linuksie, a następnie skopiować swoje pliki. Te same narzędzia Git dla Windows zawierają przyjemnego klienta ssh, którego możesz użyć do zalogowania się na maszynie Linuksa, na przykład na instancji Amazon EC2.
2.1 Podpisanie wiadomości
W katalogu testów jest już przykładowy plik źródłowy klucza/certyfikatu i emaila dla alice@example.com, więc możesz uzyskać pewne wyjście, zanim będziesz mieć własne klucze. Po prostu wpisz następujące:
cd tests ../sparkpostSMIME.py example_email1.eml --sign
I otrzymasz:
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 : :
Nie możesz rzeczywiście wysyłać emaili z domeny example.com poprzez SparkPost, chyba że posiadasz tę domenę, więc następnym krokiem jest użycie własnego klucza i wysłanie podpisanej wiadomości z własnej domeny.
Jeśli już masz plik klucza dla swojej tożsamości nadawcy, możesz przejść do przodu. W przeciwnym razie oto dwie opcje do wyboru:
a) Klucz/certyfikat testowy z własnym podpisem (nieważny zewnętrznie)
Jeśli tylko testujesz, możesz stworzyć certyfikaty i klucze „z własnym podpisem” dla adresu e-mail przy użyciu narzędzia wiersza poleceń openssl na Linuksie, postępując zgodnie z procedurą taką jak ta tutaj. Na końcu tego procesu będziesz mieć plik smime.p12. Zmień jego nazwę, aby pasowała do twojej tożsamości nadawcy, w tym znak @, na przykład, alice@example.com.p12.
lub
b) Zewnętrznie ważne klucze/certyfikaty
Jeśli chcesz uzyskać zewnętrznie ważne klucze/certyfikaty, które umożliwiają podpisywanie, jest lista dostawców tutaj. Znalazłem, że Comodo działa dobrze (darmowe do użytku niekomercyjnego) i jest łatwiejsze niż powyższa procedura własnego podpisu. Przejdź przez proces rejestracji, otrzymaj maila z weryfikacją i upewnij się, że otworzysz link w przeglądarce Firefox. Przejdź do Preferencje Firefox / Prywatność i bezpieczeństwo. Przewiń do Certyfikaty / Wyświetl certyfikaty:

Wybierz swój certyfikat i użyj opcji „Kopia zapasowa”, aby zapisać jako plik w formacie PKCS12 (dodaj rozszerzenie pliku .p12 do nazwy pliku), który zawiera klucz prywatny i publiczny łańcuch certyfikatów.

Podaj hasło, aby zabezpieczyć plik .p12:

Generowanie osobnych plików klucza publicznego (.crt) i prywatnego (.pem)
Niezależnie od tego, czy użyłeś a) czy b), będziesz teraz mieć plik .p12 dla swojej tożsamości nadawcy. To duży krok naprzód – czas na kawę!
Teraz musimy wygenerować osobne publiczne i prywatne pliki klucza, jak poniżej – zastępując swój własny adres e-mail zamiast przykładowego. (Mac OSX i 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
Będziesz musiał wprowadzić hasło, które podałeś wcześniej. Zwróć uwagę, że te ukośniki \ są używane do ucieczki znaku @ – nie do oddzielania nazw w ścieżce katalogowej (to jest ukośnik na Mac OSX i Linux).
Jeśli używasz systemu Windows, dostępne są implementacje openssl, takie jak wbudowane w Git command-line tools MINGW64, ale znalazłem, że zazwyczaj się zawieszają. Prawdopodobnie łatwiej i szybciej będzie to zrobić na Linuksie, a następnie skopiować swoje pliki. Te same narzędzia Git dla Windows zawierają przyjemnego klienta ssh, którego możesz użyć do zalogowania się na maszynie Linuksa, na przykład na instancji Amazon EC2.
2.1 Podpisanie wiadomości
W katalogu testów jest już przykładowy plik źródłowy klucza/certyfikatu i emaila dla alice@example.com, więc możesz uzyskać pewne wyjście, zanim będziesz mieć własne klucze. Po prostu wpisz następujące:
cd tests ../sparkpostSMIME.py example_email1.eml --sign
I otrzymasz:
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 : :
Nie możesz rzeczywiście wysyłać emaili z domeny example.com poprzez SparkPost, chyba że posiadasz tę domenę, więc następnym krokiem jest użycie własnego klucza i wysłanie podpisanej wiadomości z własnej domeny.
Jeśli już masz plik klucza dla swojej tożsamości nadawcy, możesz przejść do przodu. W przeciwnym razie oto dwie opcje do wyboru:
a) Klucz/certyfikat testowy z własnym podpisem (nieważny zewnętrznie)
Jeśli tylko testujesz, możesz stworzyć certyfikaty i klucze „z własnym podpisem” dla adresu e-mail przy użyciu narzędzia wiersza poleceń openssl na Linuksie, postępując zgodnie z procedurą taką jak ta tutaj. Na końcu tego procesu będziesz mieć plik smime.p12. Zmień jego nazwę, aby pasowała do twojej tożsamości nadawcy, w tym znak @, na przykład, alice@example.com.p12.
lub
b) Zewnętrznie ważne klucze/certyfikaty
Jeśli chcesz uzyskać zewnętrznie ważne klucze/certyfikaty, które umożliwiają podpisywanie, jest lista dostawców tutaj. Znalazłem, że Comodo działa dobrze (darmowe do użytku niekomercyjnego) i jest łatwiejsze niż powyższa procedura własnego podpisu. Przejdź przez proces rejestracji, otrzymaj maila z weryfikacją i upewnij się, że otworzysz link w przeglądarce Firefox. Przejdź do Preferencje Firefox / Prywatność i bezpieczeństwo. Przewiń do Certyfikaty / Wyświetl certyfikaty:

Wybierz swój certyfikat i użyj opcji „Kopia zapasowa”, aby zapisać jako plik w formacie PKCS12 (dodaj rozszerzenie pliku .p12 do nazwy pliku), który zawiera klucz prywatny i publiczny łańcuch certyfikatów.

Podaj hasło, aby zabezpieczyć plik .p12:

Generowanie osobnych plików klucza publicznego (.crt) i prywatnego (.pem)
Niezależnie od tego, czy użyłeś a) czy b), będziesz teraz mieć plik .p12 dla swojej tożsamości nadawcy. To duży krok naprzód – czas na kawę!
Teraz musimy wygenerować osobne publiczne i prywatne pliki klucza, jak poniżej – zastępując swój własny adres e-mail zamiast przykładowego. (Mac OSX i 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
Będziesz musiał wprowadzić hasło, które podałeś wcześniej. Zwróć uwagę, że te ukośniki \ są używane do ucieczki znaku @ – nie do oddzielania nazw w ścieżce katalogowej (to jest ukośnik na Mac OSX i Linux).
Jeśli używasz systemu Windows, dostępne są implementacje openssl, takie jak wbudowane w Git command-line tools MINGW64, ale znalazłem, że zazwyczaj się zawieszają. Prawdopodobnie łatwiej i szybciej będzie to zrobić na Linuksie, a następnie skopiować swoje pliki. Te same narzędzia Git dla Windows zawierają przyjemnego klienta ssh, którego możesz użyć do zalogowania się na maszynie Linuksa, na przykład na instancji Amazon EC2.
2.1 Podpisanie wiadomości
W katalogu testów jest już przykładowy plik źródłowy klucza/certyfikatu i emaila dla alice@example.com, więc możesz uzyskać pewne wyjście, zanim będziesz mieć własne klucze. Po prostu wpisz następujące:
cd tests ../sparkpostSMIME.py example_email1.eml --sign
I otrzymasz:
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 : :
Nie możesz rzeczywiście wysyłać emaili z domeny example.com poprzez SparkPost, chyba że posiadasz tę domenę, więc następnym krokiem jest użycie własnego klucza i wysłanie podpisanej wiadomości z własnej domeny.
3. Wyślij podpisaną wiadomość za pośrednictwem SparkPost
Teraz użyjmy prawdziwej domeny wysyłającej, skonfigurowanej zgodnie z New User Guide SparkPost. Mamy pliki certyfikatu nadawcy i klucza w bieżącym katalogu:
steve@thetucks.com.crt steve@thetucks.com.pem
Plik tests/declaration.eml jest zawarty w projekcie. To po prostu plik tekstowy, więc możesz dostosować adres From: do swojej własnej domeny wysyłającej i adres To: do swojego odbiorcy testowego. Początek pliku wygląda następująco:
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 Kiedy w kursie wydarzeń ludzkich staje się to konieczne …
Ustaw swój klucz API:
export SPARKPOST_API_KEY=<<Put your API key here>
Wyślij email:
./sparkpostSMIME.py tests/declaration.eml --sign --send_api
Zobaczysz:
Nawiązano połączenie z https://api.sparkpost.com/api/v1 Sending tests/declaration.eml From: Steve <steve@thetucks.com> Do: Bob <bob.lumreeker@gmail.com> OK - w 1,15 sekund
Po chwili email dotrze do skrzynki odbiorczej Boba. Thunderbird wyświetla go z czerwoną kropką na kopercie, co wskazuje na ważny podpis nadawcy.

Sukces! Zakończ tę kawę, zasłużyłeś na to. Jeśli masz problemy, sprawdź, czy adres From: w pliku emaila pasuje do nazwy twoich plików .crt i .pem.
Teraz użyjmy prawdziwej domeny wysyłającej, skonfigurowanej zgodnie z New User Guide SparkPost. Mamy pliki certyfikatu nadawcy i klucza w bieżącym katalogu:
steve@thetucks.com.crt steve@thetucks.com.pem
Plik tests/declaration.eml jest zawarty w projekcie. To po prostu plik tekstowy, więc możesz dostosować adres From: do swojej własnej domeny wysyłającej i adres To: do swojego odbiorcy testowego. Początek pliku wygląda następująco:
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 Kiedy w kursie wydarzeń ludzkich staje się to konieczne …
Ustaw swój klucz API:
export SPARKPOST_API_KEY=<<Put your API key here>
Wyślij email:
./sparkpostSMIME.py tests/declaration.eml --sign --send_api
Zobaczysz:
Nawiązano połączenie z https://api.sparkpost.com/api/v1 Sending tests/declaration.eml From: Steve <steve@thetucks.com> Do: Bob <bob.lumreeker@gmail.com> OK - w 1,15 sekund
Po chwili email dotrze do skrzynki odbiorczej Boba. Thunderbird wyświetla go z czerwoną kropką na kopercie, co wskazuje na ważny podpis nadawcy.

Sukces! Zakończ tę kawę, zasłużyłeś na to. Jeśli masz problemy, sprawdź, czy adres From: w pliku emaila pasuje do nazwy twoich plików .crt i .pem.
Teraz użyjmy prawdziwej domeny wysyłającej, skonfigurowanej zgodnie z New User Guide SparkPost. Mamy pliki certyfikatu nadawcy i klucza w bieżącym katalogu:
steve@thetucks.com.crt steve@thetucks.com.pem
Plik tests/declaration.eml jest zawarty w projekcie. To po prostu plik tekstowy, więc możesz dostosować adres From: do swojej własnej domeny wysyłającej i adres To: do swojego odbiorcy testowego. Początek pliku wygląda następująco:
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 Kiedy w kursie wydarzeń ludzkich staje się to konieczne …
Ustaw swój klucz API:
export SPARKPOST_API_KEY=<<Put your API key here>
Wyślij email:
./sparkpostSMIME.py tests/declaration.eml --sign --send_api
Zobaczysz:
Nawiązano połączenie z https://api.sparkpost.com/api/v1 Sending tests/declaration.eml From: Steve <steve@thetucks.com> Do: Bob <bob.lumreeker@gmail.com> OK - w 1,15 sekund
Po chwili email dotrze do skrzynki odbiorczej Boba. Thunderbird wyświetla go z czerwoną kropką na kopercie, co wskazuje na ważny podpis nadawcy.

Sukces! Zakończ tę kawę, zasłużyłeś na to. Jeśli masz problemy, sprawdź, czy adres From: w pliku emaila pasuje do nazwy twoich plików .crt i .pem.
4. Szyfrowanie wiadomości
Aby zaszyfrować wiadomość, potrzebujesz publicznego klucza odbiorcy w formie certyfikatu. Jest to plik tekstowy, który wygląda tak:
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----- wygląda jak losowe znaki tutaj -----END CERTIFICATE-----
W katalogu testów znajduje się przykładowy certyfikat odbiorcy dla bob@example.com, dzięki czemu możesz ćwiczyć z nim przed uzyskaniem rzeczywistego certyfikatu:
cd tests ../sparkpostSMIME.py example_email1.eml --sign --encrypt
Zobaczysz:
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 :
Zauważysz, że długość wyjścia jest znacznie dłuższa niż w przypadku zaszyfrowanej wiadomości, ponieważ zawiera dużo dodatkowych informacji oraz samą zaszyfrowaną wiadomość.
4.1 Wysyłanie zaszyfrowanej, podpisanej wiadomości przez SparkPost
Wyślijmy zaszyfrowaną wiadomość na prawdziwy adres e-mail. Możesz postępować według tego samego procesu co wcześniej (samopodpisany lub od dostawcy takiego jak Comodo), aby uzyskać klucz publiczny / certyfikat dla swoich adresów odbiorców. Potrzebujesz tylko pliku .crt - odbiorca nigdy nie musi podawać swojego klucza prywatnego (.p12 i .pem).
Mam plik bob.lumreeker@gmail.com.crt dla mojego zamierzonego odbiorcy – pasujący do adresu From: w moim pliku.
Oto polecenie do wysłania:
./sparkpostSMIME.py tests/declaration.eml --sign --encrypt --send_api
Widzę:
Otworzono połączenie do https://api.sparkpost.com/api/v1 Sending tests/declaration.eml From: Steve <steve@thetucks.com> To: Bob <bob.lumreeker@gmail.com> OK - w czasie 1.168 sekundy
Mail pojawia się w Thunderbird z ikoną podpisu „czerwona kropka” i ikoną szyfrowania „kłódka”.

Możesz wysyłać złożone e-maile oparte na HTML-u z linkami i obrazami równie łatwo, jak pokazano w Części 1. Niektóre klienty, takie jak Thunderbird, proszą o pozwolenie na wyświetlanie zewnętrznych linków i obrazów w zaszyfrowanych wiadomościach S/MIME, ale wiadomości tylko podpisane wyświetlają się dobrze w klientach, w tym Thunderbird i Gmail:


Uwaga: rozwijane menu pokazuje „Zweryfikowany adres e-mail”.
Aby zaszyfrować wiadomość, potrzebujesz publicznego klucza odbiorcy w formie certyfikatu. Jest to plik tekstowy, który wygląda tak:
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----- wygląda jak losowe znaki tutaj -----END CERTIFICATE-----
W katalogu testów znajduje się przykładowy certyfikat odbiorcy dla bob@example.com, dzięki czemu możesz ćwiczyć z nim przed uzyskaniem rzeczywistego certyfikatu:
cd tests ../sparkpostSMIME.py example_email1.eml --sign --encrypt
Zobaczysz:
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 :
Zauważysz, że długość wyjścia jest znacznie dłuższa niż w przypadku zaszyfrowanej wiadomości, ponieważ zawiera dużo dodatkowych informacji oraz samą zaszyfrowaną wiadomość.
4.1 Wysyłanie zaszyfrowanej, podpisanej wiadomości przez SparkPost
Wyślijmy zaszyfrowaną wiadomość na prawdziwy adres e-mail. Możesz postępować według tego samego procesu co wcześniej (samopodpisany lub od dostawcy takiego jak Comodo), aby uzyskać klucz publiczny / certyfikat dla swoich adresów odbiorców. Potrzebujesz tylko pliku .crt - odbiorca nigdy nie musi podawać swojego klucza prywatnego (.p12 i .pem).
Mam plik bob.lumreeker@gmail.com.crt dla mojego zamierzonego odbiorcy – pasujący do adresu From: w moim pliku.
Oto polecenie do wysłania:
./sparkpostSMIME.py tests/declaration.eml --sign --encrypt --send_api
Widzę:
Otworzono połączenie do https://api.sparkpost.com/api/v1 Sending tests/declaration.eml From: Steve <steve@thetucks.com> To: Bob <bob.lumreeker@gmail.com> OK - w czasie 1.168 sekundy
Mail pojawia się w Thunderbird z ikoną podpisu „czerwona kropka” i ikoną szyfrowania „kłódka”.

Możesz wysyłać złożone e-maile oparte na HTML-u z linkami i obrazami równie łatwo, jak pokazano w Części 1. Niektóre klienty, takie jak Thunderbird, proszą o pozwolenie na wyświetlanie zewnętrznych linków i obrazów w zaszyfrowanych wiadomościach S/MIME, ale wiadomości tylko podpisane wyświetlają się dobrze w klientach, w tym Thunderbird i Gmail:


Uwaga: rozwijane menu pokazuje „Zweryfikowany adres e-mail”.
Aby zaszyfrować wiadomość, potrzebujesz publicznego klucza odbiorcy w formie certyfikatu. Jest to plik tekstowy, który wygląda tak:
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----- wygląda jak losowe znaki tutaj -----END CERTIFICATE-----
W katalogu testów znajduje się przykładowy certyfikat odbiorcy dla bob@example.com, dzięki czemu możesz ćwiczyć z nim przed uzyskaniem rzeczywistego certyfikatu:
cd tests ../sparkpostSMIME.py example_email1.eml --sign --encrypt
Zobaczysz:
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 :
Zauważysz, że długość wyjścia jest znacznie dłuższa niż w przypadku zaszyfrowanej wiadomości, ponieważ zawiera dużo dodatkowych informacji oraz samą zaszyfrowaną wiadomość.
4.1 Wysyłanie zaszyfrowanej, podpisanej wiadomości przez SparkPost
Wyślijmy zaszyfrowaną wiadomość na prawdziwy adres e-mail. Możesz postępować według tego samego procesu co wcześniej (samopodpisany lub od dostawcy takiego jak Comodo), aby uzyskać klucz publiczny / certyfikat dla swoich adresów odbiorców. Potrzebujesz tylko pliku .crt - odbiorca nigdy nie musi podawać swojego klucza prywatnego (.p12 i .pem).
Mam plik bob.lumreeker@gmail.com.crt dla mojego zamierzonego odbiorcy – pasujący do adresu From: w moim pliku.
Oto polecenie do wysłania:
./sparkpostSMIME.py tests/declaration.eml --sign --encrypt --send_api
Widzę:
Otworzono połączenie do https://api.sparkpost.com/api/v1 Sending tests/declaration.eml From: Steve <steve@thetucks.com> To: Bob <bob.lumreeker@gmail.com> OK - w czasie 1.168 sekundy
Mail pojawia się w Thunderbird z ikoną podpisu „czerwona kropka” i ikoną szyfrowania „kłódka”.

Możesz wysyłać złożone e-maile oparte na HTML-u z linkami i obrazami równie łatwo, jak pokazano w Części 1. Niektóre klienty, takie jak Thunderbird, proszą o pozwolenie na wyświetlanie zewnętrznych linków i obrazów w zaszyfrowanych wiadomościach S/MIME, ale wiadomości tylko podpisane wyświetlają się dobrze w klientach, w tym Thunderbird i Gmail:


Uwaga: rozwijane menu pokazuje „Zweryfikowany adres e-mail”.
Dalsze przemyślenia i rzeczy, na które należy zwrócić uwagę
To narzędzie przyjmuje bardzo proste podejście do pobierania niezbędnych kluczy — po prostu szuka nazwanych plików w bieżącym katalogu. Bardziej złożone rozwiązania, takie jak przechowywanie wszystkich kluczy w bazie danych, można łatwo dodać, ale chciałem, aby kod był możliwie jak najprostszy.
Możesz dodać innych odbiorców za pomocą Cc: i Bcc: i zostaną one dostarczone; może to być przydatne do celów archiwalnych. Odbierane są podpisane wiadomości i mogą być wyświetlane przez innych odbiorców wraz z podpisem. Narzędzie usuwa nagłówek Bcc: z dostarczonej wiadomości (tak jak zrobiłby to klient poczty na komputerze).
Aby zapewnić, że wiadomości przechodzą przez SparkPost bez zmian (co mogłoby złamać podpisywanie), narzędzie ustawia opcje API dla wysyłki „transakcyjnej”, z wyłączonym śledzeniem otwarć i kliknięć.
Jeśli używasz szyfrowania, pamiętaj, że narzędzie odbiera pojedynczy adres To: dla tego. Inni odbiorcy mogą dekodować treść wiadomości tylko wtedy, gdy mają klucz prywatny odbiorcy To:. Jeśli używasz drugorzędnych odbiorców tylko jako zapis dostaw, na przykład, to i tak może być w porządku.
To narzędzie przyjmuje bardzo proste podejście do pobierania niezbędnych kluczy — po prostu szuka nazwanych plików w bieżącym katalogu. Bardziej złożone rozwiązania, takie jak przechowywanie wszystkich kluczy w bazie danych, można łatwo dodać, ale chciałem, aby kod był możliwie jak najprostszy.
Możesz dodać innych odbiorców za pomocą Cc: i Bcc: i zostaną one dostarczone; może to być przydatne do celów archiwalnych. Odbierane są podpisane wiadomości i mogą być wyświetlane przez innych odbiorców wraz z podpisem. Narzędzie usuwa nagłówek Bcc: z dostarczonej wiadomości (tak jak zrobiłby to klient poczty na komputerze).
Aby zapewnić, że wiadomości przechodzą przez SparkPost bez zmian (co mogłoby złamać podpisywanie), narzędzie ustawia opcje API dla wysyłki „transakcyjnej”, z wyłączonym śledzeniem otwarć i kliknięć.
Jeśli używasz szyfrowania, pamiętaj, że narzędzie odbiera pojedynczy adres To: dla tego. Inni odbiorcy mogą dekodować treść wiadomości tylko wtedy, gdy mają klucz prywatny odbiorcy To:. Jeśli używasz drugorzędnych odbiorców tylko jako zapis dostaw, na przykład, to i tak może być w porządku.
To narzędzie przyjmuje bardzo proste podejście do pobierania niezbędnych kluczy — po prostu szuka nazwanych plików w bieżącym katalogu. Bardziej złożone rozwiązania, takie jak przechowywanie wszystkich kluczy w bazie danych, można łatwo dodać, ale chciałem, aby kod był możliwie jak najprostszy.
Możesz dodać innych odbiorców za pomocą Cc: i Bcc: i zostaną one dostarczone; może to być przydatne do celów archiwalnych. Odbierane są podpisane wiadomości i mogą być wyświetlane przez innych odbiorców wraz z podpisem. Narzędzie usuwa nagłówek Bcc: z dostarczonej wiadomości (tak jak zrobiłby to klient poczty na komputerze).
Aby zapewnić, że wiadomości przechodzą przez SparkPost bez zmian (co mogłoby złamać podpisywanie), narzędzie ustawia opcje API dla wysyłki „transakcyjnej”, z wyłączonym śledzeniem otwarć i kliknięć.
Jeśli używasz szyfrowania, pamiętaj, że narzędzie odbiera pojedynczy adres To: dla tego. Inni odbiorcy mogą dekodować treść wiadomości tylko wtedy, gdy mają klucz prywatny odbiorcy To:. Jeśli używasz drugorzędnych odbiorców tylko jako zapis dostaw, na przykład, to i tak może być w porządku.
Podpisane, zapieczętowane, dostarczone... jestem twój
Oto nasz szybki przegląd, jak podpisywać, zabezpieczać i dostarczać wiadomości S/MIME za pośrednictwem SparkPost. Szybkie przypomnienie: projekt demo jest dostępny na GitHub, i starałem się, aby był łatwy do zainstalowania i użycia.
Oto nasz szybki przegląd, jak podpisywać, zabezpieczać i dostarczać wiadomości S/MIME za pośrednictwem SparkPost. Szybkie przypomnienie: projekt demo jest dostępny na GitHub, i starałem się, aby był łatwy do zainstalowania i użycia.
Oto nasz szybki przegląd, jak podpisywać, zabezpieczać i dostarczać wiadomości S/MIME za pośrednictwem SparkPost. Szybkie przypomnienie: projekt demo jest dostępny na GitHub, i starałem się, aby był łatwy do zainstalowania i użycia.
Funkcja bonusowa: wyświetlanie części MIME za pomocą „mimeshow”
Pliki RFC822 MIME multipart są dość skomplikowane do odczytania przez ludzi. Projekt zawiera samodzielne narzędzie, aby to ułatwić, nazywane mimeshow.
Przyjmuje ono dowolne pliki e-mail, które masz (nie tylko te z S/MIME) i pokazuje strukturę wewnętrzną. Oto przykład:
./mimeshow.py testcases/img_and_attachment.eml
Zobaczysz:
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"
Możesz także użyć jako filtr, aby uzyskać czytelne dla ludzi podsumowanie wyjścia sparkpostSMIME :
./sparkpostSMIME.py tests/declaration.eml --sign --encrypt | ./mimeshow.py
Zobaczysz:
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
Pliki RFC822 MIME multipart są dość skomplikowane do odczytania przez ludzi. Projekt zawiera samodzielne narzędzie, aby to ułatwić, nazywane mimeshow.
Przyjmuje ono dowolne pliki e-mail, które masz (nie tylko te z S/MIME) i pokazuje strukturę wewnętrzną. Oto przykład:
./mimeshow.py testcases/img_and_attachment.eml
Zobaczysz:
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"
Możesz także użyć jako filtr, aby uzyskać czytelne dla ludzi podsumowanie wyjścia sparkpostSMIME :
./sparkpostSMIME.py tests/declaration.eml --sign --encrypt | ./mimeshow.py
Zobaczysz:
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
Pliki RFC822 MIME multipart są dość skomplikowane do odczytania przez ludzi. Projekt zawiera samodzielne narzędzie, aby to ułatwić, nazywane mimeshow.
Przyjmuje ono dowolne pliki e-mail, które masz (nie tylko te z S/MIME) i pokazuje strukturę wewnętrzną. Oto przykład:
./mimeshow.py testcases/img_and_attachment.eml
Zobaczysz:
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"
Możesz także użyć jako filtr, aby uzyskać czytelne dla ludzi podsumowanie wyjścia sparkpostSMIME :
./sparkpostSMIME.py tests/declaration.eml --sign --encrypt | ./mimeshow.py
Zobaczysz:
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
W końcu…
Podsumowując – zainstalowaliśmy kilka prostych narzędzi wiersza poleceń do podpisywania i szyfrowania poczty elektronicznej (repozytorium GitHub zawiera kompletne instrukcje instalacji).
Otrzymaliśmy klucz / certyfikat nadawcy do podpisywania i wysłaliśmy podpisaną wiadomość przez SparkPost. Otrzymaliśmy certyfikat odbiorcy do szyfrowania, a następnie wysłaliśmy podpisaną i zaszyfrowaną wiadomość przez SparkPost.
Na koniec wypróbowaliśmy przydatne, samodzielne narzędzie „mimeshow” do przeglądania wewnętrznych plików poczty.
To wszystko na teraz! W naszej kolejnej części pokażemy Ci, jak rozwinąć te możliwości S/MIME na lokalne platformy bezpiecznej poczty elektronicznej, takie jak PowerMTA i Momentum. Do zobaczenia wkrótce!
Podsumowując – zainstalowaliśmy kilka prostych narzędzi wiersza poleceń do podpisywania i szyfrowania poczty elektronicznej (repozytorium GitHub zawiera kompletne instrukcje instalacji).
Otrzymaliśmy klucz / certyfikat nadawcy do podpisywania i wysłaliśmy podpisaną wiadomość przez SparkPost. Otrzymaliśmy certyfikat odbiorcy do szyfrowania, a następnie wysłaliśmy podpisaną i zaszyfrowaną wiadomość przez SparkPost.
Na koniec wypróbowaliśmy przydatne, samodzielne narzędzie „mimeshow” do przeglądania wewnętrznych plików poczty.
To wszystko na teraz! W naszej kolejnej części pokażemy Ci, jak rozwinąć te możliwości S/MIME na lokalne platformy bezpiecznej poczty elektronicznej, takie jak PowerMTA i Momentum. Do zobaczenia wkrótce!
Podsumowując – zainstalowaliśmy kilka prostych narzędzi wiersza poleceń do podpisywania i szyfrowania poczty elektronicznej (repozytorium GitHub zawiera kompletne instrukcje instalacji).
Otrzymaliśmy klucz / certyfikat nadawcy do podpisywania i wysłaliśmy podpisaną wiadomość przez SparkPost. Otrzymaliśmy certyfikat odbiorcy do szyfrowania, a następnie wysłaliśmy podpisaną i zaszyfrowaną wiadomość przez SparkPost.
Na koniec wypróbowaliśmy przydatne, samodzielne narzędzie „mimeshow” do przeglądania wewnętrznych plików poczty.
To wszystko na teraz! W naszej kolejnej części pokażemy Ci, jak rozwinąć te możliwości S/MIME na lokalne platformy bezpiecznej poczty elektronicznej, takie jak PowerMTA i Momentum. Do zobaczenia wkrótce!



