====== Scenario 3.1: Emettere certificato server ======
**Categoria:** [[.:start|Emettere certificati]] \\
**Complessità:** Media \\
**Prerequisiti:** CSR presente, Intermediate-CA \\
**Tempo stimato:** 10-15 minuti
----
===== Descrizione =====
Questo scenario descrive l'emissione di un **certificato server TLS** da parte di una Intermediate-CA. Il certificato consente la crittografia HTTPS per server web, API e altri servizi protetti con TLS.
**Cosa viene creato:**
* Certificato server X.509 v3
* Firmato con ML-DSA-65 (Post-Quantum)
* Extension per server TLS
----
===== Workflow =====
flowchart LR
CSR[Caricare CSR] --> VERIFY[Verificare CSR]
VERIFY --> EXT[Impostare extension]
EXT --> SERIAL[Generare serial]
SERIAL --> SIGN[Firmare con CA]
SIGN --> EXPORT[Esportare come PEM]
style SIGN fill:#e8f5e9
----
===== Esempio codice (C#) =====
using WvdS.Security.Cryptography.X509Certificates.Extensions.PQ;
using var ctx = PqCryptoContext.Initialize();
// Intermediate-CA laden
var caCert = ctx.LoadCertificate("intermediate-ca.crt.pem");
var caKey = ctx.LoadPrivateKey("intermediate-ca.key.pem", "CaPassword!");
// CSR laden und verifizieren
var csr = ctx.LoadCertificateRequest(File.ReadAllText("server.csr.pem"));
if (!csr.VerifySignature())
throw new CryptographicException("Ungültige CSR-Signatur");
// Server-Zertifikat ausstellen
var serverCert = ctx.IssueCertificate(
csr,
issuerCert: caCert,
issuerKey: caKey,
serialNumber: ctx.GenerateSerialNumber(),
validDays: 365, // 1 Jahr
extensions: new ExtBuilder()
// Basic Constraints: Kein CA
.BasicConstraints(ca: false, critical: true)
// Key Usage für TLS
.KeyUsage(KeyUsageFlags.DigitalSignature | KeyUsageFlags.KeyEncipherment, critical: true)
// Extended Key Usage: Server Auth
.ExtendedKeyUsage(ExtKeyUsage.ServerAuth)
// Subject Key Identifier
.SubjectKeyIdentifier(csr.PublicKey)
// Authority Key Identifier
.AuthorityKeyIdentifier(caCert)
// CRL Distribution Point
.CrlDistributionPoint("http://crl.example.com/intermediate.crl")
// OCSP Responder
.AuthorityInfoAccess(
ocspUrl: "http://ocsp.example.com",
caIssuersUrl: "http://ca.example.com/intermediate.crt"
)
.Build()
);
// Speichern
serverCert.ToPemFile("server.crt.pem");
// Zertifikatskette erstellen
var chain = $"{serverCert.ToPem()}\n{caCert.ToPem()}";
File.WriteAllText("server-chain.pem", chain);
Console.WriteLine("Server-Zertifikat ausgestellt:");
Console.WriteLine($" Subject: {serverCert.Subject}");
Console.WriteLine($" Issuer: {serverCert.Issuer}");
Console.WriteLine($" Serial: {serverCert.SerialNumber}");
Console.WriteLine($" Gültig bis: {serverCert.NotAfter:yyyy-MM-dd}");
----
===== Extension per certificati server =====
^ Extension ^ Valore ^ Critical ^ Descrizione ^
| Basic Constraints | CA=false | Si | Non è un certificato CA |
| Key Usage | digitalSignature, keyEncipherment | Si | Handshake TLS |
| Extended Key Usage | serverAuth | No | Autenticazione server |
| Subject Key Identifier | Hash(PublicKey) | No | ID chiave |
| Authority Key Identifier | CA-SKI | No | Riferimento issuer |
| Subject Alt Name | Nomi DNS | No | Ripreso dal CSR |
| CRL Distribution Points | URL | No | Verifica revoca |
| Authority Info Access | OCSP, CA Issuers | No | Aiuti validazione |
----
===== Validità specifiche per settore =====
^ Settore ^ Validità ^ Motivazione ^
| **IT standard** | 1 anno (365 giorni) | Massimo CA/Browser Forum |
| **Energia/SCADA** | 3-5 anni | Cicli di manutenzione lunghi |
| **Sanità** | 1-2 anni | Requisiti compliance |
| **Automotive** | 2-3 anni | Ciclo vita veicolo |
**Raccomandazione:** Per siti web pubblici max. 398 giorni (CA/B Forum). Per servizi interni possono essere sensate validità più lunghe.
----
===== File di output =====
==== server.crt.pem ====
-----BEGIN CERTIFICATE-----
MIIHxjCCBiagAwIBAgIUP7J2kM9x...
-----END CERTIFICATE-----
==== server-chain.pem ====
-----BEGIN CERTIFICATE-----
(Certificato server)
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
(Intermediate-CA)
-----END CERTIFICATE-----
----
===== Configurazione Nginx =====
server {
listen 443 ssl;
server_name www.example.com;
ssl_certificate /etc/nginx/ssl/server-chain.pem;
ssl_certificate_key /etc/nginx/ssl/server.key.pem;
ssl_protocols TLSv1.3;
ssl_prefer_server_ciphers on;
}
----
===== Scenari correlati =====
^ Relazione ^ Scenario ^ Descrizione ^
| **Prerequisito** | [[it:int:pqcrypt:szenarien:csr:csr_server|2.1 CSR Server]] | Creare CSR |
| **Prerequisito** | [[it:int:pqcrypt:szenarien:pki:intermediate_ca_erstellen|1.2 Intermediate-CA]] | CA firmataria |
| **Passo successivo** | [[it:int:pqcrypt:szenarien:tls:server_setup|10.1 Configurare server TLS]] | Deploy certificato |
| **Correlato** | [[.:client_cert|3.2 Certificato client]] | Per mTLS |
----
<< [[.:start|← Panoramica certificati]] | [[it:int:pqcrypt:szenarien:start|↑ Scenari]] | [[.:client_cert|3.2 Certificato client →]] >>
{{tag>scenario certificato server tls https x509}}
----
//Wolfgang van der Stille @ EMSR DATA d.o.o. - Post-Quantum Cryptography Professional//