Mit dem am 5. Juli dieses Jahres veröffentlichten Sendmail Release 8.16.1 unterstützt der alteingesessene MTA erstmals DANE (DNS-Based Authentication of Named Entities).

Um DANE aktivieren zu können, muss Sendmail wie hier mit _FFR_TLSA_DANE kompiliert werden:

[root@c7 mail]# sendmail -d0.1 </dev/null
Version 8.16.1
Compiled with: DANE DNSMAP IPV6_FULL LDAPMAP LDAP_NETWORK_TIMEOUT LOG
MAP_REGEX MATCHGECOS MILTER MIME7TO8 MIME8TO7 NAMED_BIND
NETINET NETINET6 NETUNIX NEWDB=5.3 PIPELINING SASLv2 SCANF
SOCKETMAP STARTTLS TLS_EC TLS_VRFY_PER_CTX USERDB USE_LDAP_INIT
[...]

Einschalten in sendmail.mc:

define(`confDANE')dnl

Diese Konfiguration von DANE aktiviert gleichzeitig die nun notwendigen ResolverOptions use_dnssec und use_edns0.

Ganz einfach und schnell eingerichtet, Ende der Geschichte. Ja, was die Sendmail-Konfiguration für Opportunistic DANE betrifft, aber damit das in Sendmail (oder irgendeiner anderen Applikation) auch gemäß RFC 7672 funktioniert, müssen wir was kontrollieren und ggf. vorbereiten ...

Wir benötigen einen DNSSEC-fähigen Resolver, weil nur "sichere" im Sinne von DNSSEC-validierten DNS-Lookups zu DANE-gesichertem E-Mail-Versand führen. Um dies zu prüfen, befragen wir den im Betriebssystem konfigurierten Nameserver:

root@u20:~# dig mx ietf.org @0
; <<>> DiG 9.16.1-Ubuntu <<>> mx ietf.org @0
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 51450
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;ietf.org. IN MX
;; ANSWER SECTION:
ietf.org. 1800 IN MX 0 mail.ietf.org.

Wenig überraschend für einigermaßen aktuelle Betriebssysteme kommt die Antwort mit gesetztem AD-Flag ("Authenticated Data"), das die DNSSEC-Absicherung durch die gesamte Kette anzeigt. Wäre dies nicht der Fall, empfehlen sich BIND9 und Unbound gleichermaßen. Beide kommen heutzutage standardmäßig mit DNSSEC-Aktivierung inkl. eigenständiger Validierung.

Damit bekommen wir DANE-gesicherte TLS-Verbindungen, erkennbar am verify=TRUSTED im Sendmail-Log:

Oct 28 16:02:41 if8 sendmail[15360]: STARTTLS=client, relay=mail.ietf.org., version=TLSv1.2, verify=TRUSTED, cipher=ECDHE-RSA-AES256-GCM-SHA384, bits=256/256

Da wir es mit Opportunistic DANE zu tun haben, würden wir das Fehlen eines DNSSEC-fähigen Resolvers tatsächlich nur an der Abwesenheit des verify=TRUSTED für Verbindungen zu mit TLSA RRs abgesicherten Mailservern bemerken.

3-1-x TLSA Resource Records

Im ersten Schritt der DANE-Implementation unterstützt Sendmail nur TLSA Resource Records der Form 3-1-x, z.B. den von mail.ietf.org:

_25._tcp.mail.ietf.org.   20   IN   TLSA   3 1 1 0C72AC70B745AC19998811B131D662C9AC69DBDBE7CB23E5B514B566 64C5D3D6

Dabei bedeutet die erste Ziffer "3", dass nur Zertifikate von DANE, nicht PKIX, End Entities (DANE-EE), also SMTP-Servern, nicht von CAs geprüft werden.

Die zweite Ziffer bezeichnet den sog. Selector. Die "1" bedeutet hierbei SubjectPublicKeyInfo. Die Zertifikatszuordnung des TLSA RRs bezieht sich also nur auf den Public Key des verwendeten Server-Zertifikats, keine weiteren Felder. Das hat den Vorteil, das der TLSA RR bei Erneuerung des Zertifikats (vorausgesetzt, der Certificate Request wurde mit demselben Private Key erstellt!) weiter verwendet werden kann. In obigem Beispiel wurde über den Public Key des Server-Zertifikats der SHA-256-Hash (dritte Ziffer, "1") gebildet.

Den TLSA-RR von mail.ietf.org kann man leicht verifizieren, z.B. mit dem Kommando tlsa aus dem hash-slinger-Paket:

[root@c7 ~]# tlsa --verify mail.ietf.org -p 25 -4
SUCCESS (Usage 3 [DANE-EE]): Certificate offered by the server matches the TLSA record (4.31.198.44)

Man kann sich aber auch das Zertifikat von mail.ietf.org herunterladen und den TLSA RR durch Nachbauen kontrollieren:

[root@c7 ~]# tlsa --create --port 25 --certificate /var/tmp/mail.ietf.org.cert --selector 1 mail.ietf.org
Got a certificate with Subject: /OU=Domain Control Validated/CN=*.ietf.org
_25._tcp.mail.ietf.org. IN TLSA 3 1 1 0c72ac70b745ac19998811b131d662c9ac69dbdbe7cb23e5b514b56664c5d3d6 

Referenzen:

1. ../sendmail-8.16.1/doc/op/op.ps

2. https://tools.ietf.org/html/rfc7672

3. https://tools.ietf.org/html/rfc6698