====== Scenarij 3.3: Izdajanje Code-Signing certifikata ====== **Kategorija:** [[.:start|Izdajanje certifikatov]] \\ **Kompleksnost:** ⭐⭐⭐ (Srednje-visoka) \\ **Predpogoji:** CSR na voljo, Code-Signing-CA \\ **Predviden čas:** 10-15 minut ---- ===== Opis ===== Ta scenarij opisuje izdajanje **Code-Signing certifikata** za podpisovanje programske opreme. Code-Signing omogoča preverjanje izvora in celovitosti izvršljivih datotek, DLL-ov, skript in paketov. **Primeri uporabe:** * Windows Authenticode (EXE, DLL, MSI) * PowerShell skripte * Java JAR datoteke * NuGet paketi * macOS Code Signing * Podpisovanje firmware ---- ===== Primer kode (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(); // Izdajanje Code-Signing certifikata var codesignCert = ctx.IssueCertificate( csr, issuerCert: caCert, issuerKey: caKey, serialNumber: ctx.GenerateSerialNumber(), validDays: 730, // 2 leti extensions: new ExtBuilder() .BasicConstraints(ca: false, critical: true) // Key Usage: Samo digitalSignature! .KeyUsage(KeyUsageFlags.DigitalSignature, critical: true) // Extended Key Usage: Code Signing .ExtendedKeyUsage(ExtKeyUsage.CodeSigning) .SubjectKeyIdentifier(csr.PublicKey) .AuthorityKeyIdentifier(caCert) // URL za časovni žig za dolgoročno validacijo .AuthorityInfoAccess( ocspUrl: "http://ocsp.example.com", timestampUrl: "http://timestamp.example.com" ) .Build() ); codesignCert.ToPemFile("codesign.crt.pem"); ---- ===== Variante Extended Key Usage ===== ^ OID ^ Ime ^ Uporaba ^ | 1.3.6.1.5.5.7.3.3 | codeSigning | Standardno 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 (opcijsko) | ---- ===== Panožno specifične zahteve ===== ^ Panoga ^ Zahteva ^ Posebnosti ^ | **Avtomobilizem** | UN R156 | Posodobitve firmware, Secure Boot | | **Zdravstvo** | DiGAV | Programska oprema medicinskih naprav | | **Industrija 4.0** | IEC 62443 | PLC firmware | | **Standard** | Microsoft Authenticode | Windows SmartScreen | ---- ===== Windows Authenticode podpisovanje ===== # S SignTool in PQ certifikatom signtool sign /fd SHA256 /f codesign.pfx /p "Password" /tr http://timestamp.example.com /td SHA256 myapp.exe # Preverjanje podpisa signtool verify /pa /v myapp.exe ---- ===== Strežniki za časovni žig ===== **Pomembno:** Code-Signing brez časovnega žiga je po poteku certifikata neveljaven! Vedno uporabite strežnik za časovni žig. ^ Strežnik ^ URL ^ Protokol ^ | DigiCert | http://timestamp.digicert.com | RFC 3161 | | Sectigo | http://timestamp.sectigo.com | RFC 3161 | | GlobalSign | http://timestamp.globalsign.com | RFC 3161 | ---- ===== Povezani scenariji ===== ^ Povezava ^ Scenarij ^ Opis ^ | **Naslednji korak** | [[sl:int:pqcrypt:szenarien:signaturen:code_signieren|8.2 Podpisovanje kode]] | Uporaba certifikata | | **Povezano** | [[sl:int:pqcrypt:szenarien:signaturen:timestamp|8.3 Časovni žig]] | Dolgoročna veljavnost | | **Predpogoj** | [[sl:int:pqcrypt:szenarien:pki:ca_hierarchie_aufbauen|1.3 Hierarhija CA]] | Code-Signing-CA | ---- << [[.:client_cert|← 3.2 Odjemalski certifikat]] | [[.:start|↑ Pregled certifikatov]] | [[.:smime_cert|3.4 S/MIME certifikat →]] >> {{tag>scenarij certifikat codesigning authenticode firmware}} ---- //Wolfgang van der Stille @ EMSR DATA d.o.o. - Post-Quantum Cryptography Professional//