Apposizione di firma al codice (Code Signing) con Azure Key Vault

Il certificato Code Signing di firma del codice deve essere conservato in modo protetto. A tale scopo puoi utilizzare facilmente il servizio HSM nel cloud: Azure Key Vault. Le nostre istruzioni ti aiuteranno ad acquisire e a impostare Azure Key Vault ma vi troverai anche il comando di firma che dovrai approntare utilizzando i dati di Azure. In altre parole, la nostra guida ti aiuterà a gestire tutto.

Il certificato Code Signing deve essere conservato in modo sicuro

I certificati di firma del codice vengono emessi per essere conservati esclusivamente su mezzi sicuri: devono quindi essere conservati nell'HSM. La conservazione protetta può assumere due forme: quella di un hardware tradizionale la cui acquisizione è però costosa, o quella basata su cloud che svolge lo stesso compito. Azure Key Vault che utilizzeremo oggi, è conforme allo standard di sicurezza FIPS 140-2 di livelli 2 e 3, e può perciò essere utilizzato per archiviare i certificati Code Signing. Per ulteriori informazioni su questo servizio visita la pagina del servizio Azure Key Vault.

Acquisizione e impostazione di Azure Key Vault

Naturalmente, vi è anche un'alternativa a KeyLocker. Molti clienti utilizzano, infatti, i servizi cloud di Azure che consentono di archiviare le chiavi (HSM) in modo sicuro. Con Azure Key Vault puoi memorizzare il tuo certificato Code Signing nel cloud e non devi occuparti di altro.

Per poter apporre le firme utilizzando il certificato conservato in Azure, è necessario eseguire le seguenti operazioni:

  1. Inserire il certificato in Azure Key Vault (creare un CSR, quindi importare la risposta)
  2. Creare l'applicazione da usare per l’apposizione di firme
  3. Aggiungere l'applicazione a Access policies del tuo Key Vault
  4. Installare sul tuo computer il software di supporto

Esaminiamo ora i suddetti passaggi uno dopo l’altro. In questa sede i passaggi vengono descritti in modo semplificato, dedicato agli utenti avanzati. Se hai invece bisogno di istruzioni dettagliate, consulta la guida su GitHub. Puoi saltare la parte relativa all'acquisto e alla convalida del certificato, in quanto siamo noi a eseguire queste operazioni.

Acquisizione del certificato Code Signing e la sua impostazione in Azure

Acquisire il certificato di firma del codice è facile. Con l’SSLmarket acquisterai il certificato Code Signing con l’archiviazione sull'HSM. Successivamente, in Azure creerai un CSR che ci invierai. Una volta emesso il certificato, ti invieremo la chiave pubblica firmata (= il certificato) e tu importerai questa risposta in Azure.

In Azure Key Vault, dal menu di sinistra vai su Certificates e fai clic su Create a certificate. Nel modulo generale scegli la denominazione del certificato, quindi Common name (attenzione: viene visualizzato come nome del firmatario), e seleziona Certificate issued by non-integrated CA per indicare il tipo di CA. Per indicare il formato, seleziona PEM.

Come creare un CSR in Azure
Come creare un CSR in Azure

Advanced Policy Configurationdeve essere configurata manualmente, quindi fai clic su Not configured e imposta quanto segue:

  • il valore 1.3.6.1.5.5.7.3.3 per Extended Key Usages (EKU).
  • il valore di Key Size per RSA pari almeno a 3072b, mentre per EC pari almeno a P-256.
  • Il valore Not expordable per la chiave privata, se si tratta di certificato CS EV.
Advanced policy configuration
Advanced policy configuration

Vedrai il nuovo certificato nella categoria In progress, failed or cancelled: vai al suo dettaglio e fai clic su Certificate Operation, questo farà apparire un altro dettaglio che ti consentirà di scaricare il CSR. Il certificato emesso viene poi importato nello stesso luogo tramite Merge Signed Request.

Scaricamento del CSR in Certificate Operation
Scaricamento del CSR in Certificate Operation

Il CSR ti servirà per ordinare un certificato presso l’SSLmarket, inoltre può essere utilizzato anche per certificati Code Signing OV e EV memorizzati nell'HSM.

Come creare l’applicazione

Oltre a creare lo stesso Key Vault in Resource Group e memorizzare il certificato, è necessario creare l'applicazione in Microsoft Entra ID (già Azure Active Directory) e il suo segreto (secret): entrambe le cose servono per l'autenticazione e l'accesso al Vault.

Vai alla panoramica di Microsoft Entra ID e nel menu di sinistra seleziona App registrations. Quindi inserisci la registrazione di una nuova applicazione, assegnale un nome e seleziona l'opzione di accesso Accounts in this organizational directory only (Default Directory only - Single tenant). Creata l'applicazione, verrà visualizzato l'Application ID necessario per poter apporre le firme in qualità di "ID client".

Nel menu di sinistra vai al dettaglio dell'applicazione, alla voce Certificates & secrets. Qui crea un nuovo Client secret e assegnagli un nome. Copia e salva il valore di Secret (Value) perché non verrà più visualizzato..

Come impostare Access policies

Ora devi rientrare in Key Vault.

Innanzitutto, cambia il modello dei diritti Azure role-based access (RBAC) a Vault access policy.

Modello di Azure Permission
Modello di Azure Permission

Nel menu di sinistra, seleziona Access Policies e fai clic su Create. Crea Access policy che verrà applicata all'applicazione creata da te. Servono almeno le seguenti autorizzazioni:

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

Nel secondo passaggio selezionerai l'applicazione: la individuerai secondo il suo nome.

Azure - Create Acess Policy
Azure - Create Acess Policy

Questo è tutto quello che devi impostare nell'interfaccia di Azure.

Installazione del software di supporto

Installa sul tuo computer quanto segue:

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

Congratulazioni, ora puoi utilizzare Azure SignTool per firmare il codice con il certificato memorizzato in Key Vault.

Apposizione di firme con il certificato in Azure Key Vault

Ora che tutto è pronto per l’apposizione di firme, la cosa più importante è disporre di tutti i dati necessari per il comando di firma che ha il seguente aspetto: 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

Legenda:

  • Kvt è directory id del tuo Azure Key Vault.
  • Kvu è l’URL di Azure Key Vault. Lo troverai nella pagina principale sotto DNS Name.
  • Kvi è application id dell’applicazione Azure che hai registrato.
  • Kvc è friendly name del certificato che desideri utilizzare. Sei stato tu stesso a dargli questo nome.
  • kvs è client secret che hai generato per l'applicazione.
  • tr è l'URL della marca temporale (timestamp) del server. Assicurati di utilizzare la marca temporale affinché la firma sia attendibile anche dopo la scadenza del certificato.
  • v specifica la posizione del file da firmare.

Troverai tutti i dati di cui sopra, nell'interfaccia di Azure.