Dwie wiadomości mogą wyglądać identycznie w kliencie pocztowym, a mimo to wyświetlać się inaczej DKIM skróty ciała. DKIM weryfikuje przesłaną reprezentację po jej określeniu kanonizacja, a nie zdekodowany widok czytelnika. Dlatego też odbudowa MIME , konwersja transferu treści i zmiany granic powinny być przeprowadzane na wczesnym etapie badania, gdy komunikat kończy się niepowodzeniem dopiero po przetworzeniu.
Oddziel wygląd od reprezentacji
Wiadomość MIME może zawierać zwykły tekst, kod HTML, załączniki i zagnieżdżone struktury wieloczęściowe. RFC 2046 §5.1.1 umieszcza nagłówki części MIME i linie ograniczające granice wewnątrz wieloczęściowej treści. Ponowne kodowanie części tekstowej z pliku quoted-printable do base64 może zachować to, co czyta użytkownik, zmieniając jednocześnie bajty prezentowane w DKIM . Ponowne zawijanie zakodowanych linii może również zmienić te bajty. Spokojna kanonizacja to zdefiniowana transformacja białych znaków, a nie dekoder MIME lub test równoważności dla renderowanej treści.
RFC 6376 §5.3 zaleca konwersję na odpowiednie kodowanie transferu MIME przed podpisaniem, aby zmniejszyć konwersje transportowe. W szczególności wymaga normalizacji przed podpisaniem lokalnych reprezentacji, które ulegną zmianie przed transmisją. Zasada jest funkcjonalnie prosta: podpisz formularz, który powinien zobaczyć odbiorca.
Znajdź zmianę serializacji
Uzyskaj surowe komunikaty na wyjściu osoby podpisującej, na wyjściu podejrzanej bramy i na urządzeniu końcowym. Przechowuj oryginały bez otwierania i zapisuj je za pomocą edytora, który normalizuje zakończenia linii. Zwróć uwagę na metodę zbierania, ponieważ narzędzie eksportu samo w sobie może zmienić reprezentację.
Porównaj pola Content-Type i Content-Transfer-Encoding w wiadomości zewnętrznej i każdej odpowiedniej części MIME . Sprawdź ciągi graniczne, kodowanie załączników, linie zagięte i konwersję zestawu znaków. Określ, czy zmieniony nagłówek zewnętrzny został uwzględniony w h i czy zmienione nagłówki części wystąpiły wewnątrz podpisanej treści. Traktuj te dwie lokalizacje oddzielnie: nagłówek zewnętrzny może spowodować niepowodzenie weryfikacji podpisu, podczas gdy nagłówek części MIME zwykle uczestniczy w skrót ciała.
Przeanalizuj przykład kodowania
Przykładowa specyfikacja testu: część tekstowa zawierająca znak inny niż ASCII jest przygotowywana przy użyciu cudzysłowu, który można wydrukować przed podpisaniem wiadomości przez aplikację. Usługa podrzędna dekoduje tę część i serializuje ją jako base64. Wyświetlane zdanie pozostaje takie samo, ale kanonizowana treść może się różnić, a oryginalny podpis może zawieść. Uruchom to tylko z kontrolowaną zawartością i sprawdź rzeczywiste różnice w bajtach, zamiast zakładać, że każda usługa wykonuje tę konwersję.
Utwórz mały zestaw testowy zawierający zwykły tekst w formacie ASCII, tekst w formacie innym niż ASCII, wieloczęściowy kod HTML i mały załącznik. Wyślij każdy produkt przez bezpośrednią ścieżkę kontroli i ścieżkę przetwarzania równoważną produkcyjnie. Jeśli tylko ta ostatnia zmieni reprezentację, porównanie granic identyfikuje komponent do zbadania. Jeśli oba zawiodą, najpierw sprawdź serializację i normalizację osoby podpisującej.
Napraw granicę
Preferuj ostateczną konstrukcję MIME i wybór kodowania transferu przed podpisaniem. Jeżeli służba bezpieczeństwa musi przepisać treść, zorganizuj etap autoryzowanego podpisywania po jej ostatecznej serializacji. Potwierdź obsługę domeny niestandardowej i model własności; podpis w niepowiązanej domenie usługi może przejść DKIM bez dostosowania DMARC pod RFC 9989 §4.4.1.
Nie naprawiaj próbki na miejscu i przedstaw ją jako dowód, że produkcja jest stała. Zmodyfikowana próbka sprawdza jedynie hipotezę. Zmień odpowiedzialną konfigurację, wysyłaj nowe kontrolowane wiadomości i przechwytuj oryginalne wyniki odbiorcy. Unikaj szerokiego omijania kontroli treści wyłącznie w celu zachowania podpisu bez sprawdzania konsekwencji bezpieczeństwa.
Zachowaj przydatny zapis zdarzenia
Zapisz pierwszą granicę, w której treść serializowana jest rozbieżna, pole lub część MIME , których to dotyczy, osobę podpisującą i selektororaz wyniki dla każdego wariantu badania. Trzymaj wiadomości testowe wolne od danych klientów. Uruchom ponownie pakiet po aktualizacji bramy i zmianach w przetwarzaniu załączników. Ukończona poprawka wyjaśnia, dlaczego stara reprezentacja nie powiodła się i pokazuje, że nowo wyemitowana poczta przetrwa w pełni obsługiwaną trasę.
Porównaj konkretną zakodowaną reprezentację
Dla bajtów UTF-8 C3 A9 reprezentujących é, reprezentacją nadającą się do wydruku w cudzysłowie jest =C3=A9; reprezentacją base64 jest w6k=. Przy odpowiednich nagłówkach MIME oba dekodują ten sam znak, ale zakodowane ciągi znaków są różne. RFC 2045 §6.7 I RFC 2045 §6.8 zdefiniować kodowanie; RFC 6376 §3.7 wymaga mieszania po kodowaniu transferu i przed dekodowaniem podczas weryfikacji. Ten izolowany przykład reprezentacji nie jest kompletną wiadomością MIME ani wykonanym testem podpisu. Jeśli używany jest limit długości treści, należy określić, czy zmienione bajty mieszczą się w zasięgu, zamiast zakładać, że każda część jest chroniona.