Zum Hauptinhalt springen

Domänenmodus – TLS/SSL-Scanner

Gilt für:
TLS 1.2 / TLS 1.3Extraktion der ZertifikatsketteErkennung von Cipher Suite & SchlüsselaustauschSubdomain-Erkennung (WhoisXML API)Erkennung des PQ-Schlüsselaustauschsv1.0.0
Status

Implementiert - Verfügbar ab v1.0.0. Entwickelt in Rust unter Verwendung von rustls (mit ring-Backend) für den TLS-Handshake und x509-parser für die Zertifikatsanalyse.

Überblick​

Der Domänenmodus führt ein aktives TLS-Scanning entfernter Endpunkte durch. Er verbindet sich mit einem Zielhost, führt einen TLS-Handshake über rustls aus und extrahiert die vollständige Zertifikatskette (Serverzertifikat, Zwischenzertifikate und Root). Er erkennt außerdem die ausgehandelte Cipher Suite und den Schlüsselaustauschalgorithmus. Der Domänenmodus unterstützt die Subdomain-Erkennung über die WhoisXML API und die optionale Erkennung des Post-Quanten-Schlüsselaustauschs (X25519MLKEM768, Kyber768) mittels Paketerfassung.

Funktionsweise​

Ablauf des Domänenmodus

1

TCP-Verbindung

Verbindet sich mit Zielhost und -port (Standard: 443)

2

TLS-Handshake

Führt einen TLS-Handshake über rustls aus (TLS 1.2/1.3, ring-Backend)

3

Kettenextraktion

Extrahiert die vollständige Zertifikatskette: Server + Zwischenzertifikate + Root

4

Cipher-Erkennung

Identifiziert die ausgehandelte Cipher Suite und die Schlüsselaustauschmethode

5

Krypto-Analyse

Analysiert Algorithmen, Schlüsselgrößen und Quantenanfälligkeit

6

Risikobewertung

Berechnet Quantenrisikoscores für jedes Zertifikat

Funktionen​

1 Unterstützung von TLS 1.2 & 1.3

Verbindet sich mit rustls und ring-Backend und unterstützt TLS-1.2- und TLS-1.3-Handshakes

2 Vollständige Zertifikatskette

Extrahiert die komplette Kette: Leaf-(Server-)Zertifikat, Zwischen-CAs und Root-CA

3 Cipher Suite & Schlüsselaustausch

Erkennt die im Handshake ausgehandelte Cipher Suite und den Schlüsselaustauschalgorithmus

4 Subdomain-Erkennung

Erkennt Subdomains über die WhoisXML API für eine breitere Scan-Abdeckung (konfigurierbares Maximum)

5 Erkennung des PQ-Schlüsselaustauschs

Optionale Paketerfassung zur Erkennung von Post-Quanten-Schlüsselaustauschen (X25519MLKEM768, Kyber768)

6 Mehrere Ausgabeformate

Ergebnisse im JSON-, YAML-, terminalfreundlichen oder HTML-Format

Verwendung​

Einfaches Scannen​

# Scan a single domain on default port 443
dke-scanner-agent domain --target example.com

# Scan with custom port
dke-scanner-agent domain --target api.example.com --port 8443

# Scan with output to file
dke-scanner-agent domain --target example.com --output scan-results.json

Befehlszeilenoptionen​

FlagBeschreibungStandardErforderlich
--target <HOST>Ziel-Hostname oder IP-AdresseNoneJa
--port <PORT>Ziel-Portnummer443Nein
--timeout <SECS>Verbindungs-Timeout in Sekunden10Nein
--discover-subdomainsSubdomain-Erkennung über die WhoisXML API aktivierenfalseNein
--subdomain-api-key <KEY>WhoisXML-API-Schlüssel für die Subdomain-ErkennungNoneNein (erforderlich bei --discover-subdomains)
--max-subdomains <N>Maximale Anzahl der zu scannenden Subdomains10Nein
--detect-pq-kexErkennung des PQ-Schlüsselaustauschs mittels Paketerfassung aktivierenfalseNein
--interface <NAME>Netzwerkschnittstelle für die Paketerfassung (verwendet mit --detect-pq-kex)Automatische ErkennungNein
--output <FILE>Pfad der AusgabedateistdoutNein
--format <FMT>Ausgabeformat: json, yaml, terminal oder htmljsonNein

Erweiterte Beispiele​

Architektur​

Der Domänenmodus verwendet rustls mit dem kryptografischen ring-Backend für einen reinen Rust-TLS-Handshake ohne OpenSSL-Abhängigkeiten:

  1. Erstellt einen rustls-Client (ring-Backend, TLS 1.2/1.3).
  2. Verbindet sich mit dem Host und führt den TLS-Handshake aus.
  3. Extrahiert die vollständige Zertifikatskette (Server, Zwischenzertifikate, Root).
  4. Erfasst die ausgehandelte Cipher Suite, den Schlüsselaustausch und die Protokollversion.
  5. Erkennt optional den Post-Quanten-Schlüsselaustausch (z. B. X25519MLKEM768) mittels Paketerfassung, wenn --detect-pq-kex gesetzt ist.
  6. Erkennt optional Subdomains über die WhoisXML API und scannt jede einzelne.

Beispielausgabe​

{
"scan_metadata": {
"scanner_version": "1.0.0",
"scan_mode": "domain",
"scan_date": "2025-01-30T16:20:15Z"
},
"target": {
"hostname": "api.example.com",
"port": 443,
"ip_address": "93.184.216.34"
},
"tls_info": {
"protocol_version": "TLS 1.3",
"cipher_suite": "TLS_AES_256_GCM_SHA384",
"key_exchange": "X25519"
},
"certificates": [
{
"position": 0,
"type": "leaf",
"subject": "CN=api.example.com",
"issuer": "CN=DigiCert TLS RSA SHA256 2020 CA1",
"serial": "0A1B2C3D4E5F6789",
"not_before": "2024-01-01T00:00:00Z",
"not_after": "2025-12-31T23:59:59Z",
"algorithm": "RSA",
"key_size": 2048,
"signature_algorithm": "SHA256WithRSA",
"is_self_signed": false,
"is_ca": false,
"quantum_vulnerable": true,
"risk_assessment": {
"quantum_risk_score": 8.2,
"priority": "P1",
"severity": "HIGH"
}
},
{
"position": 1,
"type": "intermediate",
"subject": "CN=DigiCert TLS RSA SHA256 2020 CA1",
"issuer": "CN=DigiCert Global Root CA",
"algorithm": "RSA",
"key_size": 2048,
"is_ca": true,
"quantum_vulnerable": true
},
{
"position": 2,
"type": "root",
"subject": "CN=DigiCert Global Root CA",
"issuer": "CN=DigiCert Global Root CA",
"algorithm": "RSA",
"key_size": 2048,
"is_self_signed": true,
"is_ca": true,
"quantum_vulnerable": true
}
]
}

Wesentliche Einschränkungen​

X25519 vs. X25519MLKEM768

Die rustls-TLS-Bibliothek kann nativ nicht zwischen den Schlüsselaustauschen X25519 und X25519MLKEM768 unterscheiden. Beide erscheinen auf der rustls-API-Ebene als X25519. Um Post-Quanten-Schlüsselaustausche zuverlässig zu erkennen, verwenden Sie das Flag --detect-pq-kex, das die Paketerfassungsanalyse auf der angegebenen Netzwerkschnittstelle aktiviert.

Subdomain-Erkennung erfordert API-Schlüssel

Die Subdomain-Erkennung wird von der WhoisXML API bereitgestellt. Sie müssen bei Verwendung von --discover-subdomains einen gültigen API-Schlüssel über --subdomain-api-key angeben. Die kostenlose Stufe unterstützt eine begrenzte Anzahl von API-Aufrufen pro Monat.

Fehlerbehebung​

Bewährte Vorgehensweisen​