Inhaltsverzeichnis

Scenario 3.3: Emettere certificato code-signing

Categoria: Emettere certificati
Complessità: Media
Prerequisiti: CSR presente, CA Code-Signing
Tempo stimato: 10-15 minuti


Descrizione

Questo scenario descrive l'emissione di un certificato code-signing per la firma di software. Il code-signing consente la verifica dell'origine e dell'integrità di eseguibili, DLL, script e package.

Casi d'uso:


Esempio codice (C#)

using WvdS.Security.Cryptography.X509Certificates.Extensions.PQ;
 
using var ctx = PqCryptoContext.Initialize();
 
var caCert = ctx.LoadCertificate("codesign-ca.crt.pem");
var caKey = ctx.LoadPrivateKey("codesign-ca.key.pem", "CaPassword!");
 
var csr = ctx.LoadCertificateRequest(File.ReadAllText("codesign.csr.pem"));
csr.VerifySignature();
 
// Code-Signing-Zertifikat ausstellen
var codesignCert = ctx.IssueCertificate(
    csr,
    issuerCert: caCert,
    issuerKey: caKey,
    serialNumber: ctx.GenerateSerialNumber(),
    validDays: 730,  // 2 Jahre
    extensions: new ExtBuilder()
        .BasicConstraints(ca: false, critical: true)
        // Key Usage: Nur digitalSignature!
        .KeyUsage(KeyUsageFlags.DigitalSignature, critical: true)
        // Extended Key Usage: Code Signing
        .ExtendedKeyUsage(ExtKeyUsage.CodeSigning)
        .SubjectKeyIdentifier(csr.PublicKey)
        .AuthorityKeyIdentifier(caCert)
        // Timestamping URL für Langzeit-Validierung
        .AuthorityInfoAccess(
            ocspUrl: "http://ocsp.example.com",
            timestampUrl: "http://timestamp.example.com"
        )
        .Build()
);
 
codesignCert.ToPemFile("codesign.crt.pem");

Varianti Extended Key Usage

OID Nome Utilizzo
1.3.6.1.5.5.7.3.3 codeSigning Code Signing standard
1.3.6.1.4.1.311.10.3.13 lifetimeSigning Windows Kernel-Mode
1.2.840.113549.1.9.16.1.4 firmwareSigning Firmware (opzionale)

Requisiti specifici per settore

Settore Requisito Particolarità
Automotive UN R156 Aggiornamenti firmware, Secure Boot
Sanità DiGAV Software dispositivi medici
Industria 4.0 IEC 62443 Firmware PLC
Standard Microsoft Authenticode Windows SmartScreen

Firma Windows Authenticode

# Mit SignTool und PQ-Zertifikat
signtool sign /fd SHA256 /f codesign.pfx /p "Password" /tr http://timestamp.example.com /td SHA256 myapp.exe
 
# Signatur prüfen
signtool verify /pa /v myapp.exe

Server Timestamp

Importante: Code-signing senza timestamp non è valido dopo la scadenza del certificato! Utilizzare sempre un server timestamp.

Server URL Protocollo
DigiCert http://timestamp.digicert.com RFC 3161
Sectigo http://timestamp.sectigo.com RFC 3161
GlobalSign http://timestamp.globalsign.com RFC 3161

Scenari correlati

Relazione Scenario Descrizione
Passo successivo 8.2 Firmare codice Utilizzare certificato
Correlato 8.3 Timestamp Validità a lungo termine
Prerequisito 1.3 Gerarchia CA CA Code-Signing

« ← 3.2 Certificato client | ↑ Panoramica certificati | 3.4 Certificato S/MIME → »


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