====== Migrazione Classic → Hybrid ====== **Complessità:** Media \\ **Durata:** 6-12 mesi (completa) \\ **Rischio:** Basso-Medio Migrazione graduale da PKI classica (RSA/ECDSA) a modalità ibrida (Classico + ML-DSA). ---- ===== Panoramica ===== flowchart TB subgraph PHASE1["Fase 1: Preparazione"] P1A[Inventario] P1B[Ambiente test] P1C[Aggiornamento tooling] end subgraph PHASE2["Fase 2: Infrastruttura"] P2A[Root-CA Hybrid] P2B[Intermediate-CA] P2C[Aggiornamento CRL/OCSP] end subgraph PHASE3["Fase 3: Rollout"] P3A[Certificati server] P3B[Certificati client] P3C[Code-Signing] end subgraph PHASE4["Fase 4: Validazione"] P4A[Monitoraggio] P4B[Audit] P4C[Documentazione] end P1A --> P1B --> P1C --> P2A P2A --> P2B --> P2C --> P3A P3A --> P3B --> P3C --> P4A P4A --> P4B --> P4C style P2A fill:#fff3e0 style P3A fill:#e8f5e9 ---- ===== Fase 1: Preparazione (1-2 mesi) ===== ==== 1.1 Eseguire inventario ==== #!/bin/bash # inventory-certs.sh - Inventario certificati echo "=== Inventario certificati $(date) ===" > inventory.csv echo "Percorso,Subject,Algoritmo,DimensioneChiave,Scadenza,Giorni" >> inventory.csv # Certificati locali 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 "Inventario completato: inventory.csv" → Dettagli: [[.:inventur|Inventario certificati]] ==== 1.2 Configurare ambiente di test ==== # PKI di test basata su Docker docker run -d --name test-ca \ -v /test-pki:/pki \ -e OPENSSL_CONF=/pki/openssl.cnf \ alpine/openssl # OpenSSL 3.6 per PQ docker exec test-ca openssl version # OpenSSL 3.6.0 ... # Test: Creare certificato ibrido docker exec test-ca openssl genpkey -algorithm ML-DSA-65 -out /pki/test-mldsa.key ==== 1.3 Aggiornamento tooling ==== | Strumento | Versione min. | Supporto PQ | |-----------|---------------|-------------| | OpenSSL | 3.6.0 | ML-DSA, ML-KEM | | .NET | 9.0+ | Tramite WvdS.System.Security.Cryptography | | Java | 21+ | Tramite BouncyCastle 1.78 | | curl | 8.5+ | TLS ibrido | ---- ===== Fase 2: Infrastruttura (2-3 mesi) ===== ==== 2.1 Migrare Root-CA a Hybrid ==== **La migrazione della Root-CA è il passo più critico.** Pianificare con cura e testare approfonditamente. **Opzione A: Nuova Root-CA Hybrid (raccomandata)** // Creare nuova Root-CA Hybrid using var ecdsa = ECDsa.Create(ECCurve.NamedCurves.nistP384); var request = new CertificateRequest( "CN=My Organization Root CA - Hybrid, O=My Organization", ecdsa, HashAlgorithmName.SHA384); // Estensioni CA request.CertificateExtensions.Add( new X509BasicConstraintsExtension(true, true, 2, true)); request.CertificateExtensions.Add( new X509KeyUsageExtension( X509KeyUsageFlags.KeyCertSign | X509KeyUsageFlags.CrlSign, true)); // Self-Signed Hybrid (ECDSA + ML-DSA) var hybridRoot = request.CreateSelfSigned( DateTimeOffset.UtcNow, DateTimeOffset.UtcNow.AddYears(25), CryptoMode.Hybrid); // Esportazione File.WriteAllBytes("hybrid-root-ca.pfx", hybridRoot.Export(X509ContentType.Pfx, "secure-password")); **Opzione B: Cross-Certification (transizione)** // Vecchia Root-CA cross-certifica nuova CA Hybrid using var oldRoot = new X509Certificate2("old-root.pfx", "password"); using var newHybridRoot = new X509Certificate2("hybrid-root.pfx", "password"); // Creare certificato cross var crossCertRequest = new CertificateRequest( newHybridRoot.SubjectName, newHybridRoot.GetECDsaPublicKey()!, HashAlgorithmName.SHA384); // Firmato dalla vecchia Root var crossCert = crossCertRequest.Create( oldRoot, newHybridRoot.NotBefore, newHybridRoot.NotAfter, newHybridRoot.SerialNumberBytes.ToArray()); ==== 2.2 Migrare Intermediate-CA ==== // Firmare Intermediate con Hybrid-Root using var hybridRoot = new X509Certificate2("hybrid-root.pfx", "password"); var intermediateCsr = CertificateRequest.LoadSigningRequest( File.ReadAllBytes("intermediate.csr"), HashAlgorithmName.SHA384); // Aggiungere estensioni CA 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 Aggiornamento CRL/OCSP ==== // Creare CRL firmata Hybrid var crlBuilder = new CertificateRevocationListBuilder(); // Riprendere voci CRL esistenti foreach (var entry in existingCrlEntries) { crlBuilder.AddEntry(entry.SerialNumber, entry.RevocationDate, entry.Reason); } // Firmare con CA Hybrid byte[] newCrl = crlBuilder.Build( hybridIntermediate, newCrlNumber, DateTimeOffset.UtcNow.AddDays(7), HashAlgorithmName.SHA384, CryptoMode.Hybrid); ---- ===== Fase 3: Rollout (3-6 mesi) ===== ==== 3.1 Certificati server ==== **Matrice priorità:** | Tipo server | Priorità | Motivo | |-------------|----------|--------| | API esterne | Alta | Rischio massimo | | Microservizi interni | Media | Movimento laterale | | Development | Bassa | Ambiente test | ==== 3.2 Certificati client ==== // Emettere certificato client con Hybrid 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); ---- ===== Fase 4: Validazione (1-2 mesi) ===== ==== 4.1 Attivare monitoraggio ==== # Alert Prometheus per stato Hybrid - alert: NonHybridCertificateInProduction expr: x509_cert_algorithm{env="production"} !~ ".*ML-DSA.*|.*Hybrid.*" for: 24h labels: severity: warning annotations: summary: "Certificato non-Hybrid in produzione: {{ $labels.filepath }}" ==== 4.2 Checklist ==== | # | Punto di verifica | Stato | |---|-------------------|-------| | 1 | Tutti i certificati CA su Hybrid | ☐ | | 2 | Tutti i certificati server rinnovati | ☐ | | 3 | CRL/OCSP firmati con Hybrid | ☐ | | 4 | Trust Store aggiornati | ☐ | | 5 | Monitoraggio non mostra solo-classici | ☐ | | 6 | Rollback testato | ☐ | | 7 | Documentazione aggiornata | ☐ | ---- ===== Piano di rollback ===== → Dettagli: [[.:rollback-strategie|Strategia di rollback]] ---- ===== Documentazione correlata ===== * [[.:parallel-betrieb|Funzionamento parallelo]] – Strategia alternativa * [[.:inventur|Inventario]] – Rilevamento dettagliato * [[it:int:pqcrypt:konzepte:start|Modalità crypto]] – Spiegazione Hybrid ---- << [[.:start|← Migrazione]] | [[.:parallel-betrieb|→ Funzionamento parallelo]] >> ---- //Wolfgang van der Stille @ EMSR DATA d.o.o. - Post-Quantum Cryptography Professional// {{tag>migrazione hybrid classic upgrade operator}}