Wpływ Kodowania Treści na Uwierzytelnienie DKIM

DKIM (DomainKeys Identified Mail) to mechanizm, który pozwala serwerom odbiorczym zweryfikować, czy treść wiadomości nie została zmodyfikowana w trakcie transmisji oraz czy faktycznie pochodzi od deklarowanego nadawcy.

Poprawnie działający DKIM jest jednym z kluczowych elementów wpływających na dostarczalność wiadomości.

Błędy weryfikacji DKIM (Body Hash Error)

Może zdarzyć się sytuacja, w której mimo poprawnego uwierzytelnienia domeny (prawidłowy rekord w DNS), serwery odbiorcze zwracają błędy wskazujące na naruszenie integralności treści:

dkim=fail (body has been altered) lub dkim=fail (body hash did not verify)

Jedną z najczęstszych przyczyn takiego stanu rzeczy jest nieodpowiedni dobór nagłówka Content-Transfer-Encoding.

Problem z kodowaniem 8bit i 7bit

Konfiguracje często spotykane, ale niezalecane dla nowoczesnych wiadomości HTML:

  • Content-Transfer-Encoding: 8bit

  • Content-Transfer-Encoding: 7bit

Kodowanie 8bit nie jest zalecane dla wiadomości w formacie HTML, ponieważ nie gwarantuje, że treść pozostanie identyczna podczas przesyłu między kolejnymi serwerami pocztowymi (MTA). Starsze serwery pośredniczące lub filtry antyspamowe mogą nie obsługiwać rozszerzenia 8BITMIME, co wymusza konwersję treści. W praktyce może to prowadzić do:

  • zmiany lub uszkodzenia znaków diakrytycznych,

  • modyfikacji białych znaków (spacje, tabulatory),

  • zmiany znaków końca linii (CRLF).

Nawet minimalna zmiana w treści (choćby jednego bajtu) powoduje, że suma kontrolna (hash) obliczona na potrzeby DKIM przestaje się zgadzać z treścią otrzymaną, a podpis zostaje uznany za nieprawidłowy (fail).

Rekomendowane rozwiązanie: Quoted-Printable

Zalecaną i najbezpieczniejszą konfiguracją, zwłaszcza dla wiadomości HTML zawierających polskie znaki, jest:

Content-Transfer-Encoding: quoted-printable

Kodowanie quoted-printable (lub alternatywnie base64) jest uznawane za tzw. "transport-safe":

  • zapewnia stabilność treści wiadomości niezależnie od serwerów pośredniczących.

  • eliminuje ryzyko modyfikacji znaków w trakcie transmisji.

  • jest w pełni kompatybilne z mechanizmem DKIM.

  • jest standardem rekomendowanym w nowoczesnych systemach mailingowych.

Dzięki zastosowaniu tego kodowania, treść podpisana kluczem DKIM dociera do odbiorcy w niezmienionej formie technicznej, co pozwala na pomyślną weryfikację (dkim=pass).

Podsumowanie i dobre praktyki

  1. Stosuj Quoted-Printable: Zawsze ustawiaj Content-Transfer-Encoding: quoted-printable dla wiadomości tekstowych i HTML. Unikaj kodowania 8bit, szczególnie przy wysyłkach masowych.

  2. Weryfikuj biblioteki: W przypadku korzystania z własnych bibliotek mailingowych (np. PHPMailer, SwiftMailer), upewnij się, że są one zaktualizowane i mają poprawnie skonfigurowane kodowanie treści.

  3. Diagnostyka: Jeśli obserwujesz błędy typu body hash did not verify, w pierwszej kolejności zweryfikuj nagłówki wiadomości i sposób kodowania treści – jest to najczęstsza przyczyna problemów z walidacją DKIM przy poprawnej konfiguracji DNS.

Last updated