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 de armazenamento de certificados, incluindo Armazenamento de Blobs do Azure e configuração de identidade gerida. Para detalhes sobre o uso de APIs PKCS#11 para gerir certificados, consulte API PKCS#11 para armazenamento de certificados.

Prerequisites

Os seguintes pré-requisitos são necessários para suportar o armazenamento de certificados com o Azure Cloud HSM. Consulte o guia de integração do Azure Cloud HSM 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 Armazenamento de Blobs do Azure
  • Identidade gerida para aceder ao 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 Armazenamento de Blobs do Azure

Antes de poder usar a API PKCS#11 para armazenamento de certificados, deve criar uma conta Armazenamento de Blobs do Azure. Esta conta de armazenamento contém os objetos certificados PKCS#11, que são guardados e recuperados no formato JWS.

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

  2. Depois de criar a conta de armazenamento, aceda-a no portal do Azure e selecione Contentores em Armazenamento de Dados. Cria um novo recipiente para guardar os blobs.

     Captura de ecrã da criação de um contentor em Armazenamento de Blobs do Azure.

  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 Armazenamento de Blobs do Azure.

  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 Armazenamento de Blobs do Azure.

Configure uma identidade gerida atribuída pelo utilizador para aceder ao 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. Atribuir o papel Azure apropriado para conceder à identidade gerida permissão para ler e escrever na conta Armazenamento de Blobs previamente criada. Atribuir o papel de Contribuidor de Dados do Blob de Armazenamento à identidade gerida, definindo o Escopo para 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. Atribui a Identidade Gerida Atribuída pelo Utilizador à VM que executa a tua aplicação de armazenamento de certificados PKCS#11. Vai ao teu recurso de VM no portal Azure, seleciona a secção de Segurança, seleciona Identidade e adiciona 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

Use o seguinte azcloudhsm_util comando para criar um par de chaves de assinatura RSA para o armazenamento de certificados PKCS#11 num único passo. Por padrão, ele gera uma chave RSA de 2048 bits com um expoente público de 65537. Podes modificar o tamanho da chave conforme necessário. Antes de executares o comando, certifica-te de que está azcloudhsm_client a correr como serviço em segundo plano.

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

  • PKCS11_S com o seu nome de utilizador de criptografia (por exemplo, cu1)
  • PKCS11_P com a sua palavra-passe de utilizador de criptografia (por exemplo, user1234)
  • SIGNING_KEY_ID com o ID de par de chaves desejado (este ID também é usado mais tarde no seu azcloudhsm_application.cfg ficheiro)

Definido SIGNING_KEY_ID para um valor aleatório para este exemplo:

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: <version>, SDK API Version: <version>, SDK Package Version: <version>

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 Armazenamento de Blobs 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 Armazenamento de Blobs 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://chsmstorage.blob.core.windows.net/certificates  
CERTSTORAGE_SIGNING_KEYID=hjgrwvvofe  
UAMI_CLIENT_ID=25e659cc-6570-4f3b-9617-adfbc84b2565  

Validar a configuração do PKCS#11

Para validação baseada em amostras da sua configuração PKCS#11, consulte o guia de integraçã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