> ## Content Index
> Fetch the complete content index at: https://blog.lange-it.com/llms.txt
> Use this file to discover other available public pages before exploring further.

# TLSA | Transportverschlüsselung mit DANE
- URL: https://blog.lange-it.com/tlsa-transportverschlusselung-mit-dane/
- Published: 2025-10-31T09:29:04.000Z
- Updated: 2026-03-01T15:16:01.000Z
- Author: Peter Lange
- Tags: TLSA, SSL-Security, EMail-Security, WEB-Security

# 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:

```bash
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

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

```

### SHA-256-Hash erzeugen

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

```

Die Ausgabe sieht dann etwa so aus:

```bash
(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:

```bash
_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:

```bash
_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:

```bash
_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:

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

```

und folgende Beispielantwort erhalten

```bash
;; 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:

```bash
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:

```bash
_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:

```bash
#!/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\_![](https://blog.lange-it.com/content/images/icon/logo_lange_it_2017_invertiert_82D_icon.ico)Lange-IT BlogPeter Lange![](https://blog.lange-it.com/content/images/thumbnail/photo-1516321318423-f06f85e504b3)](https://blog.lange-it.com/tlsa-validiere-tlsa-records-mit-checkmk/)

Viel Erfolg beim Einrichten deiner neuen TLSA Records.