S/MIME Część 4: Łatwe zbieranie kluczy publicznych odbiorców – z użyciem webhooków SparkPost Inbound Relay
·
1 lut 2019

Najważniejsze informacje
Założenie: Wysyłanie e-maili szyfrowanych za pomocą S/MIME nie jest trudne, gdy można automatycznie zbierać publiczne klucze każdego odbiorcy. Ten post zamyka tę lukę, używając SparkPost Inbound Relay Webhooks do odbierania podpisanych e-maili, wydobywania certyfikatów i przechowywania ich do późniejszego szyfrowania.
Cel: Zbudowanie usługi webhook opartej na Flasku, która nasłuchuje na przychodzące podpisane wiadomości, weryfikuje je (sprawdzanie DKIM + certyfikaty) i bezpiecznie zapisuje każdy publiczny klucz na dysku do użycia w wychodzących wiadomościach e-mail o wysokim bezpieczeństwie.
Najważniejsze punkty:
Problem: Ręczna wymiana kluczy nie działa na dużą skalę w przypadku e-maili generowanych przez aplikację.
Rozwiązanie: Zaproś użytkowników do wysłania podpisanego e-maila; przychodzący webhook automatycznie przetwarza i przechowuje ich certyfikat PEM.
Kroki konfiguracyjne:
Skonfiguruj Inbound Domain i rekordy MX (np. inbound.yourdomain.com).
Utwórz Inbound Relay Webhook za pomocą API SparkPost wskazującego na punkt końcowy aplikacji.
Wdroż małą aplikację Flask (webapp.py) korzystając z konfiguracji z webapp.ini.
Dokumentuj dogłębnie dla przejrzystości; zintegrować Pytest + Travis CI do automatycznej weryfikacji.
Środki bezpieczeństwa:
Weryfikuj podpisy DKIM i autentyczność wiadomości.
Waliduj zaufanie do łańcucha certyfikatów przed ich zapisaniem.
Użyj sekretnych tokenów uwierzytelniających w nagłówkach webhooków.
Wynik:
Każda ważna przychodząca wiadomość tworzy plik certyfikatu, taki jak bob.lumreeker@gmail.com.crt.
Po zapisaniu te klucze umożliwiają szyfrowane odpowiedzi za pomocą wcześniejszych skryptów z części 2 i 3.
Podsumowanie pytań i odpowiedzi
Dlaczego zbieranie kluczy odbiorców jest takie ważne dla S/MIME?
Ponieważ szyfrowanie wymaga publicznego klucza każdego odbiorcy; zautomatyzowanie tego kroku pozwala każdej aplikacji wysyłać bezpieczną pocztę bez ręcznej wymiany.
Jak Webhook przekazywania wiadomości SparkPost ułatwia zbieranie kluczy?
Konwertuje każdy podpisany przychodzący e-mail na ustrukturyzowany ładunek JSON, umożliwiając twojej aplikacji programowe analizowanie i przechowywanie certyfikatów.
Jakie zabezpieczenia zapobiegają podszywaniu się lub niechcianym zgłoszeniom?
Usługa weryfikuje podpisy DKIM, egzekwuje tokeny uwierzytelniające i odrzuca nieprawidłowe lub podpisane wiadomości.
Gdzie są przechowywane certyfikaty i w jakim formacie?
One są zapisane na dysku w formacie PEM (pliki
.crt), gotowe do użycia przez narzędzie do podpisywania/szyfrowania zbudowane w poprzednich częściach.Jaki jest workflow dewelopera?
Uruchom aplikację Flask, zweryfikuj za pomocą Postman przy użyciu dostarczonego przykładowego ładunku, a następnie połącz ją z aktywnym webhookiem SparkPost w celu ciągłej pracy.
Ogólne wrażenie?
Zarządzanie kluczami S/MIME można w pełni zautomatyzować za pomocą kilku linijek Pythona i SparkPost API—przynosząc skalowalne szyfrowanie do każdego generowanego przez aplikację przepływu e-mail.
W części 1 mieliśmy szybki przegląd S/MIME, przyglądając się podpisywaniu i szyfrowaniu naszych strumieni wiadomości w różnych klientach pocztowych. Część 2 przeszła przez prostą narzędzie linii poleceń do podpisywania i szyfrowania e-maili, a następnie wysyłania ich przez SparkPost. Część 3 pokazała, jak wprowadzić bezpieczne strumienie pocztowe do lokalnych platform takich jak Port25 PowerMTA i Momentum.
W tej serii zobaczyliśmy, jak włączenie podpisu S/MIME jest całkiem proste. Wysyłanie szyfrowanych wiadomości S/MIME jest bardziej skomplikowane, ponieważ musisz uzyskać klucze publiczne odbiorców. To jedna sprawa, gdy używasz klienta pocztowego dla ludzi, takiego jak Thunderbird – ale jak to działa z generowanymi przez aplikacje strumieniami e-maili? E-maile generowane przez aplikacje, takie jak te używane przez platformy randkowe, wymagają ostrożnej strategii, aby maksymalizować zaangażowanie. Zobacz, jak aplikacje randkowe tworzą angażujące doświadczenia z e-mailem wyzwalanym.
Ale poczekaj – jest inny sposób na wejście do Mordoru, aby zdobyć te klucze. Twój serwis może zaprosić swoich klientów (oczywiście za pośrednictwem e-maila), aby odesłali Ci podpisany e-mail na znany adres obsługi klienta. Używając magicznych mocy interfejsów API SparkPost Inbound Relay, wydobędziemy i przechowamy ten klucz publiczny, abyś mógł go użyć.
Możemy to podsumować w prostym przypadku użycia:
Jako odbiorca wiadomości, przekazuję Twojemu serwisowi mój osobisty podpis e-mailowy za pośrednictwem e-maila, aby w przyszłości e-maile mogły być wysyłane do mnie w postaci szyfrowanej S/MIME.
Na podstawie tego wywnioskujmy bardziej szczegółowe wymagania:
Potrzebujemy nieprzerwanego, niezawodnego serwisu e-mailowego do odbierania tych podpisanych e-maili.
Nie powinno być specjalnych wymagań dotyczących formatu poczty, z wyjątkiem tego, że powinien mieć podpis S/MIME.
Ponieważ każdy może spróbować wysłać e-mail do tego serwisu, powinien być on zaprojektowany defensywnie, na przykład aby odrzucać „fałszywe” wiadomości od złych aktorów. Będzie potrzeba kilku warstw weryfikacji.
Jeśli wszystko się zgadza, serwis zapisze certyfikat w pliku, używając dobrze znanego formatu Szyfrowanej Poczty Tekstowej (PEM).
Istnieją pewne wymagania niefunkcjonalne:
Usługi webhooków między maszynami mogą być trudne do zrozumienia tylko z odpowiedzi na to, co się dzieje wewnątrz. Serwis powinien zapewniać obszerne logi aplikacji w formacie przyjaznym dla ludzi. W szczególności analiza i weryfikacja certyfikatu powinny być logowane.
Dodajemy przypadki testowe dla wewnętrznych funkcji aplikacji, korzystając z ładnego frameworka Pytest, i uruchamiamy te testy automatycznie po dodaniu zmian, korzystając z integracji Travis CI z GitHubem.
OK – zaczynajmy!
1. Przegląd rozwiązania
Oto jak będzie wyglądać ogólne rozwiązanie.

2. Instalacja, konfiguracja i uruchamianie aplikacji webowej
3. Konfiguracja webhooków relacji przychodzących SparkPost
4. Wewnętrzne: sprawdzanie DKIM, walidacja certyfikatów
Aplikacja sprawdza, czy otrzymane e-maile mają ważny DKIM i sprawdza, czy same certyfikaty są ważne, jak opisano tutaj. Znajdziesz tam także notatki dotyczące implementacji oraz pomysły na dalsze prace.
Podsumowując…
Widzieliśmy, jak klucze publiczne odbiorców można łatwo zbierać, używając e-maila do adresu webhooka przychodzącego. Po zakończeniu, ci odbiorcy mogą otrzymywać swoje wiadomości w formie zaszyfrowanej S/MIME.
Na tym na razie kończymy! Szczęśliwego wysyłania.





