====== Szenario 3.3: Code-Signing-Zertifikat ausstellen ====== **Kategorie:** [[.:start|Zertifikate ausstellen]] \\ **Komplexität:** ⭐⭐⭐ (Mittel-Hoch) \\ **Voraussetzungen:** CSR vorhanden, Code-Signing-CA \\ **Geschätzte Zeit:** 10-15 Minuten ---- ===== Beschreibung ===== Dieses Szenario beschreibt die Ausstellung eines **Code-Signing-Zertifikats** für die Signierung von Software. Code-Signing ermöglicht die Verifikation der Herkunft und Integrität von Executables, DLLs, Skripten und Packages. **Anwendungsfälle:** * Windows Authenticode (EXE, DLL, MSI) * PowerShell-Skripte * Java JAR-Dateien * NuGet-Pakete * macOS Code Signing * Firmware-Signierung ---- ===== Code-Beispiel (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"); ---- ===== Extended Key Usage Varianten ===== ^ OID ^ Name ^ Verwendung ^ | 1.3.6.1.5.5.7.3.3 | codeSigning | Standard Code Signing | | 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 (optional) | ---- ===== Branchenspezifische Anforderungen ===== ^ Branche ^ Anforderung ^ Besonderheiten ^ | **Automotive** | UN R156 | Firmware-Updates, Secure Boot | | **Healthcare** | DiGAV | Medizinprodukte-Software | | **Industrie 4.0** | IEC 62443 | SPS-Firmware | | **Standard** | Microsoft Authenticode | Windows SmartScreen | ---- ===== Windows Authenticode Signierung ===== # 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 ---- ===== Timestamp-Server ===== **Wichtig:** Code-Signing ohne Timestamp ist nach Zertifikatsablauf ungültig! Immer einen Timestamp-Server verwenden. ^ Server ^ URL ^ Protokoll ^ | DigiCert | http://timestamp.digicert.com | RFC 3161 | | Sectigo | http://timestamp.sectigo.com | RFC 3161 | | GlobalSign | http://timestamp.globalsign.com | RFC 3161 | ---- ===== Verwandte Szenarien ===== ^ Beziehung ^ Szenario ^ Beschreibung ^ | **Nächster Schritt** | [[de:int:pqcrypt:szenarien:signaturen:code_signieren|8.2 Code signieren]] | Zertifikat verwenden | | **Verwandt** | [[de:int:pqcrypt:szenarien:signaturen:timestamp|8.3 Zeitstempel]] | Langzeit-Gültigkeit | | **Voraussetzung** | [[de:int:pqcrypt:szenarien:pki:ca_hierarchie_aufbauen|1.3 CA-Hierarchie]] | Code-Signing-CA | ---- << [[.:client_cert|← 3.2 Client-Zertifikat]] | [[.:start|↑ Zertifikate-Übersicht]] | [[.:smime_cert|3.4 S/MIME-Zertifikat →]] >> {{tag>szenario zertifikat codesigning authenticode firmware}} ---- //Wolfgang van der Stille @ EMSR DATA d.o.o. - Post-Quantum Cryptography Professional//