Podepisování kódu (Code Signing) pomocí Azure Key Vault

Code Signing certifikát pro podpis kódu musí být uložen bezpečně. K tomu můžete snadno použít i HSM v cloudu - službu Azure Key Vault. Náš návod vám pomůže jak se zřízením Azure Key Vaultu a jeho nastavením ale najdete v něm také podepisovací příkaz, který musíte dát dohromady pomocí údajů z Azure. Pomůže vám tedy kompletně se vším.

Code Signing certifikát musí být uložen bezpečně

Certifikáty pro podpis kódu se vydávají výhradně pro bezpečné prostředky - musí být na HSM. To může mít dvojí podobu - buď tradiční hardwarové, které je ale nákladné na pořízení, nebo cloudové, které plní stejnou úlohu. Azure Key Vault, který dnes hodláme použít, splňuje standard FIPS 140-2 Level 2 a 3, tudíž je možné ho využít pro uložení Code Singing certifikátů. Více informací o službě najdete na stránce služby Azure Key Vault.

Zřízení a nastavení Azure Key Vault

Ke KeyLockeru samozřejmě existuje i alternativa. Mnoho zákazníků používá cloudové služby Azure, které umožňují bezpečné uložení klíčů (HSM). Díky Azure Key Vault můžete uložit svůj Code Signing certifikát do cloudu a nemusíte řešit nic navíc.

Pro podepisování pomocí certifikát v Azure je potřeba udělat tyto kroky:

  1. Dostat certifikát do Azure key vault (vytvořit CSR, pak naimportovat odpověď)
  2. Vytvořit aplikaci, kterou budete volat pro podepisování
  3. Přidat aplikaci do Access policies vašeho Key Vaultu
  4. Nainstalovat na váš stroj podpůrný software

Pojďme tedy postupně projít jednotlivé kroky. Zde jsou uvedeny zjednodušeně pro pokročilé uživatele, pokud potřebujete podrobný návod, použijte tento návod na GitHub. Část o zakoupení a ověření certifikátu můžete ignorovat, protože probíhá přes nás.

Získání Code Signing certifikátu a nastavení v Azure

Získání certifikátu pro podpis kódu je jednoduché. U SSLmarketu zakoupíte Code Signing certifikát s uložením na HSM. Pak v Azure vytvoříte CSR, které nám pošlete. Po vydání certifikátu vám zašleme podepsaný veřejný klíč (=certifikát) a tuto odpověď naimportujete do Azure.

V Azure Key Vaultu jděte přes levé menu do Certificates a klikněte na Create a certificate. V obecném formuláři zvolíte pojmenování certifikátu, pak Common name (pozor, zobrazuje se jako jméno podepisujícího) a jako typ CA zvolte Certificate issued by non-integrated CA. Jako formát zvolte PEM.

Vytvoření CSR v Azure
Vytvoření CSR v Azure

Je nutné ručně konfigurovat Advanced Policy Configuration, takže klikněte na Not configured a nastavte následující:

  • Extended Key Usages (EKU) na 1.3.6.1.5.5.7.3.3
  • Key Size pro RSA nejméně 3072b, pro EC nejméně P-256
  • Privátní klíč jako Not expordable, pokud se má jednat o CS EV certifikát
Advanced policy configuration
Advanced policy configuration

V kategorii In progress, failed or cancelled uvidíte nový certifikát, běžte do jeho detailu a klikněte na Certificate Operation, což vyvolá další detail, kde můžete stáhnout CSR. Na stejném místě se pak importuje vydaný certifikát přes Merge Signed Request.

Stažení CSR v Certificate Operation
Stažení CSR v Certificate Operation

Stažené CSR použijete pro objednání certifikátu u SSLmarketu, můžete ho použít pro OV i EV Code Signing uložený na HSM.

Vytvoření aplikace

Kromě samotného vytvoření Key Vaultu v Resource Group a uložení certifikátu je potřeba vytvořit aplikaci v Microsoft Entra ID (dříve Azure Active Directory) a její secret; obojí slouží k autentizaci a pro přístup k Vaultu.

Běžte do přehledu Microsoft Entra ID a v levém menu zvolte App registrations- Pak zadejte novou registraci aplikace, pojmenujte ji a zvolte přístup možnost Accounts in this organizational directory only (Default Directory only - Single tenant). Po vytvoření aplikace uvidíte Application ID, které je potřeba pro podepisování jako “client ID”.

Běžte do detailu aplikace v levém menu do agendy Certificates & secrets. Zde vytvořte nový Client secret a pojmenujte ho. Hodnotu Secret (Value) si zkopírujte a uložte, protože ji už neuvidíte.

Nastavení Access policies

Nyní musíme jít zpět do Key Vaultu.

Prvně přepněte model práv z Azure role-based access (RBAC) na Vault access policy.

Azure Permission model
Azure Permission model

V levém menu zvolte Access Policies a klikněte na Create. Vytvořte Access policy, která se bude aplikovat na vámi vytvořenou aplikaci. Jsou potřeba minimálně tyto oprávnění:

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

Aplikaci zvolíte v druhém kroku a najdete ji podle názvu.

Azure - Create Acess Policy
Azure - Create Acess Policy

To je vše, co musíte nastavit v rozhraní Azure.

Instalace podpůrného software

Nainstalujte si na svůj počítač následující:

  • .net SDK 6.0.200, Windows x64; download
  • .net ASP.NET Core Runtime 6.0.2, Windows x64; download
  • Azure SignTool, nainstalujete pomocí cmd: dotnet tool install --global AzureSignTool

Gratulujeme, nyní můžete pomocí Azure SignTool podepisovat kód pomocí certifikátu, který je uložen v Key Vaultu.

Podepisování pomocí certifikátu v Azure Key Vault

Nyní, když je všechno připraveno k podepisování, je nejdůležitější mít všechny údaje, které potřebujeme pro podepisovací příkaz. Ten vypadá 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

Co je co:

  • Kvt je directory id vašeho Azure Key Vault
  • kvu je URL Azure Key Vaultu. Najdete ho na hlavní straně jako DNS Name.
  • kvi je application id Azure app, kterou jste registrovali.
  • kvc je friendly name certifikátu, který chcete použít. Toto označení jste si zvolili sami.
  • kvs je client secret, který jste si vygenerovali pro aplikaci.
  • tr je URL timestamp serveru. Časové razítko určitě použijte, aby byl podpis důvěryhodný i po expiraci certifikátu.
  • v určuje umístění souboru, který podepisujete.

Všechny výše uvedené údaje najdete v rozhraní Azure.