Share via


Azure Managed HSM – Biblioteca de Descarregamento TLS

O Azure Managed HSM oferece uma biblioteca TLS Offload, que está em conformidade com o PKCS#11 versão 2.40. O Azure Managed HSM não suporta todas as funções listadas na especificação PKCS#11; em vez disso, a biblioteca TLS Offload suporta um conjunto limitado de mecanismos e funções de interface para Descarga de SSL/TLS apenas com F5 (BigIP) e Nginx, principalmente para gerar chaves de certificado do servidor TLS e gerar assinaturas digitais durante handshakes TLS.

Para obter mais informações, veja GitHub da Biblioteca de Descarga de TLS do Azure Managed HSM.

A Biblioteca de Descarga de TLS utiliza internamente a API REST do Azure Key Vault para interagir com o Azure Managed HSM.

Introdução

Atributos PKCS#11

Para integrar corretamente com o PKCS#11, gerar chaves (através de C_GenerateKeyPair) e localizar objetos-chave (através de C_FindObjectsInit/C_FindObjects) requer uma solução para armazenar atributos PKCS#11 no objeto de chave Key Vault do Azure. A Biblioteca de Descarga de TLS converte estes atributos PKCS#11 necessários em Etiquetas de Key Vault do Azure.

Estas "Etiquetas de Atributo" têm um prefixo especial:

  • p11_pri_{P11 Attribute Name} - Atributos de Chave Privada
  • p11_pub_{P11 Attribute Name} - Atributos de Chave Pública

A biblioteca TLS Offload define corretamente os atributos Azure Key Vault Key Operations e Key Lifetime para que o serviço possa impor corretamente estas restrições nas chaves geradas. Estes atributos também são armazenados como etiquetas, como outros atributos PKCS#11, para suportar capacidades de consulta.

As aplicações que utilizam a Biblioteca de Descarga de TLS utilizam um ou mais atributos PKCS#11 para localizar e utilizar os objetos-chave.

Aviso

As chaves geradas pela Biblioteca de Descarga de TLS e as respetivas Etiquetas estão acessíveis através da API REST do Azure Key Vault. Manipular estas Etiquetas de Atributo P11 com o Azure Key Vault API REST pode interromper as aplicações da Biblioteca de Descarga de TLS.

Geração de chaves

A Biblioteca de Descarga de TLS inclui uma ferramenta de criação de chaves, mhsm_p11_create_key. Executar a ferramenta sem argumentos de linha de comandos mostra a utilização correta da ferramenta.

A ferramenta de criação de chaves requer um principal de serviço, que é atribuído à função "Utilizador Criptografo do HSM Gerido" no âmbito "/keys".

A ferramenta de criação de chaves lê as credenciais do principal de serviço das variáveis de ambiente MHSM_CLIENT_ID e MHSM_CLIENT_SECRET:

  • MHSM_CLIENT_ID – tem de ser definido para o ID de aplicação (cliente) do principal de serviço
  • MHSM_CLIENT_SECRET – tem de ser definido como a palavra-passe do principal de serviço (segredo do cliente)

Para identidades geridas, as variáveis de ambiente acima não são necessárias.

  • Utilize o --identity argumento para ativar a identidade gerida com a ferramenta mhsm_p11_create_key.
  • A client_id identidade gerida atribuída pelo utilizador deve ser citada no ficheiro de configuração MHSM (mhsm-pkcs11.conf). Se a client_id de uma identidade gerida atribuída pelo utilizador não for fornecida, irá considerá-la como identidade gerida atribuída pelo sistema.

A ferramenta de criação de chaves gera aleatoriamente um nome para a chave no momento da criação. O ID completo da chave do Azure Key Vault e o nome da chave são impressos na consola para sua comodidade.

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

O --label argumento para a ferramenta de criação de chaves especifica a CKA_LABEL pretendida para as chaves privadas e públicas geradas. Normalmente, estes atributos são necessários para configurar soluções de Descarga de TLS suportadas (por exemplo, a definição de configuração SSL nginx "ssl_certificate_key").

Precisa do nome da chave para quaisquer alterações de atribuição de funções através da CLI do Azure.

Controlo de acesso

A Biblioteca de Descarga de TLS traduz o C_FindObjectsInit numa chamada à API REST do Azure Key Vault, que funciona no âmbito /keys. O serviço MHSM requer a permissão de Leitura neste âmbito para que o Utilizador da Biblioteca de Descarga de TLS autorize a operação de localização para as chaves criadas através da ferramenta de criação de chaves.

Para obter mais informações sobre o RBAC local do Azure Managed HSM, veja:

A secção seguinte descreve diferentes abordagens para implementar o controlo de acesso para o principal de serviço biblioteca de descarga de TLS e Identidade Gerida.

Principal de serviço de Descarga de TLS

O principal de serviço TLS Offload é utilizado pela aplicação que utiliza a Biblioteca de Descarga de TLS para aceder a chaves e deve ter, no mínimo, a seguinte permissão através de atribuições de funções:

  • Permissão KeyRead para todas as chaves no HSM gerido
  • Permissão KeySign para as chaves necessárias para a descarga de TLS

Utilizador Administrador

O utilizador Administração irá criar uma definição de função personalizada e atribuições de funções. Por conseguinte, o utilizador Administração deve ser atribuído a uma das seguintes funções incorporadas no âmbito "/":

  • Managed HSM Crypto Officer
  • Administrador da Política HSM Gerida
  • Administrador do HSM Gerido

Principal de serviço de geração de chaves

O principal de serviço de geração de chaves é utilizado com a ferramenta de criação de chaves (mhsm_p11_create_key) para gerar chaves de descarga TLS. Este principal de serviço deve ser atribuído à função "Utilizador Criptografo do HSM Gerido" no âmbito "/keys".

CLI do Azure

A CLI do Azure pode ser utilizada para executar tarefas como a atribuição de funções.

Abordagem permissiva

A abordagem permissiva é mais simples e adequada quando o Azure Managed HSM é utilizado exclusivamente para a descarga de TLS.

Atribua a função Utilizador Cripto ao principal de serviço TLS Offload no âmbito "/keys". Isto dá ao principal de serviço TLS Offload a permissão para gerar chaves e encontrá-las para Descarga de TLS.

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

Para Identidades Geridas, especifique os argumentos de comando da seguinte forma:

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

Abordagem granular

A abordagem granular implementa o controlo de acesso detalhado. Requer dois principais de serviço (principal de serviço TLS Offload e principal de serviço de Geração de Chaves) e um Utilizador Administração.

O objetivo é restringir as permissões do principal de serviço TLS Offload para suportar o mínimo necessário para a descarga de TLS. O utilizador tem de ter a permissão de Leitura para outras chaves para suportar a função C_FindObject* da biblioteca.

Função de Leitura do Utilizador da Biblioteca de Descarga de TLS

O primeiro passo para implementar a abordagem granular é criar uma função personalizada. Esta operação só tem de ser efetuada uma vez.

A função utilizador do Administração (com o Managed HSM Crypto Officer, Administrador HSM Gerido ou Administrador de Políticas HSM Geridas) cria uma definição de função personalizada de função "Função de Leitura do Utilizador da Biblioteca 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": [] \
}'

Gerar chaves

As chaves podem ser geradas com o principal de serviço Geração de Chaves com a ferramenta de criação de chaves (mhsm_p11_create_key).

Conceder permissão

O utilizador Administração atribui as seguintes funções ao principal de serviço TLS Offload.

  • Atribuir a função "Função de Leitura do Utilizador da Biblioteca TLS" no âmbito "/keys"
  • Atribuir a função "Utilizador Criptografo do HSM Gerido" no âmbito "/keys/{key name}"

No exemplo seguinte, o nome da chave é "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

Colocação em Cache de Ligação

Para melhorar o desempenho das Chamadas de sinal para o Serviço HSM Gerido, a Biblioteca de Descarga de TLS coloca em cache as respetivas ligações TLS para os servidores de serviço HSM Geridos. Por predefinição, a Biblioteca de Descarga de TLS coloca em cache até 20 ligações TLS. A Colocação em Cache de Ligação pode ser controlada através do ficheiro de configuração MHSM (mhsm-pkcs11.conf).

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

Desativar

Se este valor for verdadeiro, a Colocação em Cache de Ligação será desativada. Está ativada por predefinição.

MaxConnections

Especifica o número máximo de ligações à cache. O limite máximo de ligação deve ser configurado com base no número de sessões PKCS11 simultâneas que estão a ser utilizadas pela aplicação. Normalmente, as aplicações criam um conjunto de sessões PKCS11 e utilizam-nas a partir de um conjunto de threads para gerar pedidos de assinatura em paralelo. As MaxConnections devem corresponder ao número de pedidos de assinatura simultâneos gerados pelas aplicações.

O Pedido de Assinatura por Segundo (RPS) depende do número de pedidos simultâneos e do número de ligações em cache. Especificar um número mais elevado ou mesmo o limite predefinido não melhorará o RPS de assinatura se o número de pedidos de assinatura PKCS11 simultâneos for inferior a este limite. O número máximo de ligações simultâneas para alcançar o modo de expansão do conjunto de HSM Standard B1 é de cerca de 30, dependendo do tipo de instância. Mas deve tentar com números diferentes para descobrir o número ideal de ligações simultâneas.

Consulte a documentação da sua aplicação ou contacte o fornecedor da aplicação para saber mais sobre como a aplicação utiliza a biblioteca PKCS11.

Utilizar a Biblioteca de Descarga de TLS

Gerar chaves

A Biblioteca de Descarga de TLS inclui uma ferramenta de criação de chaves, mhsm_p11_create_key. Executar a ferramenta sem argumentos de linha de comandos mostra a utilização correta da ferramenta.

A ferramenta de criação de chaves requer um principal de serviço, que é atribuído à função "Utilizador Criptografo do HSM Gerido" no âmbito "/keys".

A ferramenta de criação de chaves lê as credenciais do principal de serviço das variáveis de ambiente MHSM_CLIENT_ID e MHSM_CLIENT_SECRET.

  • MHSM_CLIENT_ID – tem de ser definido para o ID de aplicação (cliente) do principal de serviço
  • MHSM_CLIENT_SECRET – tem de ser definido como a palavra-passe do principal de serviço (segredo do cliente)

A ferramenta de criação de chaves gera aleatoriamente um nome para a chave no momento da criação. O ID completo da Chave do Azure Key Vault e o Nome da Chave são impressos na consola para sua comodidade.

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

O --label argumento para a ferramenta de criação de chaves especifica a CKA_LABEL pretendida para as chaves privadas e públicas geradas. Normalmente, estes atributos são necessários para configurar soluções de Descarga de TLS suportadas (por exemplo, a definição de configuração SSL nginx "ssl_certificate_key").

O nome da chave é necessário se estiver a planear implementar o acesso granular às chaves.

Implementar o TLS sem chave

Existem duas abordagens para gerar uma chave e utilizar a chave para o TLS Key Less: uma abordagem mais simples, mais permissiva e uma abordagem granular, que oferece uma melhor segurança. As abordagens diferem no esforço de implementação e na imposição de segurança.

Abordagem mais simples

  1. Criar um principal de serviço para a Biblioteca de Descarga de TLS (por exemplo, TLSOffload ServicePrincipal)
  2. Atribua a função "Utilizador Criptocrito do HSM Gerido" ao principal de serviço TLS Offload no âmbito "/keys".
    az keyvault role assignment create --hsm-name ContosoMHSM \
    --role "Managed HSM Crypto User"  \
    --assignee TLSOffloadServicePrincipal@contoso.com  \
    --scope /keys
    
  3. Gere a chave com a etiqueta necessária ao seguir os passos em Como gerar chaves com a Biblioteca de Descarga de TLS.
  4. Configurar o servidor TLS para utilizar a Biblioteca de Descarga de TLS do HSM Gerido como a biblioteca de interfaces PKCS#11
  5. Configurar o servidor TLS (por exemplo, a definição de configuração SSL nginx 'ssl_certificate_key') com a etiqueta de chave e as credenciais do principal de serviço de Descarga de TLS

Abordagem granular

  1. Crie um Utilizador Administração (por exemplo, TLSOffloadAdminUser) com a seguinte função:
    • Função "Managed HSM Crypto Officer" no âmbito "/"
  2. Crie um principal de serviço de Geração de Chaves (por exemplo, TLSOffloadKeyGenServicePrincipal) para a geração da Chave de Descarga TLS e atribua a seguinte função:
    • Função "Utilizador Criptografo HSM Gerido" no âmbito "/keys".
  3. Criar um principal de serviço para a Descarga de TLS (por exemplo, TLSOffload ServicePrincipal)
  4. O utilizador Administração cria a seguinte definição de função personalizada:
    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. Gere uma chave com a etiqueta necessária a seguir a "Como gerar chaves com a Biblioteca de Descarga de TLS". Utilize o principal de serviço de Geração de Chaves (por exemplo, TLSOffloadKeyGenServicePrincipal) ao gerar chaves. Anote a Etiqueta de Chave e o Nome da Chave. Por exemplo:
    • Etiqueta da Chave: tlsKey
    • Nome da Chave: p11-6a2155dc40c94367a0f97ab452dc216f
  6. Administração Utilizador atribui as seguintes funções ao principal de serviço TLS Offload
    • Função "Função de Leitura do Utilizador da Biblioteca TLS" no âmbito "/keys"
    • Função "Utilizador Criptografo HSM Gerido" no âmbito "/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
    
  7. Configurar o servidor TLS para utilizar a Biblioteca de Descarga de TLS do Azure Managed HSM como a biblioteca de interfaces PKCS#11
  8. Configurar o servidor TLS (por exemplo, a definição de configuração SSL nginx 'ssl_certificate_key') com a etiqueta de chave e as credenciais do principal de serviço de Descarga de TLS

Passos seguintes