DKIM w praktyce: selektory, klucze i usługi
Moduł 4: Dostarczalność: SPF, DKIM i DMARC w praktyce · Czas czytania: 12 minut
Cel lekcji: Po tej lekcji będą Państwo potrafili rozłożyć na czynniki nagłówek DKIM-Signature, skonfigurować DKIM z własną domeną dla każdej usługi wysyłkowej, sprawdzić, czy selektor działa, oraz wyjaśnić, jak bezpiecznie wymieniać klucze.
Kluczowe pojęcia: DKIM-Signature, d= (domena podpisująca), s= (selektor), h= (podpisane nagłówki), bh= i b=, kanonikalizacja (c=), <selector>._domainkey.<domein>, rekord TXT z p= lub CNAME do usługi, długość klucza 2048 bitów (RFC 8301), fragmenty po 255 znaków, ed25519 (RFC 8463), wymiana klucza, puste p= (unieważnienie), DKIM a przekierowanie
Dlaczego DKIM jest najważniejszy z całej trójki
SPF określa, które serwery mogą wysyłać pocztę, ale zawodzi przy przekierowaniu i sprawdza Return-Path, który w przypadku wielu usług nie należy do Państwa. DKIM umieszcza podpis w samej wiadomości. Ten podpis przetrwa przekierowanie (o ile wiadomość nie zostanie zmieniona) i jest powiązany z domeną, którą Państwo wybiorą. Dlatego w praktyce DKIM jest często jedynym mechanizmem, który pozwala przejść DMARC w przypadku newsletterów, faktur z programu księgowego oraz przekierowanej poczty.
Podstawy (jak klucz jest zapisany w DNS, czym jest selektor) znajdą Państwo w kursie DNS, lekcja 4.4. Tutaj idziemy dalej: co dokładnie zawiera podpis i jak skonfigurować DKIM dla każdej usługi?
Rozkładanie podpisu na czynniki
Proszę otworzyć nagłówki otrzymanej wiadomości (lekcja 1.5). Na górze, jeśli wiadomość jest podpisana, znajduje się coś takiego:
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=example.com; s=x;
t=1762588800; h=from:to:subject:date:message-id:mime-version:content-type;
bh=2jUSOH9NhtVGCQWNr9BrIAPreKQjO6Sn7XIkfJVOzv8=;
b=Gm7yW3q...długi ciąg znaków...Qx9A==| Znacznik | Znaczenie |
|---|---|
v=1 | Wersja DKIM |
a=rsa-sha256 | Algorytm: klucz RSA, SHA-256. Możliwe jest też: ed25519-sha256 |
c=relaxed/relaxed | Kanonikalizacja: jak rygorystycznie traktowane są drobne zmiany (spacje, wielkie litery w nazwach nagłówków), osobno dla nagłówków i treści. relaxed jest powszechne i bardziej tolerancyjne niż simple |
d=example.com | Domena podpisująca. Ta domena ręczy za wiadomość. DMARC porównuje ją z adresem Od |
s=x | Selektor: który klucz tej domeny został użyty |
t= | Moment podpisania (sekundy od 1970 roku) |
h= | Które nagłówki zostały podpisane. from musi się tam zawsze znajdować |
bh= | Odcisk cyfrowy (hash) treści wiadomości |
b= | Sam podpis |
Odbiorca pobiera klucz publiczny z <s>._domainkey.<d>, w tym przypadku x._domainkey.example.com, i sprawdza, czy b= pasuje do nagłówków z h= oraz odcisku cyfrowego bh=. Jeśli po drodze zmieniono choć jedną literę w treści lub w podpisanym nagłówku, weryfikacja się nie powiedzie.
W Authentication-Results widoczny jest wynik, na przykład dkim=pass header.d=example.com header.s=x. Wiadomość może mieć kilka podpisów, na przykład jeden od Państwa domeny i jeden od samej usługi. Dla DMARC liczy się wyłącznie podpis, którego d= odpowiada Państwa domenie Od.
Każda usługa ma własny selektor
Domena może mieć wiele kluczy DKIM jednocześnie, każdy pod własnym selektorem. Dokładnie o to chodzi: każda usługa wysyłająca pocztę w Państwa imieniu podpisuje własnym kluczem.
| Nadawca | Selektor (przykład) | Jak jest zapisany w DNS |
|---|---|---|
| Serwer pocztowy hostingu | x lub default | TXT z kluczem, utworzony przez panel |
| Microsoft 365 | selector1, selector2 | dwa rekordy CNAME do Microsoft |
| Google Workspace | google (domyślnie) | TXT z kluczem, który tworzą Państwo w konsoli administracyjnej |
| Usługa newsletterowa | na przykład k2, k3, mte1 | zwykle rekordy CNAME do usługi |
TXT czy CNAME?
- Przy rekordzie TXT samodzielnie umieszczają Państwo klucz publiczny w swoim DNS. Jeśli usługa chce nowy klucz, muszą Państwo zaktualizować rekord.
- Przy rekordzie CNAME wskazują Państwo selektor na nazwę u usługodawcy, na przykład
k2._domainkey.example.com CNAME dkim2.mailer.example.Usługa zarządza wtedy kluczem samodzielnie i może go wymienić bez żadnej czynności z Państwa strony. Dlatego duże usługi wybierają CNAME, często używając dwóch takich rekordów: dzięki temu mogą przełączać się między aktywnym a nowym kluczem.
Proszę zwrócić uwagę: rekord CNAME nie może istnieć obok innego rekordu pod tą samą nazwą. Jeśli pod selector1._domainkey znajduje się już TXT, należy go usunąć.
Najważniejsze: włączenie DKIM w usłudze
W wielu usługach DKIM z własną domeną nie jest domyślnie włączony. Usługa podpisuje wtedy własną domeną (d=mailer.example). Wiadomość jest wprawdzie podpisana, ale nie jest dopasowana do Państwa adresu Od. Dla DMARC to się nie liczy. W panelu administracyjnym usługi nazywa się to często "weryfikacja domeny", "uwierzytelnienie" lub "własna domena nadawcy". Dopiero po ustawieniu rekordów ORAZ włączeniu tej opcji w usłudze, podpisuje ona wiadomości jako d=example.com.
Klucze: długość, fragmenty i algorytm
- Długość. RFC 8301 mówi: co najmniej 1024 bity, a nadawcy powinni używać co najmniej 2048 bitów. Proszę używać 2048. Klucz 512-bitowy jest uznawany przez odbiorców za nieprawidłowy.
- Fragmenty po 255 znaków. Rekord TXT składa się z ciągów znaków o maksymalnej długości 255 znaków. Klucz 2048-bitowy ma około 400 znaków i nie mieści się w jednym ciągu. Rekord składa się wtedy z dwóch lub więcej ciągów po sobie (
"v=DKIM1; k=rsa; p=MIIBIj..." "...IDAQAB"), które odbiorca łączy w całość. Większość paneli robi to automatycznie. Jeśli coś pójdzie nie tak, otrzymują Państwo obcięty klucz i każdy podpis zawodzi. Proszę zatem zawsze kopiować klucz w całości, bez dodatkowych spacji ani cudzysłowów w środku. - ed25519 (RFC 8463) to nowocześniejszy algorytm z krótkimi kluczami. Nie wszyscy odbiorcy jeszcze go weryfikują. Kto go używa, podpisuje więc dwoma podpisami: RSA i ed25519.
Wymiana klucza
Dobrze jest wymieniać klucz od czasu do czasu, a zwłaszcza gdy podejrzewają Państwo, że klucz prywatny wyciekł (na przykład po włamaniu na serwer lub odejściu administratora). Proszę postąpić tak:
- Proszę utworzyć nowy klucz pod nowym selektorem, na przykład
s2026, i umieścić klucz publiczny w DNS. - Proszę poczekać, aż rekord będzie widoczny wszędzie (TTL, zob. kurs DNS, lekcja 6.1).
- Proszę przełączyć serwer na podpisywanie nowym selektorem.
- Proszę pozostawić stary klucz jeszcze przez kilka dni: wiadomości, które były już w drodze lub są ponownie weryfikowane, nadal się do niego odwołują.
- Proszę unieważnić stary klucz, opróżniając
p=(v=DKIM1; p=), albo usunąć rekord.
W przypadku usług z rekordami CNAME usługa robi to samodzielnie.
Co powoduje niepowodzenie DKIM
- Wiadomość jest zmieniana po drodze: lista mailingowa dodająca
[nazwa listy]do tematu lub stopkę, skaner antywirusowy dopisujący linijkę pod wiadomością, serwer przekierowujący zmieniający formatowanie. - Błędny lub obcięty klucz w DNS.
- Selektor nie istnieje: literówka w nazwie lub
selector1._domainkey.example.com.example.com(nazwa domeny podwojona, ponieważ panel sam ją dodaje na końcu). - Klucz unieważniony (puste
p=), podczas gdy serwer nadal podpisuje tym selektorem.
Sprawdzenie, czy działa
- Proszę wysłać wiadomość z poziomu usługi na adres w Gmail lub Outlook.com.
- Proszę otworzyć nagłówki i odnaleźć
DKIM-Signature: proszę zapisaćd=is=. - Proszę sprawdzić w
Authentication-Results, czy widniejedkim=passoraz czyheader.d=to Państwa domena. - Proszę wyszukać selektor:
dig TXT s._domainkey.example.com(lub za pomocą narzędzia online). Powinien tam widniećp=z długim kluczem, albo CNAME prowadzący do takiego rekordu.
W praktyce: jak to wygląda w panelu
W pakiecie hostingowym WebOké DKIM jest domyślnie włączony, z selektorem x: rekord nazywa się x._domainkey.<Państwa domena>. W DirectAdmin znajdą go Państwo w Administracja DNS; jeśli Państwa DNS znajduje się u innego dostawcy, należy skopiować ten rekord tam. W Moje WebOké karta Ustaw adres e-mail pokazuje, jaka wartość powinna się tam znajdować i czy została odnaleziona. U innych dostawców selektor nazywa się inaczej (default, mail, dkim), ale znajdą go Państwo w ten sam sposób: w panelu lub w polu s= podpisanej wiadomości.
Podsumowanie
- DKIM to mechanizm kontrolny, który przetrwa przekierowanie i który łączą Państwo z własną domeną dla każdej usługi osobno; dla DMARC liczy się wyłącznie podpis, którego
d=wskazuje Państwa domenę. - W
DKIM-Signatureznajdą Państwod=(domenę) is=(selektor); klucz znajduje się pod<s>._domainkey.<d>. - Każda usługa otrzymuje własny selektor; rekordy CNAME pozwalają usłudze samodzielnie wymieniać klucze. Proszę rzeczywiście włączyć w usłudze DKIM z własną domeną.
- Proszę używać 2048 bitów; przy kopiowaniu należy uważać na obcięte klucze.
- Proszę wymieniać klucz z użyciem nowego selektora i unieważniać stary dopiero potem.
Quiz
Zadanie
Zadanie Z4.3: Sprawdzenie selektora DKIM. Proszę wysłać wiadomość z własnej domeny (lub z usługi wysyłającej w Państwa imieniu) na własny adres u innego dostawcy. Proszę otworzyć nagłówki i wpisać wartości d= i s= z nagłówka DKIM-Signature oraz to, co widnieje w Authentication-Results przy dkim=. Program wyszuka selektor na żywo, podąży za ewentualnym CNAME, sprawdzi klucz (obecność, czy nie jest pusty, długość) i poinformuje, czy d= jest dopasowane do domeny podanej przez Państwa jako nadawcę.
Dalsza lektura
Kroki opisane w tych artykułach dotyczą paneli WebOké; u innych dostawców działanie jest podobne.
- Bezpłatny kurs DNS 4.4: DKIM: podpis pod Państwa pocztą
- Instrukcja DirectAdmin 5.8: DKIM włączanie i sprawdzanie
- Konfiguracja DKIM, gdy DNS działa na zewnętrznym serwerze
- Podręcznik WebOké 6.7: Karta Konfiguracja poczty e-mail (MX, SPF, DKIM, DMARC)
- RFC 6376 (DKIM), RFC 8301 (długość klucza i algorytmy), RFC 8463 (ed25519)
