Azure armazenamento de certificados HSM na nuvem

Azure HSM de nuvem dá suporte ao armazenamento de certificados por meio do PKCS nº 11, permitindo que os aplicativos gerenciem certificados X.509 junto 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 gerenciada. Para obter detalhes sobre como usar APIs PKCS nº 11 para gerenciar certificados, consulte a API PKCS nº 11 para armazenamento de certificados.

Pré-requisitos

Os pré-requisitos a seguir são necessários para dar suporte ao armazenamento de certificados com Azure HSM na nuvem. Consulte o guia de integração do Azure Cloud HSM para instalação e configuração do SDK se a implantação do HSM não estiver concluída.

Requisitos do sistema

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

Pré-requisitos de armazenamento de certificado

  • conta do Armazenamento de Blobs do Azure
  • Identidade gerenciada para acessar o armazenamento

Importante

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

Configurar uma conta de Armazenamento de Blobs do Azure

Antes de poder usar a API PKCS nº 11 para armazenamento de certificados, você deve criar uma conta Armazenamento de Blobs do Azure. Essa conta de armazenamento contém os objetos de certificado PKCS nº 11, que são salvos e recuperados no formato JWS.

  1. Para configurar uma conta de Armazenamento de Blobs do Azure para o armazenamento de certificados PKCS nº 11, acesse o portal do Azure e crie uma nova Conta de Armazenamento.

  2. Depois que a conta de armazenamento for criada, acesse-a no portal do Azure e selecione Contêineres no Armazenamento de Dados. Crie um novo contêiner para armazenar os blobs.

    Screenshot de criação de um contêiner 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é as propriedades do contêiner. Essa URL é necessária posteriormente.

    Captura de tela da localização de propriedades de contêiner no Armazenamento de Blobs do Azure.

  4. Nas propriedades do contêiner, você encontra a URL do contêiner listada. Essa URL é necessária posteriormente no arquivo azcloudhsm_application.cfg para habilitar aplicativos PKCS nº 11 a localizar o local de armazenamento para objetos de certificado.

    Screenshot da URL do contêiner em Armazenamento de Blobs do Azure properties.

Configurar uma identidade gerenciada atribuída pelo 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. Essa identidade recebe a função necessária para acessar a Conta de Armazenamento de Blobs do Azure e é usada para autenticar na VM de administrador designada.

Observação

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

  1. Para criar uma identidade gerenciada atribuída User para armazenamento de certificados PKCS#11, navegue até o 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 VM.

    Screenshot da ID do Cliente de Identidade Gerenciada no portal do Azure.

  3. Atribua a função apropriada do Azure para conceder à identidade gerenciada permissão para ler e escrever na conta do Armazenamento de Blobs criada anteriormente. Atribua a função Colaborador de Dados Blob de Armazenamento à identidade gerenciada, definindo o Escopo como Armazenamento e selecionando o recurso de conta de armazenamento específico.

    Captura de tela de atribuição da função Colaborador de Dados do Blob de Armazenamento no portal do Azure.

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

  4. Atribua a Identidade Gerenciada Atribuída ao Usuário à VM que executa seu aplicativo de armazenamento de certificados PKCS nº 11. Vá para o recurso de VM no portal do Azure, selecione a seção Segurança, selecione Identidade e adicione a identidade atribuída pelo usuário.

    Screenshot de adição da Identidade Gerenciada Atribuída ao Usuário à VM no Azure portal.

    Screenshot das configurações de Identidade da VM em Azure portal.

Configurar as ferramentas de cliente do Azure Cloud HSM

Criar uma chave de assinatura de armazenamento

Use o comando a seguir azcloudhsm_util para criar um par de chaves de assinatura RSA para o armazenamento de certificados PKCS nº 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 ele azcloudhsm_client está em execução como um serviço em segundo plano.

Substitua os espaços reservados conforme a seguir:

  • PKCS11_S com seu nome de usuário de criptografia (por exemplo, cu1)
  • PKCS11_P com sua senha de usuário de criptografia (por exemplo, user1234)
  • SIGNING_KEY_ID com o identificador do par de chaves desejado (esse identificador também é usado mais tarde no arquivo azcloudhsm_application.cfg)

Defina SIGNING_KEY_ID como 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

Verifique se cada um dos nós HSM retorna êxito.

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 a configuração do aplicativo

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

CERTSTORAGE_URL: esse campo refere-se à URL do contêiner dentro da conta de Armazenamento de Blobs do cliente e é usado para armazenar informações de certificado. (por exemplo, https://chsmstorage.blob.core.windows.net/certificates)

CERTSTORAGE_SIGNING_KEYID: esse campo refere-se à ID atribuída 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: esse campo refere-se à ID do cliente da Identidade Gerenciada Atribuída pelo Usuário, que é usada para autenticar na conta de Armazenamento de Blobs do cliente. Se estiver em branco, a autenticação usará uma Identidade Gerenciada Atribuída ao Sistema.

Observação

Esses parâmetros só se aplicam ao executar operações de certificado no PKCS nº 11. Não é necessário para operações principais.

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 obter a validação baseada em exemplo da configuração PKCS nº 11, consulte o guia de integração PKCS nº 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óximas etapas