====== Scenario 3.3: Emettere certificato code-signing ======
**Categoria:** [[.:start|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:**
* Windows Authenticode (EXE, DLL, MSI)
* Script PowerShell
* File JAR Java
* Package NuGet
* Code Signing macOS
* Firma firmware
----
===== 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** | [[it:int:pqcrypt:szenarien:signaturen:code_signieren|8.2 Firmare codice]] | Utilizzare certificato |
| **Correlato** | [[it:int:pqcrypt:szenarien:signaturen:timestamp|8.3 Timestamp]] | Validità a lungo termine |
| **Prerequisito** | [[it:int:pqcrypt:szenarien:pki:ca_hierarchie_aufbauen|1.3 Gerarchia CA]] | CA Code-Signing |
----
<< [[.:client_cert|← 3.2 Certificato client]] | [[.:start|↑ Panoramica certificati]] | [[.:smime_cert|3.4 Certificato S/MIME →]] >>
{{tag>scenario certificato codesigning authenticode firmware}}
----
//Wolfgang van der Stille @ EMSR DATA d.o.o. - Post-Quantum Cryptography Professional//