====== Migracija klasicno → hibridno ====== **Kompleksnost:** Srednja \\ **Trajanje:** 6-12 mesecev (celotno) \\ **Tveganje:** Nizko-Srednje Postopna migracija s klasicne PKI (RSA/ECDSA) na hibridni nacin (klasicno + ML-DSA). ---- ===== Pregled ===== flowchart TB subgraph PHASE1["Faza 1: Priprava"] P1A[Inventura] P1B[Testno okolje] P1C[Posodobitev orodij] end subgraph PHASE2["Faza 2: Infrastruktura"] P2A[Root-CA hibridno] P2B[Intermediate-CA] P2C[Posodobitev CRL/OCSP] end subgraph PHASE3["Faza 3: Uvedba"] P3A[Strezniski certifikati] P3B[Odjemalski certifikati] P3C[Podpisovanje kode] end subgraph PHASE4["Faza 4: Validacija"] P4A[Nadzor] P4B[Revizija] P4C[Dokumentacija] end P1A --> P1B --> P1C --> P2A P2A --> P2B --> P2C --> P3A P3A --> P3B --> P3C --> P4A P4A --> P4B --> P4C style P2A fill:#fff3e0 style P3A fill:#e8f5e9 ---- ===== Faza 1: Priprava (1-2 meseca) ===== ==== 1.1 Izvedba inventure ==== #!/bin/bash # inventory-certs.sh - Inventura certifikatov echo "=== Inventura certifikatov $(date) ===" > inventory.csv echo "Pot,Subject,Algoritem,Velikost_kljuca,Iztece,Dni" >> inventory.csv # Lokalni certifikati for cert in /etc/ssl/certs/*.pem /etc/pki/tls/certs/*.pem; do [ -f "$cert" ] || continue subject=$(openssl x509 -in "$cert" -subject -noout 2>/dev/null | sed 's/subject=//') algo=$(openssl x509 -in "$cert" -text -noout 2>/dev/null | grep "Public Key Algorithm" | awk '{print $4}') keysize=$(openssl x509 -in "$cert" -text -noout 2>/dev/null | grep "Public-Key:" | grep -oP '\d+') expiry=$(openssl x509 -in "$cert" -enddate -noout 2>/dev/null | cut -d= -f2) days=$(( ($(date -d "$expiry" +%s) - $(date +%s)) / 86400 )) echo "\"$cert\",\"$subject\",\"$algo\",\"$keysize\",\"$expiry\",\"$days\"" >> inventory.csv done echo "Inventura koncana: inventory.csv" → Podrobnosti: [[.:inventur|Inventura certifikatov]] ==== 1.2 Vzpostavitev testnega okolja ==== # Docker testni PKI docker run -d --name test-ca \ -v /test-pki:/pki \ -e OPENSSL_CONF=/pki/openssl.cnf \ alpine/openssl # OpenSSL 3.6 za PQ docker exec test-ca openssl version # OpenSSL 3.6.0 ... # Test: Ustvarjanje hibridnega certifikata docker exec test-ca openssl genpkey -algorithm ML-DSA-65 -out /pki/test-mldsa.key ==== 1.3 Posodobitev orodij ==== | Orodje | Min. verzija | PQ podpora | |--------|--------------|------------| | OpenSSL | 3.6.0 | ML-DSA, ML-KEM | | .NET | 9.0+ | Preko WvdS.System.Security.Cryptography | | Java | 21+ | Preko BouncyCastle 1.78 | | curl | 8.5+ | Hibridni TLS | ---- ===== Faza 2: Infrastruktura (2-3 mesece) ===== ==== 2.1 Migracija Root-CA na hibridno ==== **Migracija Root-CA je najkritičnejši korak.** Skrbno načrtujte in temeljito testirajte. **Možnost A: Nov hibridni Root-CA (priporočeno)** // Ustvarjanje novega hibridnega Root-CA using var ecdsa = ECDsa.Create(ECCurve.NamedCurves.nistP384); var request = new CertificateRequest( "CN=My Organization Root CA - Hybrid, O=My Organization", ecdsa, HashAlgorithmName.SHA384); // CA razširitve request.CertificateExtensions.Add( new X509BasicConstraintsExtension(true, true, 2, true)); request.CertificateExtensions.Add( new X509KeyUsageExtension( X509KeyUsageFlags.KeyCertSign | X509KeyUsageFlags.CrlSign, true)); // Hibridni samopodpisan (ECDSA + ML-DSA) var hybridRoot = request.CreateSelfSigned( DateTimeOffset.UtcNow, DateTimeOffset.UtcNow.AddYears(25), CryptoMode.Hybrid); // Izvoz File.WriteAllBytes("hybrid-root-ca.pfx", hybridRoot.Export(X509ContentType.Pfx, "secure-password")); **Možnost B: Navzkrižna certifikacija (prehod)** // Stari Root-CA navzkrižno certificira nov hibridni CA using var oldRoot = new X509Certificate2("old-root.pfx", "password"); using var newHybridRoot = new X509Certificate2("hybrid-root.pfx", "password"); // Ustvarjanje navzkrižnega certifikata var crossCertRequest = new CertificateRequest( newHybridRoot.SubjectName, newHybridRoot.GetECDsaPublicKey()!, HashAlgorithmName.SHA384); // Podpisan s strani starega Root var crossCert = crossCertRequest.Create( oldRoot, newHybridRoot.NotBefore, newHybridRoot.NotAfter, newHybridRoot.SerialNumberBytes.ToArray()); ==== 2.2 Migracija Intermediate-CA ==== # Nov hibridni Intermediate-CA # 1. Generacija ključa openssl genpkey -algorithm EC -pkeyopt ec_paramgen_curve:P-384 -out intermediate.key # 2. Ustvarjanje CSR openssl req -new -key intermediate.key \ -out intermediate.csr \ -subj "/CN=My Organization Intermediate CA - Hybrid/O=My Organization" # 3. Podpis s hibridnim Root (z WvdS) // Podpis Intermediate s hibridnim Root using var hybridRoot = new X509Certificate2("hybrid-root.pfx", "password"); var intermediateCsr = CertificateRequest.LoadSigningRequest( File.ReadAllBytes("intermediate.csr"), HashAlgorithmName.SHA384); // Dodajanje CA razširitev intermediateCsr.CertificateExtensions.Add( new X509BasicConstraintsExtension(true, true, 1, true)); var intermediate = intermediateCsr.Create( hybridRoot, DateTimeOffset.UtcNow, DateTimeOffset.UtcNow.AddYears(10), Guid.NewGuid().ToByteArray(), CryptoMode.Hybrid); ==== 2.3 Posodobitev CRL/OCSP ==== // Ustvarjanje hibridno podpisanega CRL var crlBuilder = new CertificateRevocationListBuilder(); // Prevzem starih CRL vnosov foreach (var entry in existingCrlEntries) { crlBuilder.AddEntry(entry.SerialNumber, entry.RevocationDate, entry.Reason); } // Podpis s hibridnim CA byte[] newCrl = crlBuilder.Build( hybridIntermediate, newCrlNumber, DateTimeOffset.UtcNow.AddDays(7), HashAlgorithmName.SHA384, CryptoMode.Hybrid); ---- ===== Faza 3: Uvedba (3-6 mesecev) ===== ==== 3.1 Strežniški certifikati ==== **Matrika prioritet:** | Tip strežnika | Prioriteta | Razlog | |---------------|------------|--------| | Zunanji API | Visoka | Najvišje tveganje | | Notranje mikrostoritve | Srednja | Bočno gibanje | | Razvoj | Nizka | Testno okolje | # Skupinska obnova s hibridnim for server in $(cat servers.txt); do # Ustvarjanje CSR ssh "$server" "openssl req -new -key /etc/ssl/private/server.key \ -out /tmp/renew.csr -subj \"/CN=$server\"" # Prevzem CSR scp "$server:/tmp/renew.csr" "./csrs/$server.csr" # Izdaja hibridnega certifikata (preko API ali skripte) ./sign-hybrid.sh "./csrs/$server.csr" "./certs/$server.pem" # Namestitev certifikata scp "./certs/$server.pem" "$server:/etc/ssl/certs/server.pem" ssh "$server" "systemctl reload nginx" done ==== 3.2 Odjemalski certifikati ==== // Izdaja odjemalskega certifikata s hibridnim var clientCsr = CertificateRequest.LoadSigningRequest(csrBytes, HashAlgorithmName.SHA384); clientCsr.CertificateExtensions.Add( new X509EnhancedKeyUsageExtension( new OidCollection { new Oid("1.3.6.1.5.5.7.3.2") }, // Client Auth false)); var clientCert = clientCsr.Create( intermediate, DateTimeOffset.UtcNow, DateTimeOffset.UtcNow.AddYears(1), Guid.NewGuid().ToByteArray(), CryptoMode.Hybrid); ==== 3.3 Certifikati za podpisovanje kode ==== → Glejte [[..:automatisierung:cicd-code-signing|CI/CD podpisovanje kode]] za integracijo v cevovod ---- ===== Faza 4: Validacija (1-2 meseca) ===== ==== 4.1 Aktivacija nadzora ==== # Prometheus opozorilo za hibridni status - alert: NonHybridCertificateInProduction expr: x509_cert_algorithm{env="production"} !~ ".*ML-DSA.*|.*Hybrid.*" for: 24h labels: severity: warning annotations: summary: "Ne-hibridni certifikat v produkciji: {{ $labels.filepath }}" ==== 4.2 Kontrolni seznam ==== | # | Kontrolna točka | Status | |---|-----------------|--------| | 1 | Vsi CA certifikati na hibridnem | | | 2 | Vsi strežniški certifikati obnovljeni | | | 3 | CRL/OCSP podpisan s hibridnim | | | 4 | Shrambe zaupanja posodobljene | | | 5 | Nadzor ne kaže samo-klasičnih | | | 6 | Povrnitev testirana | | | 7 | Dokumentacija posodobljena | | ---- ===== Načrt povrnitve ===== **Ob težavah:** # 1. Preklop nazaj na klasični CA export CA_CERT=/etc/pki/CA/classic-intermediate.pem export CA_KEY=/etc/pki/CA/classic-intermediate.key # 2. Ponovna izdaja certifikatov s klasičnim CA ./issue-classic.sh # 3. Preklic hibridnih CA certifikatov (če potrebno) ./revoke-hybrid-certs.sh → Podrobnosti: [[.:rollback-strategie|Strategija povrnitve]] ---- ===== Povezana dokumentacija ===== * [[.:parallel-betrieb|Vzporedna operacija]] – Alternativna strategija * [[.:inventur|Inventura]] – Podroben popis * [[sl:int:pqcrypt:konzepte:start|Kriptografski načini]] – Razlaga hibridnega ---- << [[.:start|← Migracija]] | [[.:parallel-betrieb|→ Vzporedna operacija]] >> ---- //Wolfgang van der Stille @ EMSR DATA d.o.o. - Post-Quantum Cryptography Professional// {{tag>migration hybrid classic upgrade operator}}