Podepisovanie kódu (Code Signing) pomocou Azure Key Vault

Code Signing certifikát pre podpis kódu musí byť uložený bezpečne. K tomu môžete jednoducho použiť aj HSM v cloude - službu Azure Key Vault. Náš návod vám pomôže ako so zriadením Azure Key Vaultu a jeho nastavením ale nájdete v ňom aj podpisovací príkaz, ktorý musíte dať dohromady pomocou údajov z Azure. Pomôže vám teda kompletne so všetkým.

Code Signing certifikát musí byť uložený bezpečne

Certifikáty na podpis kódu sa vydávajú výhradne pre bezpečné prostriedky - musia byť na HSM. To môže mať dvojakú podobu - buď tradičné hardvérové, ktoré je ale nákladné na obstaranie, alebo cloudové, ktoré plnia rovnakú úlohu. Azure Key Vault, ktorý dnes hodláme použiť, spĺňa štandard FIPS 140-2 Level 2 a 3, preto je možné ho využiť na uloženie Code Singing certifikátov. Viac informácií o službe nájdete na stránke služby Azure Key Vault.

Zriadenie a nastavenie Azure Key Vault

Ku KeyLockeru samozrejme existuje aj alternatíva. Mnoho zákazníkov používa cloudové služby Azure, ktoré umožňujú bezpečné uloženie kľúčov (HSM). Vďaka Azure Key Vault môžete uložiť svoj Code Signing certifikát do cloudu a nemusíte riešiť nič naviac.

Pre podpisovanie pomocou certifikátu v Azure je potrebné urobiť tieto kroky:

  1. Dostať certifikát do Azure key vault (vytvoriť CSR, potom naimportovať odpoveď)
  2. Vytvoriť aplikáciu, ktorú budete volať na podpisovanie
  3. Pridať aplikáciu do Access policies vášho Key Vaultu
  4. Nainštalovať na váš stroj podporný softvér

Poďme teda postupne prejsť jednotlivé kroky. Tu sú uvedené zjednodušene pre pokročilých užívateľov, ak potrebujete podrobný návod, použite tento návod na GitHub. Časť o zakúpení a overení certifikátu môžete ignorovať, pretože prebieha cez nás.

Získanie Code Signing certifikátu a nastavenia v Azure

Získanie certifikátu pre podpis kódu je jednoduché. Pri SSLmarkete zakúpite Code Signing certifikát s uložením na HSM. Potom v Azure vytvoríte CSR, ktoré nám pošlete. Po vydaní certifikátu vám zašleme podpísaný verejný kľúč (=certifikát) a túto odpoveď naimportujete do Azure.

V Azure Key Vaulte choďte cez ľavé menu do Certificates a kliknite na Create a certificate. Vo všeobecnom formulári zvolíte pomenovanie certifikátu, potom Common name (pozor, zobrazuje sa ako meno podpisujúceho) a ako typ CA zvoľte Certificate issued by non-integrated CA. Ako formát zvoľte PEM.

Vytvorenie CSR v Azure
Vytvorenie CSR v Azure

Musíte ručne konfigurovať Advanced Policy Configuration, takže kliknite na Not configured a nastavte nasledujúce:

  • Extended Key Usages (EKU) na 1.3.6.1.5.5.7.3.3
  • Key Size pre RSA najmenej 3072b, pre EC najmenej P-256
  • Privátny kľúč ako Not expordable, ak sa má jednať o CS EV certifikát
Advanced policy configuration
Advanced policy configuration

V kategórii In progress, failed or cancelled uvidíte nový certifikát. Prejdite do jeho detailu a kliknite na Certificate Operation, čo vyvolá ďalší detail, kde môžete stiahnuť CSR. Na rovnakom mieste sa potom importuje vydaný certifikát cez Merge Signed Request.

Stiahnutie CSR v Certificate Operation
Stiahnutie CSR v Certificate Operation

Stiahnuté CSR použijete pre objednanie certifikátu v SSLmarkete, môžete ho použiť pre OV aj EV Code Signing uložený na HSM.

Vytvorenie aplikácie

Okrem samotného vytvorenia Key Vaultu v Resource Group a uloženia certifikátu je potrebné vytvoriť aplikáciu v Microsoft Entra ID (predtým Azure Active Directory) a jej secret; oboje slúži na autentizáciu a pre prístup k Vaultu.

Choďte do prehľadu Microsoft Entra ID av ľavom menu zvoľte App registrations- Potom zadajte novú registráciu aplikácie, pomenujte ju a zvoľte prístup možnosť Accounts in this organizational directory only (Default Directory only - Single tenant). Po vytvorení aplikácie uvidíte Application ID, ktoré je potrebné na podpisovanie ako “client ID”.

Choďte do detailu aplikácie v ľavom menu do agendy Certificates & secrets. Tu vytvorte nový Client secret a pomenujte ho. Hodnotu Secret (Value) si skopírujte a uložte, pretože ju už neuvidíte.

Nastavenia Access policies

Teraz musíme ísť späť do Key Vaultu.

Prvo prepnite model práv z Azure role-based access (RBAC) na Vault access policy.

Azure Permission model
Azure Permission model

V ľavom menu zvoľte Access Policies a kliknite na Create. Vytvorte Access policy, ktorá sa bude aplikovať na vami vytvorenú aplikáciu. Sú potrebné minimálne tieto oprávnenia:

  • Key permissions - Verify, Sign, Get, List
  • Secret permissions - Get, List
  • Certificate permissions - Get, List

Aplikáciu zvolíte v druhom kroku a nájdete ju podľa názvu.

Azure - Create Acess Policy
Azure - Create Acess Policy

To je všetko, čo musíte nastaviť v rozhraní Azure.

Inštalácia podporného softvéru

Nainštalujte si na svoj počítač nasledujúce:

  • .net SDK 6.0.200, Windows x64; download
  • .net ASP.NET Core Runtime 6.0.2, Windows x64; download
  • Azure SignTool, nainštalujete pomocou cmd: dotnet tool install --global AzureSignTool

Gratulujeme, teraz môžete pomocou Azure SignTool podpisovať kód pomocou certifikátu, ktorý je uložený v Key Vaulte.

Podepisovanie pomocou certifikátu v Azure Key Vault

Teraz, keď je všetko pripravené na podpisovanie, je najdôležitejšie mať všetky údaje, ktoré potrebujeme pre podpisovací príkaz. Ten vyzerá takto: azuresigntool sign -kvt KEY-VAULT-DIRECTORY-ID -kvu KEY-VAULT-URI -kvi APPLICATION-CLIENT-ID -kvc CERTIFICATE-NAME -kvs CLIENT-SECRET -tr http://timestamp.digicert.com - v PATH-TO-EXECUTABLE

Čo je čo:

  • Kvt je directory id vášho Azure Key Vault
  • kvu je URL Azure Key Vaultu. Nájdete ho na hlavnej strane ako DNS Name.
  • kvi je application id Azure app, ktorú ste zaregistrovali.
  • kvc je friendly name certifikátu, ktorý chcete použiť. Toto označenie ste si zvolili sami.
  • kvs je client secret, ktorý ste si vygenerovali pre aplikáciu.
  • tr je URL timestamp servera. Časovú pečiatku určite použite, aby bol podpis dôveryhodný aj po expirácii certifikátu.
  • v určuje umiestnenie súboru, ktorý podpisujete.

Všetky vyššie uvedené údaje nájdete v rozhraní Azure.