[email protected]Sistem durumu
E-posta Kimlik Doğrulama

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:

  1. Gönderen sunucu, iletinin gövdesinin özetini (hash) çıkarır ve seçilen başlık alanlarıyla birlikte özel anahtarla imzalar.
  2. İmza ve parametreleri iletiye DKIM-Signature başlığı olarak eklenir.
  3. Alıcı sunucu başlıktaki d= (alan adı) ve s= (selector) değerlerini okur ve bunlardan oluşan s2026._domainkey.example.com.tr gibi bir addaki TXT kaydını sorgular.
  4. Gövde özetini yeniden hesaplayıp bh= değeriyle karşılaştırır, ardından b= imzasını açık anahtarla doğrular.
  5. Sonuç pass, fail, neutral, temperror veya permerror olarak Authentication-Results baş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:

EtiketAnlamı
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:

  1. Yeni selector (s2027 gibi) için anahtar çifti üretin ve açık anahtarı DNS'te yayımlayın.
  2. Kaydın yayıldığını dig TXT s2027._domainkey.example.com.tr +short komutuyla doğrulayın.
  3. Gönderen sistemi yeni selector ile imzalayacak şekilde güncelleyin.
  4. Yolda kalan iletiler doğrulanabilsin diye eski anahtarı birkaç gün daha yayında tutun.
  5. 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

BelirtiOlası nedenÇözüm
Anahtar bulunamadı (no key)Selector adı yanlış ya da DNS kaydı yokKaydı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şmiyorDoğru açık anahtarı yayımlayın, bölünmüş parçaları kontrol edin
Hiç DKIM imzası yokGönderen sistemde imzalama kapalıİmzalamayı etkinleştirin ve selector'ü doğrulayın
İmza geçerli, DMARC başarısızd= alan adı From ile hizalı değilKendi 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-Results satırındaki dkim= değerine bakın; header.d ve header.s alanları 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.

Alan adınızın e-posta güvenliğini ücretsiz kontrol edin

SPF, DKIM, DMARC ve MX kayıtlarınızı saniyeler içinde denetleyin; eksikleri ve düzeltme önerilerini görün.