DKIM Nedir? DKIM İmzası Nasıl Çalışır ve Kurulur
DKIM (DomainKeys Identified Mail), gönderen sunucunun her iletiye özel anahtarıyla dijital imza eklediği, alıcı sunucunun da bu imzayı alan adının DNS'te yayımladığı açık anahtarla doğruladığı bir e-posta kimlik doğrulama yöntemidir. Kısacası DKIM nedir sorusunun yanıtı, iletinin imzalanan bölümlerinin yolda değiştirilmediğini ve iletinin gerçekten imzalayan alan adının sorumluluğunda gönderildiğini kanıtlayan dijital imzadır. Standart RFC 6376 ile tanımlanmıştır.
DKIM, SPF kaydının aksine gönderen IP adresine bakmaz. İmza iletinin içinde taşındığı için posta başka sunuculardan geçse bile çoğu zaman geçerliliğini korur. Bu özellik onu DMARC için en sağlam dayanak yapar.
DKIM nasıl çalışır?
DKIM, açık anahtarlı kriptografiye dayanır. Özel anahtar yalnızca gönderen sistemde durur, açık anahtar ise herkesin okuyabileceği bir DNS kaydında yayımlanır. Süreç adım adım şöyle işler:
- Gönderen sunucu, iletinin gövdesinin özetini (hash) çıkarır ve seçilen başlık alanlarıyla birlikte özel anahtarla imzalar.
- İmza ve parametreleri iletiye
DKIM-Signaturebaşlığı olarak eklenir. - Alıcı sunucu başlıktaki
d=(alan adı) ves=(selector) değerlerini okur ve bunlardan oluşans2026._domainkey.example.com.trgibi bir addaki TXT kaydını sorgular. - Gövde özetini yeniden hesaplayıp
bh=değeriyle karşılaştırır, ardındanb=imzasını açık anahtarla doğrular. - Sonuç
pass,fail,neutral,temperrorveyapermerrorolarakAuthentication-Resultsbaşlığına yazılır.
DKIM-Signature başlığı neler içerir?
Tipik bir DKIM imzası şöyle görünür:
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=example.com.tr;
s=s2026; t=1791590400; h=from:to:subject:date:message-id;
bh=2Y5mQ0d8nV3rK7pL1sT9wX4zB6cF0hJ8uE2aG5iO3kM=;
b=Kx3m9Qv2R7pT0yZb5N8wLcA4fHjD6sUeVg1iOqWn2Rt8...
Etiketlerin anlamı şöyledir:
| Etiket | Anlamı |
|---|---|
v= | İmza sürümü, her zaman 1 |
a= | İmza algoritması, günümüzde rsa-sha256 |
c= | Başlık ve gövde için kanonikleştirme yöntemi (simple veya relaxed) |
d= | İmzalayan alan adı; DMARC hizalamasında kullanılır |
s= | Selector, yani DNS'te hangi anahtarın aranacağı |
h= | İmzaya dahil edilen başlık alanlarının listesi |
bh= | Kanonikleştirilmiş gövdenin Base64 kodlu özeti |
b= | İmzanın kendisi |
t= | İmzanın oluşturulduğu zaman (Unix zaman damgası) |
c=relaxed/relaxed ayarı, başlık adlarındaki büyük küçük harf farkı ve boşluk değişiklikleri gibi zararsız farklılıklara tolerans gösterdiği için önerilir. Gövdenin yalnızca bir kısmını imzalamaya yarayan l= etiketinden ise kaçının, çünkü iletinin sonuna içerik eklenmesine imkân tanır.
DKIM kaydı DNS'te nasıl yayımlanır?
Açık anahtar, selector ile _domainkey etiketinin birleşiminden oluşan adda TXT kaydı olarak yayımlanır:
s2026._domainkey.example.com.tr. 3600 IN TXT "v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA..."
Selector adını siz belirlersiniz; s2026 gibi tarih içeren bir ad, anahtar değişimlerini takip etmeyi kolaylaştırır. 2048 bitlik bir anahtarın p= değeri yaklaşık 400 karakter tutar ve TXT kaydında tek bir metin parçası için tanımlı 255 karakter sınırını aşar. Bu yüzden değer birden fazla tırnaklı parçaya bölünür; çoğu DNS paneli bunu otomatik yapar. Kaydı yayımladıktan sonra dig TXT s2026._domainkey.example.com.tr +short komutuyla sorgulayıp anahtarın eksiksiz döndüğünü kontrol edin, çünkü bölme sırasında kaybolan tek bir karakter bile doğrulamayı bozar.
Barındırılan hizmetlerde süreç biraz farklıdır. Microsoft 365, selector1 ve selector2 adlı iki CNAME kaydı ister; özel anahtarlar Microsoft tarafında tutulur ve anahtar değişimi bu iki selector arasında yapılır. Google Workspace ise yönetici konsolunda bir anahtar üretip varsayılan google selector'ü ile TXT kaydı olarak yayımlamanızı ister.
Anahtar uzunluğu neden 2048 bit olmalı?
DKIM'in kriptografik gereksinimlerini güncelleyen RFC 8301, imzalamada rsa-sha1 kullanılmamasını, RSA anahtarlarının en az 1024 bit olmasını ve 2048 bitin tercih edilmesini ister. 1024 bitlik anahtarlar artık zayıf kabul edildiği için yeni kurulumlarda 2048 bit standart seçimdir.
RFC 8463 ile tanımlanan Ed25519 imzaları çok daha kısa anahtar kullanır. Ancak her alıcı tarafından desteklenmediği için tek başına değil, RSA imzasıyla birlikte (çift imza) kullanılması önerilir.
DKIM anahtarı nasıl üretilir ve değiştirilir?
Kendi sunucunuzda imzalama yapıyorsanız anahtar çiftini OpenSSL ile üretebilirsiniz:
openssl genrsa -out s2026.private 2048
openssl rsa -in s2026.private -pubout -out s2026.public
Açık anahtar dosyasındaki başlangıç ve bitiş satırları arasındaki Base64 metin, satır sonları kaldırılarak DNS kaydındaki p= değeri olarak kullanılır. Anahtarları düzenli aralıklarla değiştirmek, olası bir sızıntının etkisini sınırlar. Kesintisiz bir değişim için şu sırayı izleyin:
- Yeni selector (
s2027gibi) için anahtar çifti üretin ve açık anahtarı DNS'te yayımlayın. - Kaydın yayıldığını
dig TXT s2027._domainkey.example.com.tr +shortkomutuyla doğrulayın. - Gönderen sistemi yeni selector ile imzalayacak şekilde güncelleyin.
- Yolda kalan iletiler doğrulanabilsin diye eski anahtarı birkaç gün daha yayında tutun.
- Son olarak eski kaydı kaldırın ya da
p=değerini boşaltarak anahtarı iptal edin.
DKIM ve DMARC hizalaması
DKIM imzasının geçerli olması DMARC için tek başına yetmez; imzadaki d= alan adının iletinin From alanındaki alan adıyla hizalı olması gerekir. Gevşek (relaxed) hizalamada aynı organizasyonel alan adı yeterlidir: d=mail.example.com.tr imzası, [email protected] göndericisiyle hizalıdır. Sıkı (strict) hizalamada ise adların birebir aynı olması gerekir.
Bülten ve CRM hizmetleri iletileri varsayılan olarak kendi alan adlarıyla imzalayabilir. Bu durumda imza geçerli olsa bile DMARC hizalaması sağlanmaz. Çözüm, hizmetin panelinden kendi alan adınız için DKIM yapılandırmak ve size verilen kayıtları DNS'e eklemektir. Hangi kaynakların hizasız imza ürettiğini DMARC raporları açıkça gösterir.
DKIM hataları ve çözümleri
| Belirti | Olası neden | Çözüm |
|---|---|---|
| Anahtar bulunamadı (no key) | Selector adı yanlış ya da DNS kaydı yok | Kaydın adını ve yayılımını kontrol edin |
| Gövde özeti doğrulanamadı (body hash did not verify) | İleti imzalandıktan sonra değiştirildi | İmzadan sonra altbilgi veya bağlantı ekleyen adımı bulun |
| İmza doğrulanamadı | DNS'teki anahtar, imzalayan özel anahtarla eşleşmiyor | Doğru açık anahtarı yayımlayın, bölünmüş parçaları kontrol edin |
| Hiç DKIM imzası yok | Gönderen sistemde imzalama kapalı | İmzalamayı etkinleştirin ve selector'ü doğrulayın |
| İmza geçerli, DMARC başarısız | d= alan adı From ile hizalı değil | Kendi alan adınızla imzalamayı yapılandırın |
En yaygın sorun, iletiyi imzalayan sistemden sonra içeriği değiştiren bir aşamadır. Yasal uyarı metni ekleyen bir sunucu veya iletiyi yeniden kodlayan bir aktarıcı gövde özetini bozar. Bu durumda imzalama, zincirdeki son değişiklikten sonra yapılmalıdır.
Posta listeleri de benzer bir etki yaratır: Konu satırına etiket veya iletinin sonuna abonelik bilgisi ekleyen bir liste sunucusu özgün imzayı geçersiz kılar. Bu tür aracıların doğrulama sonuçlarını zincir boyunca taşıyabilmesi için RFC 8617 ile ARC (Authenticated Received Chain) tanımlanmıştır. ARC, alıcının iletinin aracıdan geçmeden önceki doğrulama durumunu görmesine yardımcı olur.
İpucu: Bir iletinin DKIM sonucunu görmek için alıcı tarafta iletinin özgün başlıklarını açın ve
Authentication-Resultssatırındakidkim=değerine bakın;header.dveheader.salanları hangi alan adı ve selector ile imzalandığını gösterir.
Gelen postada DKIM denetimi
DKIM yalnızca giden postanızı imzalamakla ilgili değildir; size gelen iletilerin imzalarını doğrulamak da sahte iletileri ayıklamanın önemli bir parçasıdır. MXZilla'in gelen posta filtresi her iletide SPF, DKIM ve DMARC denetimlerini yapar ve sonuçları filtreleme kararında kullanır. Böylece imzası bozuk veya hizasız iletiler, e-posta sahteciliği girişimlerine karşı ek bir sinyal olarak değerlendirilir.
Alan adınızın DKIM, SPF ve DMARC kayıtlarının doğru yayımlanıp yayımlanmadığını görmek için ücretsiz güvenlik kontrolü aracını kullanabilir, gelen posta korumasını içeren paketlere göz atabilirsiniz.
Sık sorulan sorular
DKIM e-postayı şifreler mi?
Hayır, DKIM iletiyi şifrelemez, yalnızca imzalar. İletinin içeriği okunabilir kalır; DKIM'in sağladığı şey, imzalanan içeriğin değiştirilmediğinin ve imzalayan alan adının doğrulanabilmesidir. Aktarım sırasında gizlilik için TLS şifrelemesi gerekir.
DKIM selector nedir?
Selector, aynı alan adı için birden fazla DKIM anahtarı yayımlamayı sağlayan etikettir. İmzadaki s= değeri, alıcının _domainkey altında hangi kaydı arayacağını belirler. Farklı hizmetler ve anahtar değişimleri için ayrı selector kullanmak yönetimi kolaylaştırır.
Bir alan adının birden fazla DKIM kaydı olabilir mi?
Olabilir ve bu oldukça yaygın bir durumdur. Her selector ayrı bir DNS adında yayımlandığı için kendi sunucunuz, Microsoft 365 ve bir bülten hizmeti aynı anda farklı anahtarlarla imzalayabilir. SPF'deki tek kayıt kuralı DKIM için geçerli değildir.
DKIM anahtarı ne sıklıkla değiştirilmeli?
Standart kesin bir süre belirlemez, ancak düzenli değişim bir anahtarın sızma riskini sınırlar. Yılda bir veya iki kez değişim çoğu kuruluş için makul bir ritimdir. Değişim sırasında eski anahtarı birkaç gün yayında tutmak, yoldaki iletilerin doğrulanmasını sağlar.
DKIM geçerli olduğu halde DMARC neden başarısız olur?
En sık neden hizalama eksikliğidir. İmzadaki d= alan adı, From alanındaki alan adıyla aynı organizasyonel alan adına ait değilse DMARC bu imzayı hesaba katmaz. Gönderim hizmetinde kendi alan adınızla DKIM imzalamayı etkinleştirmek sorunu çözer.