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:
- Dostat certifikát do Azure key vault (vytvořit CSR, pak naimportovat odpověď)
- Vytvořit aplikaci, kterou budete volat pro podepisování
- Přidat aplikaci do Access policies vašeho Key Vaultu
- 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.
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
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 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.
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.
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.