Domänenmodus – TLS/SSL-Scanner
Domänenmodus – TLS/SSL-Scanner
TLS-Handshake-Analyse mit vollständiger Extraktion der Zertifikatskette, Erkennung von Cipher Suites und optionaler Erkennung des PQ-Schlüsselaustauschs
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
TCP-Verbindung
Verbindet sich mit Zielhost und -port (Standard: 443)
TLS-Handshake
Führt einen TLS-Handshake über rustls aus (TLS 1.2/1.3, ring-Backend)
Kettenextraktion
Extrahiert die vollständige Zertifikatskette: Server + Zwischenzertifikate + Root
Cipher-Erkennung
Identifiziert die ausgehandelte Cipher Suite und die Schlüsselaustauschmethode
Krypto-Analyse
Analysiert Algorithmen, Schlüsselgrößen und Quantenanfälligkeit
Risikobewertung
Berechnet Quantenrisikoscores für jedes Zertifikat
Funktionen
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
Vollständige Zertifikatskette
Extrahiert die komplette Kette: Leaf-(Server-)Zertifikat, Zwischen-CAs und Root-CA
Cipher Suite & Schlüsselaustausch
Erkennt die im Handshake ausgehandelte Cipher Suite und den Schlüsselaustauschalgorithmus
Subdomain-Erkennung
Erkennt Subdomains über die WhoisXML API für eine breitere Scan-Abdeckung (konfigurierbares Maximum)
Erkennung des PQ-Schlüsselaustauschs
Optionale Paketerfassung zur Erkennung von Post-Quanten-Schlüsselaustauschen (X25519MLKEM768, Kyber768)
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
| Flag | Beschreibung | Standard | Erforderlich |
|---|---|---|---|
| --target <HOST> | Ziel-Hostname oder IP-Adresse | None | Ja |
| --port <PORT> | Ziel-Portnummer | 443 | Nein |
| --timeout <SECS> | Verbindungs-Timeout in Sekunden | 10 | Nein |
| --discover-subdomains | Subdomain-Erkennung über die WhoisXML API aktivieren | false | Nein |
| --subdomain-api-key <KEY> | WhoisXML-API-Schlüssel für die Subdomain-Erkennung | None | Nein (erforderlich bei --discover-subdomains) |
| --max-subdomains <N> | Maximale Anzahl der zu scannenden Subdomains | 10 | Nein |
| --detect-pq-kex | Erkennung des PQ-Schlüsselaustauschs mittels Paketerfassung aktivieren | false | Nein |
| --interface <NAME> | Netzwerkschnittstelle für die Paketerfassung (verwendet mit --detect-pq-kex) | Automatische Erkennung | Nein |
| --output <FILE> | Pfad der Ausgabedatei | stdout | Nein |
| --format <FMT> | Ausgabeformat: json, yaml, terminal oder html | json | Nein |
Erweiterte Beispiele
Architektur
Der Domänenmodus verwendet rustls mit dem kryptografischen ring-Backend für einen reinen Rust-TLS-Handshake ohne OpenSSL-Abhängigkeiten:
- Erstellt einen
rustls-Client (ring-Backend, TLS 1.2/1.3). - Verbindet sich mit dem Host und führt den TLS-Handshake aus.
- Extrahiert die vollständige Zertifikatskette (Server, Zwischenzertifikate, Root).
- Erfasst die ausgehandelte Cipher Suite, den Schlüsselaustausch und die Protokollversion.
- Erkennt optional den Post-Quanten-Schlüsselaustausch (z. B. X25519MLKEM768) mittels Paketerfassung, wenn
--detect-pq-kexgesetzt ist. - 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
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.
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.