DomainKeys Identified Mail (DKIM)

Privaten und Öffentlichen Schlüssel generieren

Da UDP das Standard-Übertragungsprotokoll im DNS-Umfeld ist, sollte der öffentliche Schlüssel nicht länger als 220 Zeichen sein. Daher nehmen wir hier für die Generierung des.private.pemn Schlüssels ‘nur’ 1024 Bits. Alternativ kann der später generierte TXT-Record gesplittet werden.

_domain=example.net
_selector=20161027
openssl genrsa -out ${_domain}.private.pem 1024
openssl rsa -in ${_domain}.private.pem -out ${_selector}.${_domain}.public.pem -pubout -outform PEM

Aus dem öffentlichen Schlüssel den DNS-Record erzeugen (Bind8/Bind9-Syntax)

echo "${_selector}._domainkey IN TXT \"v=DKIM1; k=rsa; t=y; p=$(grep -v -- ^- < ${_selector}.${_domain}.public.pem | tr -d "\n")\"" | tee ${_selector}._domainkey.${_domain}.record

Überprüfen, dass der TXT-Record auch wirklich nicht zu lang wird:

cut -d"\"" -f2- < ${_selector}._domainkey.${_domain}.record | wc -c

Den privaten Schlüssel in Exim4 hinterlegen

Schlüssel für Exim4 lesbar hinterlegen:

mkdir -p /etc/exim4/dkim
chmod 0750 /etc/exim4/dkim
chown root.exim /etc/exim4/dkim
cp ${_domain}.private.pem ${_selector}.${_domain}.public.pem ${_selector}._domainkey.${_domain}.record /etc/exim4/dkim/
chown root.exim /etc/exim4/dkim/*
chmod 0640 /etc/exim4/dkim/*

Exim4 zur Benutzung des Schlüssels konfigurieren:

remote_smtp:
  debug_print = "T: remote_smtp for $local_part@$domain"
  driver = smtp
  interface = <; 1.2.3.4
  dkim_domain = ${lc:${domain:$h_from:}}
  dkim_selector = 20161027
  dkim_private_key = /etc/exim4/dkim/${lc:${domain:$h_from:}}.private.pem
  dkim_canon = relaxed