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