
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!
1. Zainstaluj narzędzia
Narzędzia demonstracyjne są na Github tutaj, wraz z instrukcjami instalacji. Możesz zauważyć logo „build passing” – Travis i pytest automatycznie sprawdzają status kompilacji. Zauważ, ż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 pewne doświadczenie z Pythona i pip, instalacja powinna być całkiem znajoma. Pipfile automatycznie zajmuje się zewnętrznymi zależnościami za Ciebie. Gdy to się skończy, możesz sprawdzić, czy wszystko zostało zainstalowane uruchamiając
./sparkpostSMIME.py -h
Powinieneś zobaczyć przyjazny tekst pomocy. Następnie musimy…
2. Uzyskaj swój klucz nadawcy / certyfikat do podpisywania
3. Wyślij podpisaną wiadomość za pośrednictwem SparkPost
Teraz użyjmy prawdziwej domeny wysyłającej, skonfigurowanej zgodnie z Przewodnikiem dla Nowych Użytkowników SparkPost. Mamy certyfikat nadawcy i pliki kluczy w bieżącym katalogu:
steve@thetucks.com.crt steve@thetucks.com.pem
Plik tests/declaration.eml jest dołączony do projektu. To tylko plik tekstowy, więc możesz dostosować adres Od: tak, aby pasował do Twojej własnej domeny wysyłającej i adres Do: tak, aby pasował do Twojego adresata testowego. Początek pliku wygląda tak:
Do: Bob <bob.lumreeker@gmail.com> Od: Steve <steve@thetucks.com> Temat: Oto nasza deklaracja MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Content-Language: en-GB Gdy w toku wydarzeń ludzkich staje się to konieczne …
Ustaw swój klucz API:
export SPARKPOST_API_KEY=<<Tutaj wprowadź swój klucz API>>
Wyślij e-mail:
./sparkpostSMIME.py tests/declaration.eml --sign --send_api
Zobaczysz:
Otworzono połączenie z https://api.sparkpost.com/api/v1 Wysyłanie tests/declaration.eml Od: Steve <steve@thetucks.com> Do: Bob <bob.lumreeker@gmail.com> OK - w 1.15 sekundy
Po około sekundzie e-mail pojawia się w Skrzynce odbiorczej Boba. Thunderbird wyświetla go z czerwoną kropką na kopercie, wskazującą na ważny podpis nadawcy.

Sukces! Wypij tę kawę do końca, zasłużyłeś na to. Jeśli masz problemy, sprawdź, czy Twój adres Od: w pliku e-mail pasuje do nazwy Twoich plików .crt i .pem.
4. Szyfrowanie wiadomości
Aby zaszyfrować wiadomość, potrzebujesz klucza publicznego swojego odbiorcy w formie certyfikatu. Jest to plik tekstowy, który wygląda następująco:
Atrybuty torby 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 tests znajduje się przykładowy certyfikat odbiorcy dla bob@example.com, więc możesz z nim poćwiczyć, zanim będziesz miał prawdziwy certyfikat:
cd tests ../sparkpostSMIME.py example_email1.eml --sign --encrypt
Zobaczysz:
Zauważysz, że długość wyniku jest dość znacznie dłuższa niż w przypadku zaszyfrowanej wiadomości, ponieważ zawiera wiele 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 dostawca taki jak Comodo), aby uzyskać klucz publiczny/certyfikat dla swoich własnych adresów odbiorców. Potrzebny jest tylko plik .crt — odbiorca nigdy nie musi przekazywać Ci swojego klucza prywatnego (pliki .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ę:
Nawiązano połączenie z https://api.sparkpost.com/api/v1 Wysłanie tests/declaration.eml Od: Steve <steve@thetucks.com> Do: Bob <bob.lumreeker@gmail.com> OK - w 1,168 sekundach
Poczta pojawia się w Thunderbirdzie z ikoną podpisu „czerwona kropka” i ikoną zaszyfrowania „kłódka”.

Możesz łatwo wysyłać złożone e-maile oparte na HTML z linkami i obrazami, podobnie jak ten pokazany 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 tylko podpisane wiadomości wyświetlają się dobrze w klientach, takich jak Thunderbird i Gmail:


Zwróć uwagę, że w rozwijanym menu widnieje „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.
Podpisane, zapieczętowane, dostarczone... jestem twój
To nasz szybki przegląd tego, jak podpisywać, pieczętować i dostarczać wiadomości S/MIME przez SparkPost. Krótkie przypomnienie: projekt demonstracyjny znajduje się na Github tutaj, starałem się, aby instalacja i używanie było łatwe.
Funkcja bonusowa: wyświetlanie części MIME za pomocą „mimeshow”
Wewnętrzna struktura plików RFC822 MIME multipart jest dość skomplikowana do odczytania przez ludzi. Projekt obejmuje samodzielne narzędzie ułatwiające to, nazwane mimeshow.
Pozwala to na przetwarzanie dowolnych plików e-mail, które posiadasz (nie tylko tych typu S/MIME) i pokazuje ich wewnętrzną strukturę. Oto przykład:
./mimeshow.py testcases/img_and_attachment.eml
Zobaczysz:
Możesz również użyć jako filtr do podania zrozumiałego dla człowieka podsumowania wyjścia sparkpostSMIME:
./sparkpostSMIME.py tests/declaration.eml --sign --encrypt | ./mimeshow.py
Zobaczysz:
W końcu…
Aby podsumować – zainstalowaliśmy kilka prostych narzędzi wiersza poleceń do podpisywania i szyfrowania wiadomości e-mail (repozytorium Github znajduje się tutaj, wraz z instrukcjami instalacji).
Otrzymaliśmy nasz klucz/nasz certyfikat nadawcy do podpisywania i wysłaliśmy podpisaną wiadomość za pośrednictwem SparkPost. Otrzymaliśmy certyfikat odbiorcy do szyfrowania, a następnie wysłaliśmy podpisaną i zaszyfrowaną wiadomość za pośrednictwem SparkPost.
Na koniec wypróbowaliśmy przydatne samodzielne narzędzie "mimeshow" do oglądania wewnętrznych plików e-mail.
To wszystko na teraz! Do zobaczenia wkrótce!