Este guia explica como uma Certificate Signing Request (CSR) é gerada para um certificado de assinatura de código quando você trabalha com OpenSSL e, tão importante quanto isso, quando essa abordagem deixa de ser aplicável. Desde 1º de junho de 2023, as regras para chaves de assinatura de código mudaram, portanto o antigo fluxo de trabalho apenas por software com OpenSSL não é mais aceito pelas Autoridades Certificadoras para um certificado de assinatura de código de confiança pública. Leia primeiro o requisito abaixo e, em seguida, use o caminho que corresponde à forma como sua chave está armazenada.
Importante: as chaves de assinatura de código devem residir em hardware
De acordo com os Requisitos Básicos de Assinatura de Código do CA/Browser Forum, em vigor desde 1º de junho de 2023, a chave privada de todo certificado de assinatura de código de confiança pública, tanto o padrão (OV) quanto o de Validação Estendida (EV), deve ser gerada e armazenada em um módulo criptográfico de hardware que atenda ao padrão FIPS 140-2 Level 2, Common Criteria EAL4+, ou um padrão equivalente. A chave deve ser não exportável. A assinatura de código EV sempre exigiu hardware; esta regra estendeu a mesma proteção aos certificados padrão.
A consequência prática: uma chave privada e uma CSR geradas puramente por software, com OpenSSL simples em um notebook ou servidor, não são mais aceitas para a emissão de um certificado de assinatura de código de confiança pública. As Autoridades Certificadoras deixaram de oferecer suporte à geração de chaves pelo navegador e a CSRs por software para esses produtos. Sua chave agora reside em um destes locais:
- Um token de hardware enviado a você (por exemplo, uma YubiKey ou um eToken SafeNet/Thales). Com o método de entrega token + envio, a Autoridade Certificadora gera a chave no dispositivo e cuida da CSR, portanto você não cria uma com OpenSSL.
- Um Módulo de Segurança de Hardware (HSM) sob seu controle, local ou baseado em nuvem. Aqui você gera a chave dentro do HSM e produz uma CSR mais uma atestação de chave que comprova que a chave foi criada em hardware.
- Um serviço de assinatura em nuvem que mantém a chave em um HSM compatível em seu nome.
Escolha sua rota de acordo com a forma como pretende receber e armazenar o certificado. Para uma visão geral, consulte o guia métodos de entrega de assinatura de código. Para as etapas de CSR e atestação baseadas em hardware, siga o guia que corresponde ao seu dispositivo:
Se você usar um HSM diferente, gere a CSR com as ferramentas desse fornecedor para que a chave permaneça em hardware. O comando req do OpenSSL mostrado mais adiante ainda desempenha um papel nesses fluxos de trabalho quando o OpenSSL controla o HSM por meio de um provedor ou engine, mas ele deve fazer referência a uma chave que já reside no módulo, nunca a um arquivo de chave de software simples para um certificado de confiança pública.
Quando o método de software OpenSSL ainda se aplica
O fluxo de trabalho por software abaixo produz um arquivo de chave em disco. Isso é aceitável apenas em casos que não sejam um certificado de assinatura de código de confiança pública, como:
- Assinatura interna ou de teste com uma CA privada/empresarial, onde sua própria política, e não as regras públicas do CA/Browser Forum, rege o armazenamento da chave.
- Aprender a estrutura de comandos do OpenSSL antes de migrar para um token ou HSM.
- Preparar os detalhes do assunto e a sintaxe de comando que você reutilizará ao gerar a CSR real com sua chave de hardware.
Não envie uma chave gerada por software e uma CSR a uma Autoridade Certificadora pública para um certificado de assinatura de código OV ou EV. Ela será rejeitada. Com esse limite esclarecido, aqui está o processo do OpenSSL e os comandos envolvidos.
1. Baixe e instale o OpenSSL
Se o OpenSSL ainda não estiver no seu computador, baixe uma versão atual (OpenSSL 3.x ou posterior) para o seu sistema operacional e instale-a. O macOS e a maioria das distribuições Linux já vêm com OpenSSL; no Windows, você normalmente instala uma versão de terceiros. Confirme a instalação e a versão com:
openssl version
2. Abra um terminal e carregue o OpenSSL
No Windows, pressione a tecla Windows + R, digite cmd e pressione Enter. Para comandos que gravam arquivos em pastas protegidas, execute o Prompt de Comando como administrador: clique com o botão direito no ícone do Prompt de Comando e escolha Executar como administrador. Você também pode digitar cmd na pesquisa da barra de tarefas e abrir o Prompt de Comando a partir dali. No macOS ou Linux, abra o aplicativo de terminal.
Se o binário do OpenSSL não estiver no caminho do sistema no Windows, primeiro navegue até a pasta de instalação, usando o caminho que corresponde à sua versão:
cd OpenSSL-Win32bin
cd "Program FilesOpenSSL-Win64bin"
3. Gere a chave privada e a CSR
Primeiro, gere a chave privada. Certificados de assinatura de código exigem uma chave forte: use RSA de 3072 bits (ou maior), que é o mínimo comum para assinatura de código, ou uma chave ECDSA na curva P-256. Para criar uma chave RSA de 3072 bits:
openssl genrsa -out code_signing_key.key 3072
Em seguida, gere a CSR a partir dessa chave. O OpenSSL usa SHA-256 para a assinatura da requisição por padrão nas versões atuais:
openssl req -new -key code_signing_key.key -out code_signing_csr.txt
4. Preencha os campos da CSR
O OpenSSL solicita os detalhes que identificam o titular do certificado. Insira informações precisas e atuais que correspondam aos registros legais da sua organização, pois a CA irá validá-los. Substitua os exemplos pelos seus próprios dados:
- País (C): o código de duas letras do país onde sua empresa está registrada ou onde você reside, por exemplo US.
- Estado ou Província (ST): o nome completo do estado ou província, por exemplo California.
- Localidade (L): a cidade onde sua empresa está registrada, por exemplo San Jose.
- Nome da Organização (O): o nome oficial e legal da sua organização, ou seu nome legal completo se o certificado for para uma pessoa física, por exemplo GPI Holding LLC.
- Unidade Organizacional (OU): o departamento que solicita o certificado, por exemplo IT. Este campo é opcional.
- Nome Comum (CN): o nome legal da sua organização, ou seu nome completo para um certificado de pessoa física. Para assinatura de código, o Nome Comum é a identidade que aparece como o editor.
- Endereço de e-mail: um endereço de e-mail de contato válido.
Você pode deixar em branco os campos opcionais de senha de desafio e nome da empresa: basta pressionar Enter nessas solicitações.
Você também pode combinar as etapas 3 e 4 em um único comando. A flag -subj fornece o assunto diretamente para que o OpenSSL não solicite as informações, e -nodes mantém a chave sem criptografia no disco (o OpenSSL 3.x renomeou essa flag para -noenc, mas -nodes ainda funciona). Observe que o valor usa aspas retas, não curvas, e toda a string está delimitada por um único par de aspas:
openssl req -new -newkey rsa:3072 -nodes -keyout code_signing_key.key -out code_signing_csr.txt -subj "/C=US/ST=California/L=San Jose/O=GPI Holding LLC/OU=IT/CN=GPI Holding LLC"
5. Verifique a CSR
Antes de enviar qualquer coisa, confirme se a CSR é válida e se seus detalhes estão corretos. Este comando imprime o assunto decodificado e verifica a assinatura da requisição:
openssl req -noout -text -verify -in code_signing_csr.txt
Verifique se a linha Subject lista o país, a organização e o nome comum exatamente como pretendido, se o tamanho da chave pública é de 3072 bits ou mais (ou uma chave ECDSA), e se o algoritmo de assinatura é SHA-256. Você também deverá ver uma mensagem de verify OK, que confirma que a CSR foi assinada pela sua chave privada correspondente.
6. Mova a chave privada e a CSR para um diretório seguro
Mova a chave privada e a CSR para fora da pasta do OpenSSL, colocando-as em um diretório sob seu controle. Mantenha a chave privada em segredo e nunca a compartilhe com ninguém fora da sua organização: qualquer pessoa que a possua pode assinar software em seu nome. No Windows, crie uma pasta e mova os arquivos para ela:
md c:codesigningcertificates
move code_signing_key.key c:codesigningcertificates
move code_signing_csr.txt c:codesigningcertificates
7. Envie a CSR à sua CA
Abra o arquivo da CSR em qualquer editor de texto simples, como o Bloco de Notas, e copie todo o seu conteúdo, incluindo as linhas —–BEGIN CERTIFICATE REQUEST—– e —–END CERTIFICATE REQUEST—–, para o formulário de inscrição durante o pedido do seu certificado. Um bloco de CSR se parece com isto:
-----BEGIN CERTIFICATE REQUEST-----
MIICvDCCAaQCAQAw...
...base64 encoded request...
-----END CERTIFICATE REQUEST-----
Lembre-se da regra apresentada no início deste guia: para um certificado de assinatura de código de confiança pública, a CSR que você enviar deve corresponder a uma chave gerada e mantida em hardware compatível. Se você gerou uma chave por software com as etapas acima, use-a apenas para assinatura interna ou de teste. Para um pedido junto a uma CA pública, gere a CSR a partir do seu token ou HSM seguindo o guia da YubiKey ou do Luna HSM, ou deixe que a CA gere a chave quando você escolher o método de entrega token + envio.
Para a sintaxe geral do OpenSSL além da criação de CSR, a referência de comandos OpenSSL é um complemento útil. Você também pode explorar mais tutoriais de OpenSSL e tutoriais de assinatura de código, ou conhecer outras formas de gerar uma CSR.
Economize 10% em certificados SSL ao fazer seu pedido hoje!
Emissão rápida, criptografia forte, 99,99% de confiança no navegador, suporte dedicado e garantia de reembolso de 25 dias. Código do cupom: SAVE10

