W tej części omówimy:
Zainstalujemy kilka prostych narzędzi wiersza poleceń do podpisywania i szyfrowania e-maili
Uzyskamy klucz / certyfikat nadawcy do podpisywania
Wyślemy podpisaną wiadomość za pośrednictwem SparkPost i obejrzymy otrzymaną wiadomość
Opcjonalnie, uzyskamy certyfikat odbiorcy do szyfrowania
Wyślemy podpisaną i zaszyfrowaną wiadomość za pośrednictwem SparkPost, a następnie obejrzymy otrzymaną wiadomość
Wypróbujemy przydatne narzędzie „mimeshow” do przeglądania wewnętrznych elementów 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 „budowy przechodzi” – Travis i pytest automatycznie sprawdzają status budowy. Zauważ, że te narzędzia nie są oficjalnie wspierane przez SparkPost, ale starałem się uczynić je solidnymi i łatwymi w użyciu.
Jeśli masz pewne doświadczenie z Pythonem i pip, instalacja powinna być dość znajoma. Pipfile automatycznie zajmuje się zewnętrznymi zależnościami. Gdy to się zakończy, możesz sprawdzić, czy wszystko jest zainstalowane, uruchamiając
./sparkpostSMIME.py -h
Powinieneś zobaczyć przyjazny tekst pomocy. W następnej kolejności musimy…
2. Uzyskaj klucz / certyfikat nadawcy do podpisywania
Jeśli już posiadasz plik klucza dla swojego tożsamości nadawcy, możesz pominąć ten krok. W przeciwnym razie oto dwie opcje do wyboru:
a) Samopodpisany klucz / certyfikat testowy (nieważny zewnętrznie)
Jeśli tylko testujesz, możesz stworzyć „samopodpisane” certyfikaty i klucze dla adresu e-mail przy użyciu narzędzia wiersza poleceń openssl w systemie Linux, postępując zgodnie z procedurą taką jak ta. Na końcu tego procesu będziesz miał plik smime.p12 . Zmień nazwę tego pliku, aby odpowiadał 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 pozwolą Ci na podpisywanie, jest lista dostawców tutaj. Znalazłem, że Comodo działa dobrze (bezpłatnie do użytku niekomercyjnego) i jest łatwiejsze niż wcześniejsza procedura samopodpisania. Postępuj zgodnie z procesem rejestracji, otrzymaj maila potwierdzającego i upewnij się, że otwierasz link w Firefoxie. Przejdź do Preferencji Mozilla Firefox / Prywatność i bezpieczeństwo. Przewiń do Certyfikatów / Zobacz certyfikaty:
Wybierz swój certyfikat i użyj opcji „Kopia zapasowa”, aby zapisać go jako plik w formacie PKCS12 (dodaj rozszerzenie pliku .p12 do swojej nazwy pliku), który zawiera klucz prywatny i publiczny łańcuch certyfikatów.
Podaj hasło, aby zabezpieczyć plik .p12:
Generuj osobne pliki klucza publicznego (.crt) i prywatnego (.pem)
Niezależnie od tego, czy użyłeś a) czy b), teraz będziesz miał plik .p12 dla swojej tożsamości nadawcy. To duży krok naprzód – teraz złap kawę!
Teraz musimy wygenerować osobne pliki klucza publicznego i prywatnego w następujący sposób – podstaw wiadomości swoją własną adres e-mail w miejsce 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ł wpisać hasło, które podałeś wcześniej. Zauważ, że te ukośniki \ są używane do escapowania znaku @ – nie oddzielają nazw ścieżki katalogu (to jest ukośnik do przodu / w systemie Mac OSX i Linux).
Jeśli używasz systemu Windows, dostępne są wdrożenia openssl, takie jak to w MINGW64, które jest zbudowane w narzędziach wiersza poleceń Git, ale odkryłem, że zazwyczaj się blokuje. Prawdopodobnie będziesz miał łatwiej i szybciej zrobić to w systemie Linux, a następnie skopiować swoje pliki. Te same narzędzia Git dla systemu Windows mają ładny klient ssh, którego można użyć do logowania na serwerze z systemem Linux, takim jak instancja Amazon EC2.
2.1 Podpisywanie wiadomości
W katalogu testów już jest wykazany klucz/cert i plik źródłowy e-mail dla alice@example.com, więc możesz uzyskać wyjście nawet przed posiadaniem własnych kluczy. Po prostu wpisz następne polecenie:
cd tests ../sparkpostSMIME.py example_email1.eml --sign
A oto otrzymasz:
Do: Bob <bob@example.com> Od: Alice <alice@example.com> Temat: Wiadomość MIME-Version: 1.0 Typ treści: application/x-pkcs7-mime; smime-type=signed-data; name="smime.p7m" Kodowanie transferu treści: base64 Właściwość rozpakowania treści; nazwa pliku="smime.p7m" MIIKXAYJKoZIhvcNAQcCoIIKTTCCCkkCAQExDzANBglghkgBZQMEAgEFADCCAQoGCSqGSIb3DQEH AaCB/ASB+VRvOiBCb2IgPGJvYkBleGFtcGxlLmNvbT4NCkZyb206IEFsaWNlIDxhbGljZUBleGFt : :
Nie możesz faktycznie wysyłać e-maili z example.com za pośrednictwem SparkPost, chyba że posiadasz tę domenę, więc następny krok to użycie własnego klucza i wysłanie podpisanej wiadomości z własnej domeny.
3. Wyślij podpisaną wiadomość przez SparkPost
Teraz użyjemy prawdziwej domeny nadawcy, skonfigurowanej zgodnie z przewodnikiem użytkownika SparkPost New User Guide. Mamy pliki certyfikatów nadawcy i kluczy w bieżącym katalogu:
steve@thetucks.com.crt steve@thetucks.com.pem
Plik tests/declaration.eml jest dołączony do projektu. To zwykły plik tekstowy, więc możesz dostosować adres Od: do swojej własnej domeny nadawczej, a adres Do: do swojego odbiorcy testowego. Początek pliku wygląda tak:
Do: Bob <bob.lumreeker@gmail.com> Od: Steve <steve@thetucks.com> Temat: Oto nasze oświadczenie MIME-Version: 1.0 Typ treści: text/plain; charset=utf-8; format=flowed Kodowanie transferu treści: 7bit Język treści: en-GB Kiedy w toku wydarzeń ludzkich staje się konieczne …
Ustaw swój klucz API:
export SPARKPOST_API_KEY=<<Wstaw swój klucz API tutaj>>
Wyślij e-mail:
./sparkpostSMIME.py tests/declaration.eml --sign --send_api
Zobaczysz:
Otwarte 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
O sekundę później e-mail przychodzi do skrzynki odbiorczej Boba. Thunderbird wyświetla go z czerwoną kropką na kopercie, wskazującą prawidłowy podpis nadawcy.
Sukces! Skończ tę kawę, zasłużyłeś na nią. Jeśli masz problemy, sprawdź, czy adres Od: w pliku e-mail odpowiada nazwie twoich plików .crt i .pem.
4. Szyfrowanie wiadomości
Aby zaszyfrować wiadomość, potrzebujesz publicznego klucza odbiorcy w formie certyfikatu. To jest plik tekstowy, który wygląda tak:
Atrybuty Bag 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, więc możesz poćwiczyć na nim przed uzyskaniem prawdziwego certyfikatu:
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 Typ treści: application/pkcs7-mime; smime-type=enveloped-data; name=smime.p7m Kodowanie transferu treści: base64 Właściwość rozpakowania treści; nazwa pliku=smime.p7m MIIRwQYJKoZIhvcNAQcDoIIRsjCCEa4CAQAxggKlMIICoQIBADCBijCBhDELMAkG :
Zauważysz, że długość wyjścia jest 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ć zgodnie z tym samym procesem co wcześniej (samopodpisany lub dostawca taki jak Comodo), aby uzyskać publiczny klucz / certyfikat dla swoich adresów odbiorców. Potrzebujesz tylko pliku .crt – odbiorca nigdy nie musi udostępniać ci swojego klucza prywatnego (plików .p12 i .pem).
Posiadam plik bob.lumreeker@gmail.com.crt dla mojego zamierzonego odbiorcy – odpowiadający adresowi Od: w moim pliku.
Oto polecenie do wysłania:
./sparkpostSMIME.py tests/declaration.eml --sign --encrypt --send_api
Widzisz:
Otwarte 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 sekundy
Wiadomość pojawia się w Thunderbirdzie z ikoną „czerwonej kropki” podpisu i ikoną szyfrowania „zamek”.
Możesz łatwo wysłać złożone e-maile oparte na HTML z linkami i obrazami, takie jak ten przedstawiony w Części 1. Niektórzy klienci, tacy jak Thunderbird, pytają o pozwolenie na wyświetlenie zewnętrznych linków i obrazów w szyfrowanych wiadomościach S/MIME, ale tylko podpisane wiadomości dobrze się wyświetlają w klientów, w tym Thunderbirdzie i Gmailu:
Zauważ, że rozwijana lista pokazuje „Zweryfikowany adres e-mail”.
Dalsze przemyślenia i rzeczy, o których warto pamiętać
To narzędzie przyjmuje super prostą metodę wprowadzania niezbędnych kluczy – po prostu szuka nazwanych plików w bieżącym katalogu. Bardziej złożone układy, takie jak przechowywanie wszystkich kluczy w bazie danych, mogłyby być łatwo dodane, ale chciałem, aby kod był jak najprostszy.
Możesz dołączyć innych odbiorców z Cc: i Bcc: i będą dostarczani; może to być przydatne do celów archiwalnych. Podpisane wiadomości są odbierane i mogą być wyświetlane przez innych odbiorców, a także mogą zawierać podpis. Narzędzie usuwa nagłówek Bcc: z dostarczonej wiadomości (tak jak uczyniłby to klient poczty stacjonarnej).
Aby zapewnić, że wiadomości przepływają przez SparkPost bez zmian (co może złamać podpisy), narzędzie ustawia opcje API dla wiadomości „transakcyjnych”, z wyłączonym śledzeniem otwarć i kliknięć.
Jeśli korzystasz z szyfrowania, pamiętaj, że narzędzie wybiera pojedynczy adres Do: dla tego. Inni odbiorcy mogą dekodować treść wiadomości tylko wtedy, gdy mają klucz prywatny odbiorcy adresu Do:. Jeśli używasz drugorzędnych odbiorców jako dowodu dostawy, to może być w porządku.
Podpisano, zapieczętowane, dostarczone… jestem Twój
To nasz szybki przegląd, jak podpisywać, pieczętować i dostarczać wiadomości S/MIME przez SparkPost. Szybkie przypomnienie: projekt demonstracyjny jest na Githubie tutaj, starałem się, aby było łatwe do zainstalowania i użycia.
Funkcja bonusowa: wyświetlanie części MIME za pomocą „mimeshow”
Pliki multipart MIME RFC822 są dość złożone do odczytania przez ludzi. Projekt zawiera samodzielne narzędzie, aby to ułatwić, zwane mimeshow.
To narzędzie bierze dowolne 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 itd MIME-Version 1.0 Typ treści multipart/mixed; boundary="------------7D48652042860D0098C65210" Typ treści lokalny: en-GB Typ treści multipart/alternative; boundary="------------58C0BF87598336550D70EB95" Typ treści text/plain; charset=utf-8; format=flowed Kodowanie transferu treści: 7bit Kodowanie transferu treści: quoted-printable Typ treści text/html; charset="utf-8" Typ treści application/pdf; name="sparkpost-datasheet-tam-technical-account-management.pdf" Kodowanie transferu treści: base64 Właściwość rozpakowania treści; nazwa pliku="sparkpost-datasheet-tam-technical-account-management.pdf"
Możesz także użyć jako filtru, aby uzyskać podsumowanie w formie przystępnej dla człowieka dla 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 nasze oświadczenie Język treści en-GB MIME-Version 1.0 Typ treści application/pkcs7-mime; smime-type=enveloped-data; name=smime.p7m Kodowanie transferu treści: base64 Właściwość rozpakowania treści; nazwa pliku=smime.p7m
Na koniec…
Przypomnijmy – zainstalowaliśmy kilka prostych narzędzi wiersza poleceń do podpisywania i szyfrowania e-maili (repozytorium Github jest tutaj, w komplecie z instrukcjami instalacji).
Uzyskaliśmy klucz / certyfikat nadawcy do podpisu i wysłaliśmy podpisaną wiadomość przez SparkPost. Uzyskaliś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 elementów plików e-mail.
To wszystko na teraz! Do zobaczenia wkrótce!.