====== Parallel-Betrieb ====== **Komplexität:** Mittel \\ **Dauer:** Unbegrenzt (bis Classic abgeschaltet) \\ **Risiko:** Niedrig Gleichzeitiger Betrieb von klassischer und Post-Quantum-PKI für maximale Kompatibilität. ---- ===== Architektur ===== flowchart TB subgraph CLASSIC["🔐 KLASSISCHE PKI"] CR[Classic Root-CA] CI[Classic Intermediate] CC[Classic Zertifikate] end subgraph HYBRID["🔄 HYBRID PKI"] HR[Hybrid Root-CA] HI[Hybrid Intermediate] HC[Hybrid Zertifikate] end subgraph CLIENTS["👥 CLIENTS"] OLD[Legacy Clients] NEW[Moderne Clients] end CR --> CI --> CC HR --> HI --> HC CC --> OLD HC --> NEW CC -.->|Fallback| NEW style CLASSIC fill:#ffebee style HYBRID fill:#e8f5e9 ---- ===== Wann Parallel-Betrieb? ===== | Szenario | Empfehlung | |----------|------------| | Legacy-Systeme nicht updatebar | ✓ Parallel | | Schrittweise Migration über Jahre | ✓ Parallel | | Regulatorische Anforderungen für Rückwärtskompatibilität | ✓ Parallel | | Greenfield / Neues Projekt | ✗ Direkt Hybrid | | Alle Clients updatebar | ✗ Hybrid-Migration | ---- ===== Setup ===== ==== Verzeichnisstruktur ==== /etc/pki/ ├── classic/ │ ├── root-ca.pem │ ├── intermediate-ca.pem │ ├── intermediate-ca.key │ ├── crl/ │ └── issued/ ├── hybrid/ │ ├── root-ca.pem │ ├── intermediate-ca.pem │ ├── intermediate-ca.key │ ├── crl/ │ └── issued/ └── scripts/ ├── issue-classic.sh ├── issue-hybrid.sh └── issue-both.sh ==== Dual-Issue Script ==== #!/bin/bash # /etc/pki/scripts/issue-both.sh # Gibt ein Zertifikat von BEIDEN PKIs aus CSR_FILE="$1" OUTPUT_PREFIX="$2" if [ -z "$CSR_FILE" ] || [ -z "$OUTPUT_PREFIX" ]; then echo "Usage: $0 " exit 1 fi # Klassisches Zertifikat ausstellen echo "Stelle klassisches Zertifikat aus..." openssl ca -config /etc/pki/classic/openssl.cnf \ -in "$CSR_FILE" \ -out "${OUTPUT_PREFIX}-classic.pem" \ -days 365 \ -batch # Hybrid-Zertifikat ausstellen echo "Stelle Hybrid-Zertifikat aus..." /usr/local/bin/wvds-sign --mode hybrid \ --ca /etc/pki/hybrid/intermediate-ca.pfx \ --csr "$CSR_FILE" \ --out "${OUTPUT_PREFIX}-hybrid.pem" \ --days 365 echo "Fertig:" echo " Klassisch: ${OUTPUT_PREFIX}-classic.pem" echo " Hybrid: ${OUTPUT_PREFIX}-hybrid.pem" ---- ===== Server-Konfiguration ===== ==== Nginx: Dual-Zertifikat ==== server { listen 443 ssl; server_name api.example.com; # Primär: Hybrid-Zertifikat ssl_certificate /etc/ssl/certs/api-hybrid.pem; ssl_certificate_key /etc/ssl/private/api.key; # Fallback: Klassisches Zertifikat (für alte Clients) # Hinweis: Nginx unterstützt nur ein Zertifikat pro Server-Block # Für echten Dual-Mode: Separate Server-Blöcke oder SNI } # Alternative: Separate Server für Legacy server { listen 443 ssl; server_name api-legacy.example.com; ssl_certificate /etc/ssl/certs/api-classic.pem; ssl_certificate_key /etc/ssl/private/api.key; } ==== Apache: Dual-Zertifikat ==== ServerName api.example.com # Moderne Clients → Hybrid SSLCertificateFile /etc/ssl/certs/api-hybrid.pem SSLCertificateKeyFile /etc/ssl/private/api.key SSLCertificateChainFile /etc/ssl/certs/hybrid-chain.pem ServerName api-legacy.example.com # Legacy Clients → Klassisch SSLCertificateFile /etc/ssl/certs/api-classic.pem SSLCertificateKeyFile /etc/ssl/private/api.key SSLCertificateChainFile /etc/ssl/certs/classic-chain.pem ---- ===== Trust Store Management ===== ==== Clients mit beiden CAs ==== # Trust Store mit beiden Root-CAs cat /etc/pki/classic/root-ca.pem /etc/pki/hybrid/root-ca.pem > /etc/ssl/certs/ca-bundle.pem # Oder einzeln hinzufügen update-ca-trust extract ==== Windows Trust Store ==== # Beide Root-CAs importieren Import-Certificate -FilePath "classic-root.cer" -CertStoreLocation Cert:\LocalMachine\Root Import-Certificate -FilePath "hybrid-root.cer" -CertStoreLocation Cert:\LocalMachine\Root ---- ===== CRL/OCSP für beide PKIs ===== # CRL Distribution Points # Klassisch: http://crl.example.com/classic/intermediate.crl # Hybrid: http://crl.example.com/hybrid/intermediate.crl # Nginx für CRL-Verteilung location /crl/classic/ { alias /etc/pki/classic/crl/; types { application/pkix-crl crl; } } location /crl/hybrid/ { alias /etc/pki/hybrid/crl/; types { application/pkix-crl crl; } } ---- ===== Monitoring ===== # Prometheus: Beide PKIs überwachen scrape_configs: - job_name: 'pki-classic' static_configs: - targets: ['localhost:9793'] params: path: ['/etc/pki/classic/issued/*.pem'] relabel_configs: - target_label: pki replacement: 'classic' - job_name: 'pki-hybrid' static_configs: - targets: ['localhost:9793'] params: path: ['/etc/pki/hybrid/issued/*.pem'] relabel_configs: - target_label: pki replacement: 'hybrid' **Dashboard-Metriken:** | Metrik | Klassisch | Hybrid | |--------|-----------|--------| | Aktive Zertifikate | ''count(x509{pki="classic"})'' | ''count(x509{pki="hybrid"})'' | | Ablaufend < 30d | ''count(...)'' | ''count(...)'' | | CRL Next Update | ''crl_next_update{pki="classic"}'' | ''crl_next_update{pki="hybrid"}'' | ---- ===== Migrations-Tracking ===== #!/bin/bash # migration-status.sh - Fortschritt der Migration echo "=== PKI Migration Status ===" classic_count=$(find /etc/pki/classic/issued -name "*.pem" | wc -l) hybrid_count=$(find /etc/pki/hybrid/issued -name "*.pem" | wc -l) total=$((classic_count + hybrid_count)) if [ "$total" -gt 0 ]; then hybrid_percent=$((hybrid_count * 100 / total)) else hybrid_percent=0 fi echo "Klassisch: $classic_count" echo "Hybrid: $hybrid_count" echo "Gesamt: $total" echo "Migration: $hybrid_percent%" # Grafische Darstellung echo "" echo -n "Progress: [" for i in $(seq 1 50); do if [ $i -le $((hybrid_percent / 2)) ]; then echo -n "█" else echo -n "░" fi done echo "] $hybrid_percent%" ---- ===== Phase-Out Klassisch ===== flowchart LR subgraph ACTIVE["✅ AKTIV"] A1[Beide PKIs aktiv] end subgraph TRANSITION["🔄 ÜBERGANG"] T1[Klassisch: nur Renewal] T2[Hybrid: neue Zertifikate] end subgraph SUNSET["🌅 SUNSET"] S1[Klassisch: nur noch aktiv] S2[Keine neuen Classic-Certs] end subgraph END["🛑 ENDE"] E1[Klassisch deaktiviert] end ACTIVE --> TRANSITION --> SUNSET --> END style ACTIVE fill:#e8f5e9 style END fill:#ffebee **Timeline:** | Phase | Aktion | Trigger | |-------|--------|---------| | Aktiv | Beide PKIs ausstellen | Start | | Übergang | Classic nur Renewal | 80% Hybrid | | Sunset | Classic nur ablaufen lassen | 95% Hybrid | | Ende | Classic-CA offline | Alle Classic abgelaufen | ---- ===== Checkliste ===== | # | Prüfpunkt | ✓ | |---|-----------|---| | 1 | Beide PKIs aufgesetzt | ☐ | | 2 | Dual-Issue-Scripts funktionieren | ☐ | | 3 | Trust Stores enthalten beide CAs | ☐ | | 4 | CRL/OCSP für beide verfügbar | ☐ | | 5 | Monitoring für beide aktiv | ☐ | | 6 | Migration-Tracking eingerichtet | ☐ | | 7 | Phase-Out-Plan dokumentiert | ☐ | ---- ===== Verwandte Dokumentation ===== * [[.:classic-to-hybrid|Classic → Hybrid]] – Direkte Migration * [[.:rollback-strategie|Rollback-Strategie]] – Notfall-Plan * [[..:monitoring:start|Monitoring]] – Überwachung beider PKIs ---- << [[.:classic-to-hybrid|← Classic → Hybrid]] | [[.:rollback-strategie|→ Rollback-Strategie]] >> ---- //Wolfgang van der Stille @ EMSR DATA d.o.o. - Post-Quantum Cryptography Professional// {{tag>migration parallel dual-pki kompatibilitaet operator}}