Bibliothèque de déchargement TLS HSM managé Azure
Azure Managed HSM vous propose une Bibliothèque de déchargement TLS qui est conforme à la version 2.40 de PKCS#11. Azure Managed HSM ne prend pas en charge toutes les fonctions répertoriées dans la spécification PKCS#11. Au lieu de cela, la Bibliothèque de déchargement TLS prend en charge un ensemble limité de mécanismes et de fonctions d’interface pour le déchargement SSL/TLS à l’aide de F5 (BigIP) et Nginx uniquement, principalement pour générer des clés de certificat de serveur TLS et des signatures numériques pendant l’établissement de liaisons TLS.
Pour plus d’informations, consultez GitHub de la Bibliothèque de déchargement TLS d’Azure Managed HSM.
La Bibliothèque de déchargement TLS utilise en interne l’API REST Azure Key Vault pour interagir avec Azure Managed HSM.
Bien démarrer
Attributs PKCS#11
Pour s’intégrer correctement à PKCS#11, la génération de clés (via C_GenerateKeyPair) et la localisation d’objets clés (via C_FindObjectsInit/C_FindObjects) nécessitent une solution pour le stockage des attributs PKCS#11 sur l’objet clé Azure Key Vault. La Bibliothèque de déchargement TLS convertit ces attributs PKCS#11 nécessaires en balises Azure Key Vault.
Ces « Balises d’attribut » ont un préfixe spécial :
- p11_pri_{P11 Attribute Name} : attributs de clé privée
- p11_pub_{P11 Attribute Name} : attributs de clé publique
La Bibliothèque de déchargement TLS définit correctement les attributs Azure Key Vault Key Operations et Key Lifetime afin que le service puisse correctement appliquer ces restrictions sur les clés générées. Ces attributs sont également stockés en tant que balises comme d’autres attributs PKCS#11 afin de prendre en charge les fonctionnalités de requête.
Les applications utilisant la Bibliothèque de déchargement TLS utilisent un ou plusieurs attributs PKCS#11 pour localiser et utiliser les objets clés.
Avertissement
Les clés générées par la Bibliothèque de déchargement TLS et leurs balises sont accessibles via l’API REST Azure Key Vault. La manipulation de ces balises d’attribut P11 à l’aide de l’API REST Azure Key Vault peut arrêter les applications de la Bibliothèque de déchargement TLS.
Génération de la clé
La Bibliothèque de déchargement TLS comprend un outil de création de clés, mhsm_p11_create_key. L’exécution de l’outil sans argument de ligne de commande indique une utilisation correcte de l’outil.
L’outil de création de clés nécessite un principal de service, auquel est affecté au rôle « Utilisateur de chiffrement du HSM managé » au niveau de l’étendue « /keys ».
L’outil de création de clés lit les informations d’identification du principal de service à partir des variables d’environnement MHSM_CLIENT_ID et MHSM_CLIENT_SECRET :
- MHSM_CLIENT_ID : doit être défini sur l’ID d’application (client) du principal de service
- MHSM_CLIENT_SECRET : doit être défini sur le mot de passe du principal de service (clé secrète client)
Les variables d’environnement ci-dessus ne sont pas nécessaires pour des identités managées.
- Utilisez l’argument
--identity
pour activer l’identité managée à l’aide de l’outil mhsm_p11_create_key. - Le
client_id
de l’identité managée affectée par l’utilisateur doit être cité dans le fichier de configuration MHSM (mhsm-pkcs11.conf). Si leclient_id
d’une identité managée affectée par l’utilisateur n’est pas fourni, il la considère comme une identité managée affectée par le système.
L’outil de création de clés génère un nom pour la clé de manière aléatoire lors de la création. L’ID complet de la clé Azure Key Vault et le nom de la clé sont indiqués dans la console par souci de commodité.
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’argument --label
de l’outil de création de clés spécifie la CKA_LABEL souhaitée pour les clés privées et publiques générées. Ces attributs sont généralement nécessaires pour configurer les solutions de déchargement TLS prises en charge (par exemple, le paramètre de configuration NGINX SSL « ssl_certificate_key »).
Vous devez disposer du nom de clé pour toute modification d’attribution de rôle via Azure CLI.
Contrôle d’accès
La Bibliothèque de déchargement TLS traduit C_FindObjectsInit en appel d’API REST Azure Key Vault qui fonctionne au niveau de l’étendue /keys. Le service MHSM nécessite l’autorisation en Lecture dans cette étendue pour que l’utilisateur de la Bibliothèque de déchargement TLS autorise l’opération de recherche des clés créées via l’outil de création de clés.
Pour plus d’informations sur le contrôle d’accès en fonction du rôle (RBAC) local Azure Managed HSM, voir :
- Rôles intégrés locaux du contrôle d’accès en fonction du rôle (RBAC) Azure Managed HSM
- Gestion des rôles Azure Managed HSM
La section suivante décrit différentes méthodes d’implémentation du contrôle d’accès pour le principal de service et l’identité managée de la Bibliothèque de déchargement TLS.
Principal du service de déchargement TLS
Le principal du service de déchargement TLS est utilisé par l’application qui tire parti de la Bibliothèque de déchargement TLS pour accéder aux clés et doit disposer au minimum de l’autorisation suivante via les attributions de rôles :
- Autorisation KeyRead sur toutes les clés dans HSM managé
- Autorisation KeySign sur les clés nécessaires au déchargement TLS
Utilisateur administrateur
L’utilisateur administrateur crée une définition de rôle et des attributions de rôles personnalisées. Par conséquent, l’utilisateur administrateur doit être affecté à l’un des rôles intégrés suivants dans l’étendue « /scope » :
- Responsable du chiffrement du HSM managé
- Administrateur des stratégies du HSM managé
- Administrateur du HSM managé
Principal du service de la génération de clés
Le principal du service de génération de clés est utilisé avec l’outil de création de clés (mhsm_p11_create_key) pour générer des clés de déchargement TLS. Ce principal de service doit être affecté au rôle « Utilisateur de chiffrement du HSM managé » au niveau de l’étendue « /keys ».
Azure CLI
Vous pouvez utiliser Azure CLI pour effectuer des tâches telles que l’attribution de rôle.
Méthode permissive
La méthode permissive est plus simple et appropriée lorsque Azure Managed HSM est utilisé exclusivement pour le déchargement TLS.
Attribuez le rôle Utilisateur du chiffrement au principal du service de déchargement TLS au niveau l’étendue « /keys ». Cela autorise le principal du service de déchargement TLS à générer des clés et à les rechercher pour le déchargement TLS.
az keyvault role assignment create --hsm-name ContosoMHSM \
--role "Managed HSM Crypto User" \
--assignee TLSOffloadServicePrincipal@contoso.com \
--scope /keys
Pour des identités managées, spécifiez des arguments de commande comme suit :
az keyvault role assignment create --hsm-name ContosoMHSM \
--role "Managed HSM Crypto User" \
--assignee-object-id <object_id> \
--assignee-principal-type MSI \
--scope /keys
Méthode granulaire
La méthode granulaire implémente un contrôle d’accès affiné. Elle nécessite deux principaux de service (principal de service de déchargement TLS et principal de service de génération de clés) et un utilisateur administrateur.
L’objectif est de limiter les autorisations du principal du service de déchargement TLS afin de prendre en charge le minimum requis pour le déchargement TLS. L’utilisateur doit disposer de l’autorisation en Lecture pour que d’autres clés prennent en charge la fonction C_FindObject* de la bibliothèque.
Rôle en lecture d’utilisateur de la Bibliothèque de déchargement TLS
La première étape à suivre pour implémenter la méthode granulaire consiste à créer un rôle personnalisé. Cette opération doit être effectuée une seule fois.
L’utilisateur administrateur (avec le rôle Responsable du chiffrement du HSM managé, Administrateur du HSM managé ou Administrateur des stratégies du HSM managé) crée une définition de rôle personnalisée « Rôle en lecture d’utilisateur de bibliothèque TLS » :
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": [] \
}'
Générer des clés
Les clés peuvent être générées à l’aide du principal du service de génération de clés en utilisation l’outil de création de clés (mhsm_p11_create_key).
Accorder l’autorisation
L’utilisateur administrateur attribue les rôles suivants au principal du service de déchargement TLS.
- Attribuer le rôle « Rôle en lecture d’utilisateur de la bibliothèque TLS » au niveau de l’étendue « /keys »
- Attribuer le rôle « Utilisateur du chiffrement du HSM managé » au niveau de l’étendue « /keys/{nom de clé} »
Dans l’exemple suivant, le nom de la clé est « 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
Mise en cache de connexions
Pour améliorer les performances des appels de signature au service HSM managé, une bibliothèque de déchargement TLS met en cache ses connexions TLS aux serveurs de service HSM managés. Une bibliothèque de déchargement TLS met en cache jusqu’à 20 connexions TLS par défaut. Une mise en cache de connexion peut être contrôlée via un fichier de configuration MHSM (mhsm-pkcs11.conf).
"ConnectionCache": {
"Disable": false,
"MaxConnections": 20
}
Désactiver
Si cette valeur est définie sur true, la mise en cache des connexions est désactivée. Il est activé par défaut.
MaxConnections
Spécifie le nombre maximal de connexions à mettre en cache. La limite maximale de connexions doit être configurée en fonction du nombre de sessions PKCS11 simultanées utilisées par l’application. Les applications créent généralement un pool de sessions PKCS11 et les utilisent à partir d’un pool de threads pour générer des demandes de signature en parallèle. MaxConnections doit correspondre au nombre de demandes de signature simultanées générées par les applications.
La demande de signature par seconde (RPS) dépend du nombre de requêtes simultanées et du nombre de connexions mises en cache. Spécifier un nombre supérieur ou même la limite par défaut n’améliore pas le RPS de signature si le nombre de demandes de signature PKCS11 simultanées est inférieur à cette limite. Le nombre maximal de connexions simultanées pour atteindre le mode rafale du pool HSM B1 Standard est d’environ 30 selon le type instance. Mais vous devez essayer avec divers nombres pour déterminer le nombre optimal de connexions simultanées.
Consultez la documentation de votre application ou contactez votre fournisseur d’application pour en savoir plus sur la façon dont l’application utilise la bibliothèque PKCS11.
Utilisation de la Bibliothèque de déchargement TLS
Générer des clés
La Bibliothèque de déchargement TLS comprend un outil de création de clés, mhsm_p11_create_key. L’exécution de l’outil sans argument de ligne de commande indique une utilisation correcte de l’outil.
L’outil de création de clés nécessite un principal de service, auquel est affecté au rôle « Utilisateur de chiffrement du HSM managé » au niveau de l’étendue « /keys ».
L’outil de création de clés lit les informations d’identification du principal de service à partir des variables d’environnement MHSM_CLIENT_ID et MHSM_CLIENT_SECRET.
- MHSM_CLIENT_ID : doit être défini sur l’ID d’application (client) du principal de service
- MHSM_CLIENT_SECRET : doit être défini sur le mot de passe du principal de service (clé secrète client)
L’outil de création de clés génère un nom pour la clé de manière aléatoire lors de la création. L’ID de clé Azure Key Vault et le nom de clé complets sont indiqués dans la console par souci de commodité.
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’argument --label
de l’outil de création de clés spécifie la CKA_LABEL souhaitée pour les clés privées et publiques générées. Ces attributs sont généralement nécessaires pour configurer des solutions de déchargement TLS prises en charge (par exemple, le paramètre de configuration NGINX SSL « ssl_certificate_key »).
Le nom de la clé est nécessaire si vous envisagez d’implémenter un accès granulaire aux clés.
Implémenter TLS sans clé
Il existe deux méthodes pour générer une clé et utiliser la clé pour le TLS sans clé : une méthode plus simple et plus permissive et une méthode granulaire qui fournit une meilleure sécurité. Les méthodes diffèrent au niveau de l’effort d’implémentation et de sécurisation.
Méthode plus simple
- Créer un principal de service pour la Bibliothèque de déchargement TLS (par exemple, TLSOffload ServicePrincipal)
- Attribuez le rôle « Utilisateur du chiffrement du HSM managé » au principal du service de déchargement TLS au niveau de l’étendue « /keys ».
az keyvault role assignment create --hsm-name ContosoMHSM \ --role "Managed HSM Crypto User" \ --assignee TLSOffloadServicePrincipal@contoso.com \ --scope /keys
- Générez une clé dotée de l’étiquette requise en suivant les étapes décrites dans Comment générer des clés à l’aide de la Bibliothèque de déchargement TLS.
- Configurer le serveur TLS pour qu’il utilise la Bibliothèque de déchargement TLS Managed HSM comme bibliothèque d’interface PKCS#11
- Configurer le serveur TLS (par exemple, le paramètre de configuration NGINX SSL « ssl_certificate_key ») à l’aide de l’étiquette de clé et des informations d’identification du principal du service de déchargement TLS
Méthode granulaire
- Créez un utilisateur administrateur (par exemple, TLSOffloadAdminUser) ayant le rôle suivant :
- Rôle « Responsable du chiffrement du HSM managé » au niveau de l’étendue « /scope »
- Créez un principal de service de génération de clés (par exemple, TLSOffloadKeyGenServicePrincipal) pour la génération de clé de déchargement TLS, puis attribuez le rôle suivant :
- Rôle « Utilisateur du chiffrement du HSM managé » au niveau de l’étendue « /keys ».
- Création d’un principal de service pour le déchargement TLS (par exemple, TLSOffload ServicePrincipal)
- L’utilisateur administrateur crée la définition de rôle personnalisée suivante :
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": [] }'
- Générez une clé dotée de l’étiquette requise en suivant « Comment générer des clés à l’aide de la Bibliothèque de déchargement TLS ». Utilisez le principal du service de génération de clés (par exemple, TLSOffloadKeyGenServicePrincipal) pendant la création de clés. Notez le nom et l’étiquette de la clé. Par exemple :
- Étiquette de la clé : tlsKey
- Nom de la clé : p11-6a2155dc40c94367a0f97ab452dc216f
- L’utilisateur administrateur attribue les rôles suivants au principal du service de déchargement TLS
- Rôle « Rôle en lecture d’utilisateur de la bibliothèque TLS » au niveau de l’étendue « /keys »
- Rôle « Utilisateur du chiffrement du HSM managé » au niveau de l’étendue « /keys/{key name} »
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
- Configurer le serveur TLS afin d’utiliser la Bibliothèque de déchargement TLS Azure Managed HSM comme bibliothèque d’interface PKCS#11
- Configurer le serveur TLS (par exemple, le paramètre de configuration NGINX SSL « ssl_certificate_key ») à l’aide de l’étiquette de clé et des informations d’identification du principal du service de déchargement TLS