TLSA | Transportverschlüsselung mit DANE

TLSA | Transportverschlüsselung mit DANE
Photo by rc.xyz NFT gallery / Unsplash

TLSA DANE

TLSA/DANE-Records für Mailserver sind ein wirkungsvolles Mittel, um die Transportverschlüsselung abzusichern, auch (und gerade) bei Wildcard-Zertifikaten.
Ich erkläre mit diesem Beitrag, wie du einen TLSA-Record für ein Wildcard-Zertifikat einrichtest (z. B. *.example.com).

Grundprinzip von TLSA/DANE

Ein TLSA-Record (port.protocol.hostname) verknüpft DNS mit dem verwendeten TLS-Zertifikat.

Für einen SMTP-Server auf Port 25 ist diese Form üblich:

25.tcp.mail.example.com.  IN  TLSA  3 1 1  <Hashwert>

Aufbau des TLSA Records

Für ein besseres Verständnis, erkläre ich kurz die einzelnen Elemente des TLSA Records

_25 → Port des TLS-Dienstes (SMTP)

tcp → das zu verwendende Protokoll

mail.example.com → Hostname, der im MX-Record steht

3 → Wie benutzt du diesen TLSA-Record / Usage (DANE-EE)

1 → Was soll verifiziert werden / Selector (SubjectPublicKeyInfo)

1 → Wie soll verglichen werden / Matching Type (SHA-256)

<Hashwert> → SHA-256-Fingerprint des Zertifikats oder Schlüssels


📌 Wichtig: DANE funktioniert nicht mit SNI-basierter Wildcard-Nutzung allein – der MX-Hostname muss dem Zertifikat entsprechen oder von der Wildcard abgedeckt sein.


Voraussetzungen prüfen

Damit du überhaupt in der lage bist, TLSA-Records nutzen zu können, bedarf es einger Vorraussetzungen.

  • Der MX-Record deiner Domain zeigt auf mail.example.com.

  • Dein Wildcard-Zertifikat deckt mail.example.com ab (z. B. *.example.com).

  • Du nutzt DNSSEC für die Domain (Pflicht für DANE).

  • Der Mailserver unterstützt TLS (z. B. Postfix mit smtpdtlssecuritylevel = dane).

TLSA-Fingerprint erzeugen

Du benötigst den SHA-256-Fingerprint des Public Keys (nicht des ganzen Zertifikats).
Wie du den Fingerprint deines Zertifikates erhälst, zeige ich dir anhand eines Beispiels mit OpenSSL:

Public Key extrahieren

openssl x509 -in mail.example.com.pem -noout -pubkey > pubkey.pem

SHA-256-Hash erzeugen

openssl pkey -pubin -in pubkey.pem -outform DER | openssl sha256

Die Ausgabe sieht dann etwa so aus:

(stdin)=  3F21C995B7C9F0B4E4E2CBA4B65E1C290F20D295C599C04D1897DB4B7D75E1A0

Dieser Hashwert kommt in deinen TLSA-Record an der Stelle von <Hashwert> .


📌 Alternative: Du kannst direkt den Zertifikatshash nehmen (selector=0), aber empfohlen ist der Public Key (selector=1), weil er beim Zertifikatserneuern stabil bleibt.


TLSA-Record erstellen

Jetzt zeige ich dir nachdem wir alles geklärt haben, den eigentlichen Vorgang zum erstellen eines TLSA-Records anhand des folgenden Beispiels:

TLSA-Record für einen SMTP Server mit dem DNS Namen mail.example.com auf Port 25

Anhand der oben beschriebenen Punkte, ergibt sich folgender zu setzender DNS Eintrag:

_25.tcp.mail.example.com. 3600 IN TLSA 3 1 1 3F21C995B7C9F0B4E4E2CBA4B65E1C290F20D295C599C04D1897DB4B7D75E1A0

3600 → TTL (selbstverständlich anpassbar, je nach Provider)

3 1 1 → Usage 3 (DANE-EE), Selector 1, Match SHA-256

👉 Wenn du auch Submission/SMTPS absichern willst:

_465.tcp.mail.example.com. IN TLSA 3 1 1 <Hash>
_587.tcp.mail.example.com. IN TLSA 3 1 1 <Hash>

👉 Wenn du auch einen Webservice absichern willst:

_443.tcp.www.example.com. IN TLSA 3 1 1 <Hash>
_8443.tcp.secureapp.example.com. IN TLSA 3 1 1 <Hash>

DNSSEC aktivieren & Record signieren

Ohne DNSSEC wird der TLSA-Record von anderen Mailservern ignoriert.
Stelle sicher, dass:

  • DNSSEC für deine Domain aktiv ist (z. B. beim Domain-Registrar oder in BIND).

  • Der TLSA-Record signiert und im DNS veröffentlicht ist.

Du kannst mit folgendem Befehl testen:

dig +dnssec _25._tcp.mail.example.com TLSA

und folgende Beispielantwort erhalten

;; ANSWER SECTION:
_25._tcp.mail.example.com. 3600   IN      TLSA    3 1 1 3F21C995B7C9F0B4E4E2CBA4B65E1C290F20D295C599C04D1897DB4B 7D75E1A0
_25._tcp.mail.example.com. 3600   IN      RRSIG   TLSA 13 5 300 20251101095959 20251030075959 34505 example.com. AFZB59N/6zwEh+7qjmAEAVM4A+5DAK/AG6gNHu9MqSXQGp9zD0t9t8A4 wTr0Ut0awkFakWGJij42ZD09kSwW2A==

oder mit hash-slinger:

tlsa --verify mail.example.com 25

Besonderheiten bei Wildcard-Zertifikaten

  • Wildcard *.example.com ist für mail.example.com gültig ✅

  • Aber nicht für die Root-Domain (example.com) ❌

  • Du musst für jeden MX-Hostname einen eigenen TLSA-Record anlegen

  • Wildcard-TLSA-Records funktionieren nicht.

Beispiel:

Wenn du auch mx2.example.com betreibst, brauchst du einen zweiten Eintrag:

_25._tcp.mx2.example.com. IN TLSA 3 1 1 <Hash>

(Entweder mit dem gleichen Wildcard-Zertifikat oder einem eigenen)

Optional: Automatisierung

Wenn du Zertifikate automatisch erneuerst (z. B. über Certbot), kannst du den TLSA-Hash in einem Hook-Script automatisch neu erzeugen und in DNS aktualisieren.

Beispiel-Hook:

#!/bin/bash

CERT="/etc/letsencrypt/live/mail.example.com/fullchain.pem"
HASH=$(openssl x509 -in $CERT -noout -pubkey | \
       openssl pkey -pubin -outform DER | \
       openssl sha256 | awk '{print $2}')

#DNS API call / nsupdate mit neuem HASH

echo "Neuer TLSA Hash: $HASH"

Zusammenfassende ToDo Liste

👉 MX zeigt auf Hostname im Wildcard-Zertifikat

👉 Public Key Hash erzeugen

👉 TLSA-Record 25.tcp.hostname mit 3 1 1 und Hash im DNS veröffentlichen

👉 DNSSEC aktivieren

👉 Funktion mit dig oder tlsa testen

👉 Automatisiertes validieren deiner Records.

TLSA | Validiere TLSA Records mit CheckMK
🧩 Checkmk TLSA Validation Plugin Dieses Dokument beschreibt, wie du das TLSA Validation Script als Active Check in Checkmk einbindest und über ein Custom Attribute Ports pro Host konfigurierbar machst. 📜 1. Skriptinstallation Kopiere das Skript check_tlsa nach: /usr/lib/nagios/plugins/check_tlsa chmod +x /usr/lib/nagios/plugins/check_

Viel Erfolg beim Einrichten deiner neuen TLSA Records.

Read more

Wireguard | Tunnel Status überwachen

Wireguard | Tunnel Status überwachen

Automatischer Neustart des WireGuard-Tunnels bei Verbindungsverlust Diese Anleitung beschreibt, wie du deinen WireGuard-Tunnel (wg-quick) automatisch neu starten kannst, wenn der Remote-Endpunkt nicht erreichbar ist. 1️⃣ systemd-Konfiguration für automatischen Neustart WireGuard-Interfaces, die mit wg-quick up wg0 gestartet werden, erzeugen normalerweise einen systemd-Dienst namens [email protected]. Bearbeite die Service-Konfiguration: sudo systemctl