Inhaltsverzeichnis

Scenario 3.1: Emettere certificato server

Categoria: 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:


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 2.1 CSR Server Creare CSR
Prerequisito 1.2 Intermediate-CA CA firmataria
Passo successivo 10.1 Configurare server TLS Deploy certificato
Correlato 3.2 Certificato client Per mTLS

« ← Panoramica certificati | ↑ Scenari | 3.2 Certificato client → »


Wolfgang van der Stille @ EMSR DATA d.o.o. - Post-Quantum Cryptography Professional