====== 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}}