Armazenamento de certificados no Azure Cloud HSM

O Azure Cloud HSM suporta armazenamento de certificados via PKCS#11, permitindo que aplicações gerenciem certificados X.509 juntamente com chaves. Este tutorial fornece instruções passo a passo para configurar pré-requisitos para armazenamento de certificados, incluindo Azure Blob Storage e configuração de Identidade Gerida. Para obter detalhes sobre como usar APIs PKCS#11 para gerenciar certificados, consulte a API PKCS#11 para armazenamento de certificados.

Pré-requisito

Os seguintes pré-requisitos são necessários para suportar o armazenamento de certificados com o Azure Cloud HSM. Consulte o the Azure Cloud HSM Onboarding Guide para instalação e configuração do SDK caso a implementação do HSM não esteja completa.

Requisitos do sistema

  • O recurso HSM do Azure Cloud é implementado, inicializado e configurado.
  • Azure Cloud HSM Client SDK
  • Cópia do certificado de proprietário da partição "PO.crt" no servidor de aplicativos.
  • Endereço conhecido do seu HSM hsm1.chsm-<resource-name>-<unique-string>.privatelink.cloudhsm.azure.net.
  • Conhecimento das credenciais do usuário de criptografia

Pré-requisitos de armazenamento de certificados

  • Conta do Azure Blob Storage
  • Identidade gerenciada para acessar o armazenamento

Importante

Os clientes que utilizem qualquer versão do Windows Server devem instalar a versão mais recente do Visual C++ Redistributable.

Configurar uma conta Azure Blob Storage

Antes de poder usar a API PKCS#11 para Armazenamento de Certificados, deve criar uma Conta Azure Blob Storage. Essa conta de armazenamento manterá os objetos de certificado PKCS#11, que são salvos e recuperados no formato JWS.

  1. Para configurar uma Conta Azure Blob Storage para armazenamento de certificados PKCS#11, vá ao portal Azure e crie uma nova Conta de Armazenamento.

  2. Depois de criar com sucesso a Conta de Armazenamento, navegue até ela no portal Azure e selecione Containers em Armazenamento de Dados. Aqui, você cria um novo contêiner para armazenar os blobs.

     Captura de ecrã da criação de um contentor em Azure Blob Storage.

  3. Depois de criar o contêiner, localize a URL do ponto de extremidade do contêiner navegando até Propriedades do contêiner. Este URL é necessário mais tarde.

    Captura de ecrã da localização das propriedades do contentor em Azure Blob Storage.

  4. Em Propriedades do contêiner, você encontra a URL do contêiner listada. Essa URL é necessária posteriormente no arquivo azcloudhsm_application.cfg para permitir que os aplicativos PKCS#11 localizem o local de armazenamento para objetos de certificado.

    Captura de ecrã do URL do contentor em propriedades Azure Blob Storage.

Configurando a identidade gerenciada atribuída ao usuário para acessar o armazenamento

O próximo pré-requisito para o armazenamento de certificados é criar uma Identidade Gerenciada Atribuída pelo Usuário. Esta identidade é atribuída a função necessária para aceder à conta de armazenamento Azure Blob e é utilizada para autenticar a partir do VM de administrador designado.

Observação

O exemplo a seguir cria e usa uma identidade gerenciada atribuída pelo usuário. Uma Identidade Gerenciada Atribuída ao Sistema também pode ser criada e usada na VM.

  1. Para criar uma Identidade Gerida Atribuída pelo Utilizador para armazenamento de certificados PKCS#11, navegue até ao portal Azure e crie uma nova identidade.

  2. Depois de criar com êxito a Identidade Gerenciada, anote a ID do Cliente, que é necessária posteriormente no arquivo azcloudhsm_application.cfg para habilitar a autenticação na conta de armazenamento da sua VM.

    Captura de ecrã do ID de Cliente de Identidade Gerida no portal Azure.

  3. O passo seguinte é atribuir o papel Azure apropriado para conceder à Identidade Gerida permissão para ler e escrever na Conta de Blob Storage criada anteriormente. Atribua a função de Colaborador de Dados de Blob de Armazenamento à Identidade Gerenciada, definindo o Escopo como Armazenamento e selecionando o recurso específico da Conta de Armazenamento.

    Captura de ecrã da atribuição do papel de Contribuidor de Dados do Blob de Armazenamento no portal Azure.

    Captura de tela da configuração do escopo para a função de Colaborador de Dados de Blob de Armazenamento.

  4. A próxima etapa é atribuir a Identidade Gerenciada Atribuída pelo Usuário à VM que executará seu aplicativo de armazenamento de certificados PKCS#11. Navegue até ao seu recurso de VM no portal Azure, vá à secção Security, selecione Identidade e adicione a Identidade Atribuída pelo Utilizador.

    Captura de ecrã da adição da Identidade Gerida Atribuída pelo Utilizador à VM no portal Azure.

    Captura de ecrã das definições de Identidade de VM no portal Azure.

Configurar as ferramentas cliente do Azure Cloud HSM

Criar uma chave de assinatura de armazenamento

O comando azcloudhsm_util a seguir pode ser usado para criar um par de chaves de assinatura RSA para armazenamento de certificados PKCS#11 em uma única etapa. Por padrão, ele gera uma chave RSA de 2048 bits com um expoente público de 65537. Você pode modificar o tamanho da chave conforme necessário. Antes de executar o comando, verifique se o azcloudhsm_client está sendo executado como um serviço em segundo plano.

Substitua os marcadores de posição da seguinte forma:

  • PKCS11_S com seu nome de usuário Crypto User. (por exemplo, CU1)
  • PKCS11_P com sua senha de usuário de criptografia. (por exemplo, user1234)
  • SIGNING_KEY_ID com o ID do par de chaves desejado (esse ID também será usado posteriormente no arquivo azcloudhsm_application.cfg)

ID da chave de assinatura Para este exemplo, vamos definir o ID da Chave de Assinatura como um valor aleatório.

SIGNING_KEY_ID=$(tr -dc 'a-z' </dev/urandom | head -c 10)

Linux:

sudo ./azcloudhsm_util singlecmd loginHSM -u CU -s $PKCS11_S -p $PKCS11_P genRSAKeyPair -m 2048 -e 65537 -l $SIGNING_KEY_ID -id $SIGNING_KEY_ID

Windows:

.\azcloudhsm_util.exe singlecmd loginHSM -u CU -s %PKCS11_S% -p %PKCS11_P% genRSAKeyPair -m 2048 -e 65537 -l %SIGNING_KEY_ID% -id %SIGNING_KEY_ID%

Importante

Certifique-se de que cada um dos nós de HSM retorna sucesso.

chsmVMAdmin@AdminVM:/opt/azurecloudhsm/bin$ sudo ./azcloudhsm_util singlecmd loginHSM -u CU -s cu1 -p user1234 genRSAKeyPair -m 2048 -e 65537 -l signkeyid -id signkeyid
Version info, Client Version: 2.09.07.02, SDK API Version: 2.09.07.02, SDK Package Version: 2.0.1.2

Cfm3Initialize() returned app id : 01000000

    session_handle 1000000

    Current FIPS mode is: 00000000

Cfm3LoginHSM returned: 0x00 : HSM Return: SUCCESS

Cluster Status:
Node id 1 status: 0x00000000 : HSM Return: SUCCESS
Node id 2 status: 0x00000000 : HSM Return: SUCCESS
Node id 3 status: 0x00000000 : HSM Return: SUCCESS
Command: genRSAKeyPair -m 2048 -e 65537 -L signkeyid -id signkeyid

Cfm3GenerateKeyPair returned: 0x00 : HSM Return: SUCCESS

Cfm3GenerateKeyPair:    public key handle: 262151    private key handle: 262152

Cluster Status:
Node id 1 status: 0x00000000 : HSM Return: SUCCESS
Node id 2 status: 0x00000000 : HSM Return: SUCCESS
Node id 3 status: 0x00000000 : HSM Return: SUCCESS

Atualizar arquivos de configuração

Atualizar configuração do aplicativo

Você precisará atualizar os seguintes parâmetros no arquivo azcloudhsm_application.cfg.

CERTSTORAGE_URL: Este campo refere-se à URL do contentor dentro da Conta Blob Storage do cliente e é usado para armazenar informações de certificados. (por exemplo) https://chsmstorage.blob.core.windows.net/certificates

CERTSTORAGE_SIGNING_KEYID: Este campo refere-se ao ID atribuído ao par de chaves, que é usado para executar verificações de integridade durante operações de leitura e gravação no armazenamento (assinatura e verificação).

UAMI_CLIENT_ID: Este campo refere-se ao ID do Cliente da Identidade Gerida Atribuída pelo Utilizador, que é usada para autenticar a Conta Blob Storage do cliente. Se deixada em branco, a autenticação será padronizada para usar uma Identidade Gerenciada Atribuída pelo Sistema.

Observação

Esses parâmetros só se aplicam ao executar operações de certificado em PKCS#11. Não é necessário para Operações-Chave.

DAEMON_ID=1  
SOCKET_TYPE=UNIXSOCKET  
PORT=1111  
USER_KEK_HANDLE=262150  
DEFAULT_WRAP_WITH_TRUSTED=1  
CERTSTORAGE_URL=https://chmsstorage.blob.core.windows.net/certificates  
CERTSTORAGE_SIGNING_KEYID=hjgrwvvofe  
UAMI_CLIENT_ID=25e659cc-6570-4f3b-9617-adfbc84b2565  

Validar a configuração do PKCS#11

Consulte o Guia de Integração PKCS#11 para validação baseada em exemplo da sua configuração PKCS#11.

chsmVMAdmin@AdminVM:/opt/azurecloudhsm$ sudo ./cust_p11_app -s cu1 -p user1234 -l /opt/azurecloudhsm/lib64/libazcloudhsm_pkcs11.so
[INFO] Azure Cloud HSM – Loading PKCS#11 library.
[INFO] Azure Cloud HSM – C_GetFunctionList
[INFO] Azure Cloud HSM – Preparing PIN with given username and password.
[INFO] Azure Cloud HSM – C_Initialize
[INFO] Azure Cloud HSM – C_GetInfo
[INFO] Azure Cloud HSM – Retrieve access token, C_GetTokenInfo
[INFO] Azure Cloud HSM – Start session with specified token, C_OpenSession
[INFO] Azure Cloud HSM – Login with PIN, C_Login
Add Your PKCS#11 Code Here

Próximos passos