====== Runbook: Emissione certificato ====== **Durata:** ~10 minuti \\ **Ruolo:** Operatore PKI \\ **Prerequisito:** CSR approvato ---- ===== Workflow ===== flowchart TD A[CSR ricevuto] --> B{Validare CSR} B -->|Non valido| C[Rifiutare + Ticket] B -->|Valido| D{Approvazione?} D -->|No| E[Richiedere approvazione] D -->|Sì| F[Firmare certificato] F --> G{Modalità ibrida?} G -->|Sì| H[Aggiungere estensione PQ] G -->|No| I[Firma classica] H --> J[Consegnare] I --> J J --> K[Audit Log] style B fill:#fff3e0 style F fill:#e8f5e9 style H fill:#e3f2fd ---- ===== Passo 1: Ricevere e validare CSR ===== **Checklist prima della firma:** | # | Punto di verifica | Comando | Atteso | |---|-----------|--------|----------| | 1 | Formato CSR valido | ''openssl req -in request.csr -verify -noout'' | ''verify OK'' | | 2 | Lunghezza chiave | ''openssl req -in request.csr -text \| grep "Public-Key"'' | ≥2048 Bit (RSA), ≥256 Bit (EC) | | 3 | Subject corretto | ''openssl req -in request.csr -subject -noout'' | Secondo richiesta | | 4 | SAN completi | ''openssl req -in request.csr -text \| grep -A1 "Subject Alternative"'' | Tutti gli hostname | # Verifica CSR completa openssl req -in request.csr -text -noout -verify ---- ===== Passo 2: Verificare approvazione ===== | Tipo certificato | Approvazione da | Documentazione | |----------------|-------------------|---------------| | Server (interno) | Automatico / Ticket | Nr. Ticket | | Server (esterno) | IT-Security | E-Mail + Ticket | | Client | Responsabile reparto | Modulo | | Code-Signing | CISO | Scritto | ---- ===== Passo 3: Firmare certificato ===== ==== Modalità classica ==== # Firmare certificato server (1 anno) openssl ca -config openssl.cnf \ -extensions server_cert \ -in request.csr \ -out certificate.pem \ -days 365 \ -notext # Annotare numero di serie openssl x509 -in certificate.pem -serial -noout ==== Modalità ibrida (PQ) ==== // C# con WvdS.System.Security.Cryptography using var intermediate = new X509Certificate2("intermediate.pfx", "password"); var csr = CertificateRequest.LoadSigningRequest( File.ReadAllBytes("request.csr"), HashAlgorithmName.SHA256); var cert = csr.Create( intermediate, DateTimeOffset.UtcNow, DateTimeOffset.UtcNow.AddDays(365), Guid.NewGuid().ToByteArray(), CryptoMode.Hybrid); // Estensione PQ File.WriteAllText("certificate.pem", cert.ExportCertificatePem()); ---- ===== Passo 4: Consegnare ===== | Formato | Utilizzo | Comando | |--------|------------|--------| | PEM | Linux, Apache | ''cp certificate.pem /output/'' | | PFX | Windows, IIS | ''openssl pkcs12 -export -in certificate.pem -inkey private.key -out certificate.pfx'' | | DER | Java | ''openssl x509 -in certificate.pem -outform DER -out certificate.der'' | # Consegnare con catena cat certificate.pem intermediate.pem > fullchain.pem ---- ===== Passo 5: Documentazione ===== **Campi obbligatori nel ticket/log:** | Campo | Esempio | |------|----------| | Numero di serie | ''01:23:45:67:89:AB:CD:EF'' | | Subject | ''CN=server.example.com'' | | Valido fino a | ''2025-12-15'' | | Emesso da | ''Nome-Operatore'' | | Nr. Ticket | ''INC-2024-12345'' | | Modalità | ''Hybrid / Classic'' | ---- ===== Risoluzione problemi ===== | Problema | Causa | Soluzione | |---------|---------|--------| | ''unable to load CSR'' | Formato errato | ''openssl req -inform DER -in request.der -out request.pem'' | | ''signature verify failed'' | CSR manipolato | Richiedere nuovo CSR | | ''wrong issuer'' | CA errata | Verificare certificato CA | | ''certificate request failed'' | Errore configurazione | Verificare ''openssl.cnf'' | ---- ===== Runbook correlati ===== * [[.:zertifikat-erneuern|Rinnovo certificato]] - Per certificati in scadenza * [[.:zertifikat-widerrufen|Revoca certificato]] - In caso di compromissione * [[it:int:pqcrypt:szenarien:kurzreferenz:csr|Riferimento rapido CSR]] - Esempi di codice ---- << [[.:start|Operatività quotidiana]] | [[.:zertifikat-erneuern|Rinnovo certificato]] >> ---- //Wolfgang van der Stille @ EMSR DATA d.o.o. - Post-Quantum Cryptography Professional// {{tag>runbook certificato emissione operator}}