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 Azure Blob Storage 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é-requisito

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 Azure Blob Storage
  • 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.

Configurando uma conta de Azure Blob Storage

Antes de usar a API PKCS nº 11 para Armazenamento de Certificados, você deve criar uma conta Azure Blob Storage. Essa conta de armazenamento conterá os objetos de certificado PKCS nº 11, que são salvos e recuperados no formato JWS.

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

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

    Screenshot de criação de um contêiner em Azure Blob Storage.

  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 Azure Blob Storage.

  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 Azure Blob Storage properties.

Configurando a 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. A próxima etapa é atribuir a função de Azure apropriada para conceder a permissão de Identidade Gerenciada para ler e gravar na conta de Blob Storage criada anteriormente. Atribua a função 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 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. A próxima etapa é atribuir a Identidade Gerenciada Atribuída ao Usuário à VM que executará seu aplicativo de armazenamento de certificados PKCS nº 11. Navegue até o recurso de VM no portal Azure, vá para a seção Security, selecione Identity e adicione a Identidade Atribuída ao 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

O comando azcloudhsm_util a seguir pode ser usado 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 o 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 do Crypto User. (por exemplo, cu1)
  • PKCS11_P com sua senha do Usuário de Criptografia. (por exemplo, user1234)
  • SIGNING_KEY_ID com a ID do par de chaves desejada (essa ID também será usada posteriormente no arquivo azcloudhsm_application.cfg)

ID da chave de assinatura Para este exemplo, vamos definir a 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

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: 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 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 Blob Storage 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 Blob Storage 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://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 nº 11 para validação baseada em exemplo de sua configuraçã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