Maak kennis met PostScale -- e-mail-API voor transactionele, inkomende en gemaskeerde adressen. PostScale

    Wat is een TLSA-record

    Leer hoe TLSA-records DANE mogelijk maken voor certificaatverificatie, als alternatief voor traditionele CA-validatie. Inclusief voorbeelden voor het DNScale-dashboard en de API.

    Een TLSA (Transport Layer Security Authentication) record koppelt een TLS-servercertificaat of publieke sleutel aan een domeinnaam, waardoor DANE (DNS-based Authentication of Named Entities) mogelijk wordt. TLSA-records bieden een alternatief of aanvulling op traditionele Certificate Authority-validatie.

    Hoe TLSA-records werken

    TLSA-records specificeren welk certificaat of welke sleutel een client kan verwachten bij een TLS-verbinding:

    _443._tcp.example.com.    3600    TLSA    3 1 1 e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855

    Dit vertelt clients: "Wanneer je verbinding maakt met example.com op poort 443 via TCP, verwacht dan een certificaat dat overeenkomt met deze SHA-256 hash."

    Recordcomponenten

    ComponentVeldBeschrijving
    Naam_poort._protocol.domein_443._tcp.example.com
    GebruikCertificaatgebruikstype0, 1, 2 of 3
    SelectorWat te matchen0 (volledig cert.) of 1 (publieke sleutel)
    MatchtypeHash-algoritme0 (exact), 1 (SHA-256), 2 (SHA-512)
    CertificaatgegevensHash of certificaatHex-gecodeerde gegevens

    Gebruikswaarden

    WaardeNaamBeschrijving
    0PKIX-TAMoet koppelen aan opgegeven CA + PKIX-validatie doorstaan
    1PKIX-EEEindentiteitscertificaat moet overeenkomen + PKIX-validatie doorstaan
    2DANE-TAMoet koppelen aan opgegeven trust anchor (geen PKIX)
    3DANE-EEEindentiteitscertificaat moet exact overeenkomen (geen PKIX)

    Selectorwaarden

    WaardeNaamBeschrijving
    0CertMatch volledig certificaat
    1SPKIMatch SubjectPublicKeyInfo (alleen publieke sleutel)

    Matchtypewaarden

    WaardeNaamBeschrijving
    0VolledigExacte match (volledige gegevens, geen hash)
    1SHA-256SHA-256 hash van geselecteerde gegevens
    2SHA-512SHA-512 hash van geselecteerde gegevens

    Veelvoorkomende toepassingen

    Webserver DANE-EE (aanbevolen)

    Zelfondertekende validatie via DNS:

    _443._tcp.example.com.    3600    TLSA    3 1 1 e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855

    Gebruik 3 + Selector 1 + SHA-256 is de meest gebruikelijke configuratie.

    Mailserver (SMTP)

    Beveiligde e-mailbezorging met DANE:

    _25._tcp.mail.example.com.      3600    TLSA    3 1 1 abc123...
    _465._tcp.mail.example.com.     3600    TLSA    3 1 1 abc123...
    _587._tcp.mail.example.com.     3600    TLSA    3 1 1 abc123...

    XMPP-server

    _5222._tcp.xmpp.example.com.    3600    TLSA    3 1 1 def456...
    _5269._tcp.xmpp.example.com.    3600    TLSA    3 1 1 def456...

    Meerdere certificaten (rollover)

    Tijdens certificaatvernieuwing:

    _443._tcp.example.com.    3600    TLSA    3 1 1 oudecerthash...
    _443._tcp.example.com.    3600    TLSA    3 1 1 nieuwecerthash...

    Recordformaat

    VeldBeschrijvingVoorbeeld
    Naam_poort._protocol.domein_443._tcp.example.com
    TypeRecordtypeTLSA
    GebruikCertificaatgebruik3
    SelectorTe matchen gegevens1
    MatchtypeHashtype1
    CertificaatgegevensHash (hex)e3b0c44...
    TTLTime to live (seconden)3600

    TLSA-gegevens genereren

    Met OpenSSL

    SHA-256 hash van publieke sleutel ophalen (selector=1, matching=1):

    # Vanuit certificaatbestand
    openssl x509 -in cert.pem -noout -pubkey | \
      openssl pkey -pubin -outform DER | \
      openssl dgst -sha256 -binary | \
      xxd -p -c 256
     
    # Van live server
    echo | openssl s_client -connect example.com:443 2>/dev/null | \
      openssl x509 -noout -pubkey | \
      openssl pkey -pubin -outform DER | \
      openssl dgst -sha256 -binary | \
      xxd -p -c 256

    SHA-256 hash van volledig certificaat ophalen (selector=0, matching=1):

    openssl x509 -in cert.pem -outform DER | \
      openssl dgst -sha256 -binary | \
      xxd -p -c 256

    Met ldns-dane

    ldns-dane create example.com 443 3 1 1

    Een TLSA-record toevoegen

    Via het dashboard

    1. Navigeer naar je zone in het DNScale-dashboard
    2. Klik op Add Record
    3. Configureer het record:
      • Name: Voer _443._tcp in (of de juiste poort/protocol)
      • Type: Selecteer TLSA
      • Usage: Selecteer het certificaatgebruik (0-3)
      • Selector: Kies Volledig cert. (0) of Publieke sleutel (1)
      • Matching Type: Kies SHA-256 (1) of SHA-512 (2)
      • Certificate Data: Voer de hex-gecodeerde hash in
      • TTL: Stel de cacheduur in (standaard: 3600)
    4. Klik op Create Record

    Via de API

    Een TLSA-record aanmaken:

    curl -X POST "https://api.dnscale.eu/v1/zones/{zone_id}/records" \
      -H "Authorization: Bearer YOUR_API_KEY" \
      -H "Content-Type: application/json" \
      -d '{
        "name": "_443._tcp",
        "type": "TLSA",
        "content": "3 1 1 e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
        "ttl": 3600
      }'

    TLSA aanmaken voor mailserver:

    curl -X POST "https://api.dnscale.eu/v1/zones/{zone_id}/records" \
      -H "Authorization: Bearer YOUR_API_KEY" \
      -H "Content-Type: application/json" \
      -d '{
        "name": "_25._tcp.mail",
        "type": "TLSA",
        "content": "3 1 1 e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
        "ttl": 3600
      }'

    API-respons:

    {
      "status": "success",
      "data": {
        "message": "Record created successfully",
        "record": {
          "id": "encoded-record-id",
          "name": "_443._tcp.example.com.",
          "type": "TLSA",
          "content": "3 1 1 e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
          "ttl": 3600,
          "disabled": false
        }
      }
    }

    DANE-vereisten

    Om DANE te laten werken, moet je zone:

    1. DNSSEC-ondertekend zijn - TLSA-records zonder DNSSEC bieden geen beveiligingsvoordeel
    2. Correcte TLSA-records hebben - De hash moet overeenkomen met het daadwerkelijke certificaat/de sleutel
    3. Records bijwerken tijdens certificaatrotatie - Voeg de nieuwe hash toe v贸贸r het implementeren van het nieuwe certificaat

    Certificaat-rolloverproces

    1. Genereer een nieuw certificaat
    2. Voeg een TLSA-record toe voor de nieuwe certificaathash
    3. Wacht op DNS-propagatie (minimaal de TTL-duur)
    4. Implementeer het nieuwe certificaat op de server
    5. Verwijder het oude TLSA-record
    # Stap 2: Voeg nieuwe hash toe terwijl de oude behouden blijft
    _443._tcp.example.com.    3600    TLSA    3 1 1 oudehash...
    _443._tcp.example.com.    3600    TLSA    3 1 1 nieuwehash...
     
    # Stap 5: Verwijder de oude hash
    _443._tcp.example.com.    3600    TLSA    3 1 1 nieuwehash...

    Best practices

    1. Gebruik DANE-EE (gebruik 3) - Eenvoudigst en meest toegepast

    2. Gebruik selector 1 (SPKI) - Overleeft certificaatvernieuwing als de sleutel wordt hergebruikt

    3. Gebruik SHA-256 (matchtype 1) - Standaard en breed ondersteund

    4. Publiceer v贸贸r implementatie - Voeg TLSA-records toe v贸贸r het implementeren van nieuwe certificaten

    5. Schakel eerst DNSSEC in - TLSA zonder DNSSEC is onveilig

    6. Bewaar meerdere records tijdens rollover - Voorkom serviceonderbreking

    TLSA-records testen

    # Query TLSA-record
    dig TLSA _443._tcp.example.com
     
    # Verifieer met ldns
    ldns-dane verify example.com 443
     
    # Online tools
    # - https://dane.sys4.de/
    # - https://internet.nl/

    Gerelateerde recordtypen

    • CAA - Certificate Authority-autorisatie
    • TXT - Domeinverificatie
    • SSHFP - SSH-fingerprints (vergelijkbaar concept)

    Conclusie

    TLSA-records maken DANE mogelijk en bieden DNS-gebaseerde certificaatvalidatie die traditionele CA-verificatie kan aanvullen of vervangen. In combinatie met DNSSEC bieden TLSA-records sterke bescherming tegen man-in-the-middle-aanvallen. De intu茂tieve interface van DNScale maakt het configureren van TLSA-records eenvoudig, met speciale velden voor gebruik, selector en matchtypeparameters.