
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.
Business in a box.
Odkryj nasze rozwiązania.
Porozmawiaj z naszym zespołem sprzedaży

W tej części, my:
Zainstaluj kilka prostych narzędzi wiersza poleceń do podpisywania i szyfrowania e-maili
Zdobądź swój klucz nadawcy / certyfikat do podpisywania
Wyślij podpisaną wiadomość za pośrednictwem SparkPost i spójrz na otrzymaną wiadomość
Opcjonalnie, zdobądź certyfikat swojego odbiorcy do szyfrowania
Wyślij podpisaną i zaszyfrowaną wiadomość za pośrednictwem SparkPost i spójrz na otrzymaną wiadomość
Wypróbuj przydatne, samodzielne narzędzie „mimeshow”, aby spojrzeć na wnętrze plików e-mail.
OK – zaczynajmy!
1. Zainstaluj narzędzia
Narzędzia demonstracyjne znajdują się na Githubie tutaj, wraz z instrukcjami instalacji. Możesz zauważyć logo „build passing” – Travis i pytest automatycznie sprawdzają status budowy. 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 Pythonem i pipem, instalacja powinna być dość znajoma. Pipfile zajmie się automatycznie zewnętrznymi zależnościami. Gdy to się zakoń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żyjemy prawdziwej domeny wysyłania, skonfigurowanej zgodnie z Przewodnikiem dla Nowych Użytkowników SparkPost. Mamy pliki certyfikatu nadawcy oraz klucza w bieżącym katalogu:
steve@thetucks.com.crt steve@thetucks.com.pem
Plik tests/declaration.eml jest dołączony do projektu. Jest to tylko plik tekstowy, więc możesz dostosować adres From: do swojej własnej domeny wysyłania i adres To: do pasującego do Twojego testowego odbiorcy. Początek pliku wygląda następująco:
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 Kiedy w biegu ludzkich wydarzeń staje się konieczne ...
Ustaw swój klucz API:
export SPARKPOST_API_KEY=<<Wprowadź tutaj 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
Chwilę później, e-mail dociera do skrzynki odbiorczej Boba. Thunderbird pokazuje go z czerwoną kropką na kopercie, co wskazuje na ważny podpis nadawcy.

Sukces! Dokończ tę kawę, zasłużyłeś na to. Jeśli masz problem, sprawdź czy adres From: w pliku e-mail pasuje do nazwy Twoich plików .crt i .pem.
4. Szyfrowanie wiadomości
Aby zaszyfrować wiadomość, potrzebujesz klucza publicznego 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 tests znajduje się przykładowy certyfikat odbiorcy dla bob@example.com, więc możesz poćwiczyć z nim, zanim będziesz mieć prawdziwy certyfikat:
cd tests ../sparkpostSMIME.py example_email1.eml --sign --encrypt
Zobaczysz:
Do: Bob <bob@example.com> Od: Alice <alice@example.com> Temat: Wiadomość 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 dość 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ć zgodnie z tym samym procesem co wcześniej (samo-podpisane lub z dostawcą, takim jak Comodo), aby uzyskać klucz publiczny / certyfikat dla swoich adresów odbiorców. Potrzebujesz tylko pliku .crt – odbiorca nigdy nie musi dawać ci swojego klucza prywatnego (.p12 i .pem files).
Posiadam plik bob.lumreeker@gmail.com.crt dla mojego zamierzonego odbiorcy – pasujący do adresu Od: w moim pliku.
Oto polecenie do wysłania:
./sparkpostSMIME.py tests/declaration.eml --sign --encrypt --send_api
Widzę:
Otwarto 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,168 sekund
Poczta pojawia się w Thunderbird z ikoną podpisu „czerwona kropka” i ikoną „kłódki” zaszyfrowaną.

Możesz wysyłać złożone wiadomości e-mail oparte na HTML z linkami i obrazami równie łatwo, tak 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 tylko podpisane wiadomości wyświetlają się dobrze w klientów w tym Thunderbird i Gmail:


Zauważ, że rozwijana lista 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.
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 MIME RFC822 jest dość skomplikowana do odczytania przez ludzi. Projekt obejmuje samodzielne narzędzie, które to ułatwia, zwane mimeshow.
Oto jakiekolwiek pliki e-mail, które masz (nie tylko S/MIME) i pokazuje wewnętrzną strukturę. Oto przykład:
./mimeshow.py testcases/img_and_attachment.eml
Zobaczysz:
Do Bob <bob.lumreeker@gmail.com>
Od Steve <steve@thetucks.com>
Temat Testowanie załączników itp.
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 filtra, aby uzyskać przystępne podsumowanie wyjścia sparkpostSMIME:
./sparkpostSMIME.py tests/declaration.eml --sign --encrypt | ./mimeshow.py
Zobaczysz:
Do Bob <bob.lumreeker@gmail.com>
Od Steve <steve@thetucks.com>
Temat Oto nasza deklaracja
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 e-maili (repozytorium Github znajduje się tutaj, wraz z instrukcjami instalacji).
Uzyskaliśmy nasz klucz / certyfikat nadawcy do podpisywania i wysłaliśmy podpisaną wiadomość za pomocą SparkPost. Zdobyliśmy certyfikat odbiorcy do szyfrowania, a następnie wysłaliśmy podpisaną i zaszyfrowaną wiadomość za pomocą SparkPost.
Na końcu, wypróbowaliśmy wygodne samodzielne narzędzie „mimeshow” do przeglądania wewnętrznej struktury plików e-mail.
To wszystko na teraz! Do zobaczenia wkrótce!