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