Usar o Microsoft SignTool com o Client SDK 5 para assinar arquivos - AWS CloudHSM

Usar o Microsoft SignTool com o Client SDK 5 para assinar arquivos

Em criptografia e na infraestrutura de chave pública (PKI), as assinaturas digitais são usadas para confirmar que os dados foram enviados por uma entidade confiável. As assinaturas também indicam que os dados não foram alterados em trânsito. Uma assinatura é um hash criptografado que é gerado com a chave privada do remetente. O destinatário pode verificar a integridade dos dados descriptografando sua assinatura de hash com a chave pública do remetente. Por outro lado, o remetente é responsável por manter um certificado digital. O certificado digital demonstra a propriedade da chave privada do remetente e fornece ao destinatário a chave pública que é necessária para a descriptografia. Desde que a chave privada seja de propriedade do remetente, a assinatura será confiável. O AWS CloudHSM fornece hardware seguro validado pelo FIPS 140-2 nível 3 para você proteger essas chaves com acesso exclusivo de um único locatário.

Muitas organizações usam a Microsoft SignTool, uma ferramenta de linha de comando que assina, verifica e carimba data e hora dos arquivos para simplificar o processo de assinatura de código. Você pode usar o AWS CloudHSM para armazenar com segurança os pares de chaves até que sejam necessários pela SignTool, criando dessa forma um fluxo de trabalho que pode ser automatizado para assinatura de dados.

Os tópicos a seguir fornecem uma visão geral de como usar a SignTool com o AWS CloudHSM.

Etapa 1: configurar os pré-requisitos

Para usar a Microsoft SignTool com o AWS CloudHSM, você precisa de:

  • Uma instância de cliente do Amazon EC2 em execução em um sistema operacional Windows.

  • Uma autoridade de certificação (CA), auto-mantida ou estabelecida por um provedor de terceiros.

  • Um cluster ativo do AWS CloudHSM na mesma nuvem pública virtual (VPC) como sua instância do EC2. O cluster deve conter pelo menos um HSM.

  • Um usuário de criptografia (CU) para possuir e gerenciar chaves no cluster do AWS CloudHSM.

  • Um arquivo não assinado ou executável.

  • O Kit de desenvolvimento de software (SDK) do Microsoft Windows.

Para configurar os pré-requisitos para usarem o AWS CloudHSM com a Windows SignTool
  1. Siga as instruções na seção Getting Started (Conceitos básicos) deste guia para executar uma instância do EC2 do Windows e um cluster do AWS CloudHSM.

  2. Se você quiser hospedar seu próprio CA do Windows Server, siga as etapas 1 e 2 em Configuração do Windows Server como uma autoridade de certificação com o AWS CloudHSM. Caso contrário, continue a usar sua CA terceirizada confiável publicamente.

  3. Faça download e instale uma das seguintes versões do SDK do Microsoft Windows em sua instância do EC2 do Windows:

    O executável SignTool faz parte do recurso de instalação das Ferramentas de assinatura do SDK do Windows para aplicativos de área de trabalho. Você pode omitir outros recursos a serem instalados se não forem necessários. O local de instalação padrão é:

    C:\Program Files (x86)\Windows Kits\<SDK version>\bin\<version number>\<CPU architecture>\signtool.exe

Agora você pode usar o SDK do Microsoft Windows, o cluster do AWS CloudHSM e a CA para Criar um certificado de assinatura.

Etapa 2: criar um certificado de assinatura

Agora que você fez download do SDK do Windows para sua instância do EC2, você pode usá-lo para gerar uma solicitação de assinatura de certificado (CSR). A CSR é um certificado não assinado passado para a CA para assinatura. Neste exemplo, usamos o executável certreq incluído com o Windows SDK para gerar a CSR.

Para gerar uma CSR usando o executável certreq
  1. Se ainda não tiver feito isso, conecte-se à instância do EC2 do Windows. Para obter mais informações, consulte Conectar-se à sua instância no Guia do usuário do Amazon EC2.

  2. Crie um arquivo chamado request.inf que contenha as linhas a seguir. Substitua as informações de Subject com as de sua organização. Para obter uma explicação de cada parâmetro, consulte a Documentação da Microsoft.

    [Version] Signature= $Windows NT$ [NewRequest] Subject = "C=<Country>,CN=<www.website.com>,O=<Organization>,OU=<Organizational-Unit>,L=<City>,S=<State>" RequestType=PKCS10 HashAlgorithm = SHA256 KeyAlgorithm = RSA KeyLength = 2048 ProviderName = "CloudHSM Key Storage Provider" KeyUsage = "CERT_DIGITAL_SIGNATURE_KEY_USAGE" MachineKeySet = True Exportable = False
  3. Executar certreq.exe. Para este exemplo, salve a CSR como request.csr.

    certreq.exe -new request.inf request.csr

    Internamente, um novo par de chaves é gerado em seu cluster do AWS CloudHSM, e a chave privada do par é usada para criar a CSR.

  4. Envie a CSR à sua CA. Se estiver usando uma CA do Windows Server, siga estas etapas:

    1. Digite o seguinte comando para abrir a ferramenta CA:

      certsrv.msc
    2. Na nova janela, clique com o botão direito do mouse no nome do servidor da CA. Escolha All Tasks (Todas as tarefas) e depois escolha Submit new request (Enviar nova solicitação).

    3. Navegue até o local do request.csre escolha Open (Abrir).

    4. Navegue até a pasta Pending Requests (Solicitações pendentes) expandindo o menu Server CA (CA do servidor). Clique com o botão direito do mouse na solicitação que você acabou de criar e, em All Tasks (Todas as tarefas), escolha Issue (Problema).

    5. Agora, navegue até a pasta Issued Certificates (Certificados emitidos) (acima da pasta Pending Requests (Solicitações pendentes)).

    6. Escolha Open (Abrir) para visualizar o certificado e depois escolha a guia Details (Detalhes).

    7. Escolha Copy to File (Copiar no arquivo) para iniciar o Certificate Export Wizard (Assistente de exportação da CA). Salve o arquivo X.509 codificado por DER em um local seguro como signedCertificate.cer.

    8. Saia da ferramenta CA e use o comando a seguir, que move o arquivo do certificado para o armazenamento de certificados pessoais no Windows. Ele pode então ser usado por outras aplicações.

      certreq.exe -accept signedCertificate.cer

Agora, você pode usar o certificado importado para Assinar um arquivo.

Etapa 3: assinar um arquivo

Agora você está pronto para usar a SignTool e seu certificado importado para assinar o arquivo de exemplo. Para fazer isso, você precisa saber o hash SHA-1 do certificado ou a impressão digital. A impressão digital é usada para garantir que apenas a SignTool use certificados que são verificados pelo AWS CloudHSM. Neste exemplo, usamos o PowerShell para obter o hash do certificado. Você também pode usar a GUI da CA ou o executável certutil do SDK do Windows.

Para obter uma impressão digital do certificado e usá-lo para assinar um arquivo
  1. Abra o PowerShell como um administrador e execute o seguinte comando:

    Get-ChildItem -path cert:\LocalMachine\My

    Copie a Thumbprint que é retornada.

    O hash do certificado é retornado como a impressão digital
  2. Navegue até o diretório no PowerShell que contém o SignTool.exe. O local padrão é C:\Program Files (x86)\Windows Kits\10\bin\10.0.17763.0\x64.

  3. Finalmente, assine seu arquivo executando o comando a seguir. Se o comando for bem-sucedido, o PowerShell retornará uma mensagem de êxito.

    signtool.exe sign /v /fd sha256 /sha1 <thumbprint> /sm C:\Users\Administrator\Desktop\<test>.ps1
    O arquivo .ps1 foi assinado com êxito.
  4. (Opcional) Para verificar a assinatura no arquivo, use o seguinte comando:

    signtool.exe verify /v /pa C:\Users\Administrator\Desktop\<test>.ps1