Condividi tramite


Libreria di offload TLS del modulo di protezione hardware gestito di Azure

Il modulo di protezione hardware gestito di Azure offre una libreria TLS Offload, conforme a PKCS#11 versione 2.40. Il modulo di protezione hardware gestito di Azure non supporta tutte le funzioni elencate nella specifica PKCS#11; la libreria TLS Offload supporta invece un set limitato di meccanismi e funzioni di interfaccia per l'offload SSL/TLS solo con F5 (BigIP) e Nginx, principalmente per generare chiavi di certificato server TLS e generare firme digitali durante gli handshake TLS.

Per altre informazioni, vedere GitHub della libreria TLS Offload gestita del modulo di protezione hardware di Azure.

La libreria TLS Offload usa internamente l'API REST di Azure Key Vault per interagire con il modulo di protezione hardware gestito di Azure.

Operazioni preliminari

Attributi PKCS#11

Per integrarsi correttamente con PKCS#11, la generazione di chiavi (tramite C_GenerateKeyPair) e l'individuazione di oggetti chiave (tramite C_FindObjectsInit/C_FindObjects) richiede una soluzione per l'archiviazione degli attributi PKCS#11 nell'oggetto chiave di Azure Key Vault. La libreria TLS Offload converte questi attributi PKCS#11 necessari in tag di Azure Key Vault.

Questi "Tag attributo" hanno un prefisso speciale:

  • p11_pri_{P11 Attribute Name} - Attributi chiave privata
  • p11_pub_{P11 Attribute Name} - Attributi chiave pubblica

La libreria TLS Offload imposta correttamente gli attributi operazioni chiave e durata delle chiavi di Azure Key Vault in modo che il servizio possa applicare correttamente queste restrizioni alle chiavi generate. Questi attributi vengono archiviati anche come tag come altri attributi PKCS#11 per supportare le funzionalità di query.

Le applicazioni che usano la libreria TLS Offload usano uno o più attributi PKCS#11 per individuare e usare gli oggetti chiave.

Avviso

Le chiavi generate dalla libreria TLS Offload e i relativi tag sono accessibili tramite l'API REST di Azure Key Vault. La modifica di questi tag di attributo P11 tramite l'API REST di Azure Key Vault può interrompere le applicazioni della libreria TLS Offload.

Generazione della chiave

La libreria TLS Offload include uno strumento di creazione delle chiavi, mhsm_p11_create_key. L'esecuzione dello strumento senza argomenti della riga di comando mostra l'utilizzo corretto dello strumento.

Lo strumento di creazione della chiave richiede un'entità servizio, assegnata al ruolo "Managed HSM Crypto User" nell'ambito "/keys".

Lo strumento di creazione della chiave legge le credenziali dell'entità servizio dalle variabili di ambiente MHSM_CLIENT_ID e MHSM_CLIENT_SECRET:

  • – MHSM_CLIENT_ID deve essere impostato sull'ID applicazione (client) dell'entità servizio
  • – MHSM_CLIENT_ID deve essere impostato sull'ID applicazione (segreto client) dell'entità servizio

Per le identità gestite, le variabili di ambiente precedenti non sono necessarie.

  • Usare l'argomento --identity per abilitare l'identità gestita con lo strumento di mhsm_p11_create_key.
  • Il client_id dell'identità gestita assegnata dall'utente deve essere citato nel file di configurazione MHSM (mhsm-pkcs11.conf). Se la client_id di un'identità gestita assegnata dall'utente non viene fornita, verrà considerata come identità gestita assegnata dal sistema.

Lo strumento di creazione della chiave genera in modo casuale un nome per la chiave al momento della creazione. L'ID chiave completo di Azure Key Vault e il nome della chiave vengono stampati nella console per comodità.

MHSM_CLIENT_ID="<service-principal-application-id>" \
MHSM_CLIENT_SECRET="<service-principal-password>" \
mhsm_p11_create_key --RSA 4K --label tlsKey

Key is generated successfully. \
Managed HSM Key ID: https://myhsm.managedhsm.azure.net/keys/p11-6a2155dc40c94367a0f97ab452dc216f/92f8aa2f1e2f4dc1be334c09a2639908 \
Key Name: p11-6a2155dc40c94367a0f97ab452dc216f

L'argomento --label allo strumento di creazione della chiave specifica il CKA_LABEL desiderato per le chiavi private e pubbliche generate. Questi attributi sono in genere necessari per configurare soluzioni TLS Offload supportate (ad esempio, l'impostazione di configurazione SSL nginx 'ssl_certificate_key').

È necessario il nome della chiave per qualsiasi assegnazione di ruolo modificato tramite l'interfaccia della riga di comando di Azure.

Controllo di accesso

La libreria TLS Offload converte C_FindObjectsInit in una chiamata API REST di Azure Key Vault, che opera nell'ambito /keys. Il servizio MHSM richiede l'autorizzazione di lettura in questo ambito per l'utente della libreria TLS Offload per autorizzare l'operazione di ricerca per le chiavi create tramite lo strumento di creazione della chiave.

Per altre informazioni sul controllo degli accessi in base al ruolo locale del modulo di protezione hardware gestito di Azure, vedere:

La sezione seguente descrive diversi approcci per implementare il controllo di accesso per l'entità servizio della libreria TLS Offload e l'identità gestita.

Entità servizio TLS Offload

L'entità servizio TLS Offload viene usata dall'applicazione che usa la libreria TLS Offload per accedere alle chiavi e deve disporre almeno dell'autorizzazione seguente tramite le assegnazioni di ruolo:

  • Autorizzazione KeyRead per tutte le chiavi nel modulo di protezione hardware gestito
  • Autorizzazione KeySign per le chiavi necessarie per l'offload TLS

Utente amministratore

L'utente amministratore creerà una definizione di ruolo personalizzata e assegnazioni di ruolo. Di conseguenza, l'utente amministratore deve essere assegnato a uno dei ruoli predefiniti seguenti nell'ambito "/":

  • Managed HSM Crypto Officer
  • Managed HSM Policy Administrator
  • Managed HSM Administrator

Entità servizio di generazione delle chiavi

L'entità servizio di generazione delle chiavi viene usata con lo strumento di creazione della chiave (mhsm_p11_create_key) per generare chiavi di offload TLS. Questa entità servizio deve essere assegnata al ruolo "Managed HSM Crypto User" nell'ambito "/keys".

Interfaccia della riga di comando di Azure

L'interfaccia della riga di comando di Azure può essere usata per eseguire attività come l'assegnazione di ruolo.

Approccio permissivo

L'approccio permissivo è più semplice e adatto quando il modulo di protezione hardware gestito di Azure viene usato esclusivamente per l'offload TLS.

Assegnare il ruolo Crypto User all'entità servizio TLS Offload nell'ambito "/keys". In questo modo l'entità servizio TLS Offload ha l'autorizzazione per generare le chiavi e trovarle per l'offload TLS.

az keyvault role assignment create --hsm-name ContosoMHSM \
--role "Managed HSM Crypto User"  \
--assignee TLSOffloadServicePrincipal@contoso.com  \
--scope /keys

Per Identità gestite, specificare gli argomenti di comando come indicato di seguito:

az keyvault role assignment create --hsm-name ContosoMHSM \
      --role "Managed HSM Crypto User"  \
       --assignee-object-id <object_id>  \
       --assignee-principal-type MSI \
       --scope /keys

Approccio granulare

L'approccio granulare implementa un controllo di accesso granulare. Richiede due entità servizio (entità servizio TLS Offload e entità servizio di generazione delle chiavi) e un utente amministratore.

L'obiettivo è limitare le autorizzazioni dell'entità servizio TLS Offload per supportare il minimo necessario per l'offload TLS. L'utente deve disporre dell'autorizzazione Lettura per altre chiavi per supportare la funzione C_FindObject* della libreria.

Ruolo Lettura utente libreria TLS Offload

Il primo passaggio per implementare l'approccio granulare consiste nel creare un ruolo personalizzato. Questa operazione deve essere eseguita una sola volta.

L'utente amministratore (con ruolo amministratore del modulo di protezione hardware gestito o amministratore del modulo di protezione hardware gestito o amministratore dei criteri del modulo di protezione hardware gestito) crea una definizione di ruolo personalizzata "TLS Library User Read Role":

az keyvault role definition create --hsm-name ContosoMHSM --role-definition '{ \
"roleName": "TLS Library User Read Role", \
"description": "Grant Read access to keys", \
"actions": [], \
"notActions": [], \
"dataActions": ["Microsoft.KeyVault/managedHsm/keys/read/action"], \
"notDataActions": [] \
}'

Generare le chiavi

Le chiavi possono essere generate usando l'entità servizio di generazione delle chiavi con lo strumento di creazione della chiave (mhsm_p11_create_key).

Concedere un'autorizzazione

L'utente amministratore assegna i ruoli seguenti all'entità servizio TLS Offload.

  • Assegnare il ruolo "TLS Library User Read Role" nell'ambito "/keys"
  • Assegnare il ruolo "Managed HSM Crypto User" nell'ambito "/keys/{nome chiave}"

Nell'esempio seguente il nome della chiave è "p11-6a2155dc40c94367a0f97ab452dc216f".

az keyvault role assignment create --hsm-name ContosoMHSM  \
--role "TLS Library User Read Role"  \
--assignee TLSOffloadServicePrincipal@contoso.com  \
--scope /keys

az keyvault role assignment create --hsm-name ContosoMHSM  \
--role "Managed HSM Crypto User"  \
--assignee TLSOffloadServicePrincipal@contoso.com  \
--scope /keys/p11-6a2155dc40c94367a0f97ab452dc216f

Memorizzazione nella cache delle connessioni

Per migliorare le prestazioni delle chiamate di accesso al servizio HSM gestito, la libreria TLS Offload memorizza nella cache le connessioni TLS ai server del servizio del modulo di protezione hardware gestiti. Per impostazione predefinita, la libreria TLS Offload memorizza nella cache fino a 20 connessioni TLS. La memorizzazione nella cache delle connessioni può essere controllata tramite il file di configurazione MHSM (mhsm-pkcs11.conf).

"ConnectionCache": {
        "Disable": false, 
        "MaxConnections": 20
}

Disabilita

Se questo valore è true, la memorizzazione nella cache della connessione verrà disabilitata. È abilitata per impostazione predefinita.

MaxConnections

Specifica il numero massimo di connessioni da memorizzare nella cache. Il limite massimo di connessione deve essere configurato in base al numero di sessioni PKCS11 simultanee usate dall'applicazione. Le applicazioni in genere creano un pool di sessioni PKCS11 e le usano da un pool di thread per generare richieste di firma in parallelo. MaxConnections deve corrispondere al numero di richieste di firma simultanee generate dalle applicazioni.

La richiesta di firma al secondo (RPS) dipende dal numero di richieste simultanee e dal numero di connessioni memorizzate nella cache. Se il numero di richieste di firma PKCS11 simultanee è inferiore a questo limite, la specifica di un numero maggiore o anche il limite predefinito non migliorerà il valore RPS di firma. Il numero massimo di connessioni simultanee per ottenere la modalità burst del pool HSM B1 Standard è di circa 30 a seconda del tipo di istanza. Tuttavia, è consigliabile provare con numeri diversi per determinare il numero ottimale di connessioni simultanee.

Per altre informazioni su come l'applicazione usa la libreria PKCS11, vedere la documentazione dell'applicazione o contattare il fornitore dell'applicazione.

Uso della libreria TLS Offload

Generare le chiavi

La libreria TLS Offload include uno strumento di creazione delle chiavi, mhsm_p11_create_key. L'esecuzione dello strumento senza argomenti della riga di comando mostra l'utilizzo corretto dello strumento.

Lo strumento di creazione della chiave richiede un'entità servizio, assegnata al ruolo "Managed HSM Crypto User" nell'ambito "/keys".

Lo strumento di creazione della chiave legge le credenziali dell'entità servizio dalle variabili di ambiente MHSM_CLIENT_ID e MHSM_CLIENT_SECRET.

  • – MHSM_CLIENT_ID deve essere impostato sull'ID applicazione (client) dell'entità servizio
  • – MHSM_CLIENT_ID deve essere impostato sull'ID applicazione (segreto client) dell'entità servizio

Lo strumento di creazione della chiave genera in modo casuale un nome per la chiave al momento della creazione. L'ID chiave completo di Azure Key Vault e il nome della chiave vengono stampati nella console per comodità.

MHSM_CLIENT_ID="<service-principal-application-id>" \
MHSM_CLIENT_SECRET="<service-principal-password>" \
mhsm_p11_create_key --RSA 4K --label tlsKey

Key is generated successfully.
Managed HSM Key ID: https://myhsm.managedhsm.azure.net/keys/p11-6a2155dc40c94367a0f97ab452dc216f/92f8aa2f1e2f4dc1be334c09a2639908 \
Key Name: p11-6a2155dc40c94367a0f97ab452dc216f

L'argomento --label allo strumento di creazione della chiave specifica il CKA_LABEL desiderato per le chiavi private e pubbliche generate. Questi attributi sono in genere necessari per configurare soluzioni TLS Offload supportate (ad esempio, l'impostazione di configurazione SSL nginx 'ssl_certificate_key').

Il nome della chiave è obbligatorio se si prevede di implementare l'accesso granulare alle chiavi.

Implementare TLS senza chiave

Esistono due approcci alla generazione di una chiave e all'uso della chiave per Key Less TLS: un approccio più semplice, più permissivo e un approccio granulare, che offre una maggiore sicurezza. Gli approcci variano in termini di implementazione e applicazione della sicurezza.

Approccio più semplice

  1. Creare un'entità servizio per la libreria TLS Offload (ad esempio TLSOffload ServicePrincipal)
  2. Assegnare il ruolo "Managed HSM Crypto User" all'entità servizio TLS Offload nell'ambito "/keys".
    az keyvault role assignment create --hsm-name ContosoMHSM \
    --role "Managed HSM Crypto User"  \
    --assignee TLSOffloadServicePrincipal@contoso.com  \
    --scope /keys
    
  3. Generare la chiave con l'etichetta richiesta seguendo i passaggi descritti in Come generare chiavi usando la libreria TLS Offload.
  4. Configurare il server TLS per l'uso della libreria TLS Offload del modulo di protezione hardware gestito come libreria di interfacce PKCS#11
  5. Configurare il server TLS (ad esempio, l'impostazione di configurazione SSL nginx 'ssl_certificate_key') con l'etichetta della chiave e le credenziali dell'entità servizio TLS Offload

Approccio granulare

  1. Creare un utente amministratore (ad esempio TLSOffloadAdminUser) con il ruolo seguente:
    • Ruolo "Managed HSM Crypto Officer" nell'ambito "/"
  2. Creare un'entità servizio di generazione di chiavi, ad esempio TLSOffloadKeyGenServicePrincipal, per la generazione della chiave TLS Offload e assegnare il ruolo seguente:
    • Ruolo "Managed HSM Crypto User" nell'ambito "/keys"
  3. Creare un'entità servizio per l'offload TLS (ad esempio, TLSOffload ServicePrincipal)
  4. L'utente amministratore crea la definizione di ruolo personalizzata seguente:
    az keyvault role definition create --hsm-name ContosoMHSM --role-definition '{ \
    "roleName": "TLS Library User Read Role", \
    "description": "Grant Read access to keys", \ 
    "actions": [], \
    "notActions": [], \
    "dataActions": ["Microsoft.KeyVault/managedHsm/keys/read/action"], \
    "notDataActions": []
    }'
    
  5. Generare una chiave con l'etichetta richiesta dopo "Come generare chiavi usando la libreria TLS Offload". Usare l'entità servizio di generazione delle chiavi, ad esempio TLSOffloadKeyGenServicePrincipal, durante la generazione di chiavi. Annotare l'etichetta chiave e il nome della chiave. Ad esempio:
    • Etichetta chiave: tlsKey
    • Nome chiave: p11-6a2155dc40c94367a0f97ab452dc216f
  6. L'utente amministratore assegna i ruoli seguenti all'entità servizio TLS Offload
    • Ruolo "TLS Library User Read Role" nell'ambito "/keys"
    • Ruolo "Managed HSM Crypto User" nell'ambito "/keys/{nome chiave}"
    az keyvault role assignment create --hsm-name ContosoMHSM  \
    --role " TLS Library User Read Role"  \
    --assignee TLSOffloadServicePrincipal @contoso.com  \
    --scope /keys
    
    az keyvault role assignment create --hsm-name ContosoMHSM  \
    --role "Managed HSM Crypto User"  \
    --assignee TLSOffloadServicePrincipal@contoso.com  \
    --scope /keys/p11-6a2155dc40c94367a0f97ab452dc216f
    
  7. Configurare il server TLS per l'uso della libreria TLS Offload del modulo di protezione hardware gestito di Azure come libreria di interfacce PKCS#11
  8. Configurare il server TLS (ad esempio, l'impostazione di configurazione SSL nginx 'ssl_certificate_key') con l'etichetta della chiave e le credenziali dell'entità servizio TLS Offload

Passaggi successivi