bg-tutorials

Como Gerar um CSR no Heroku

Este tutorial mostra como gerar um CSR (Certificate Signing Request) para o Heroku usando o OpenSSL e como enviar o certificado emitido com o Heroku CLI.

O Heroku não possui um formulário de CSR integrado à própria plataforma, portanto a solicitação e a chave privada correspondente são geradas fora da plataforma (na sua máquina local Linux, macOS ou Windows, ou em qualquer shell com OpenSSL disponível). Depois que a Autoridade Certificadora emitir o certificado, você o combina com a cadeia intermediária e o envia por meio do heroku certs:add.

Você realmente precisa de um CSR no Heroku?

Para a maioria das aplicações Heroku, a resposta é não. O Automated Certificate Management (ACM) do Heroku provisiona e renova automaticamente um certificado gratuito Let’s Encrypt para cada domínio personalizado da aplicação, sem necessidade de gerar CSR nem de manter um calendário de renovações. O ACM está disponível nos dynos Eco, Basic, Standard e Performance. Se o ACM atender às suas necessidades, ative-o com um único comando de CLI:

heroku certs:auto:enable -a your-app-name

Gere um CSR e use um certificado autogerido (de terceiros) apenas quando uma das situações a seguir se aplicar:

  • Você precisa de um certificado wildcard. O ACM emite apenas certificados Let’s Encrypt de nome único por domínio personalizado, não *.example.com.
  • Você precisa de validação OV ou EV. O ACM é apenas DV.
  • Sua política ou contrato exige uma Autoridade Certificadora específica diferente da Let’s Encrypt.
  • Você já possui um certificado válido e deseja reimplantá-lo no Heroku sem reemiti-lo.
  • Você precisa de um certificado multidomínio (SAN) que abranja nomes de host que não estão todos nesta aplicação Heroku.

Se nenhuma das situações acima se aplicar, pule o trabalho com o CSR e use o ACM. Para o próprio fluxo de instalação, consulte nosso guia sobre como instalar um certificado SSL no Heroku.

Noções básicas de SSL do Heroku a saber antes de gerar o CSR

Algumas restrições da plataforma determinam como o CSR e a chave precisam ser:

  • SNI é o padrão. Toda nova aplicação usa o Heroku SSL, que depende do Server Name Indication, de modo que um único endpoint Heroku pode servir múltiplos nomes de host HTTPS com seus próprios certificados. O antigo add-on SSL Endpoint foi descontinuado em 2021 (o novo provisionamento foi interrompido em 14 de maio de 2021; o produto chegou ao fim da vida útil em 18 de outubro de 2021) e não está disponível em novas aplicações.
  • Apenas chaves RSA. A stack SSL do Heroku aceita chaves privadas RSA (2048 bits ou maiores). Chaves ECDSA não são suportadas para envios manuais de certificados, portanto gere o CSR com -newkey rsa:2048 (ou rsa:3072 / rsa:4096 se sua política exigir uma chave maior).
  • É necessário o PEM da cadeia completa (fullchain). O Heroku espera um único arquivo PEM com o certificado da entidade final primeiro e o pacote de CA intermediária concatenado logo após. Um certificado somente folha será rejeitado durante o envio.
  • Chave privada não criptografada. A chave enviada junto com o certificado não pode estar protegida por senha. O comando OpenSSL abaixo usa -nodes para gravar a chave em PEM sem criptografia.
  • Pré-requisito de domínio personalizado. O Heroku não vinculará nenhum certificado (ACM ou manual) até que o domínio personalizado seja registrado na aplicação por meio de heroku domains:add e apontado para o alvo DNS *.herokudns.com específico do domínio.

Gere o CSR para o Heroku com o OpenSSL

Se você já gerou seu CSR e recebeu o certificado assinado da sua Autoridade Certificadora, avance para Enviar o certificado para o Heroku. Existem duas maneiras de criar um CSR para uma implantação no Heroku:

  • Use o Gerador de CSR da SSL Dragon: ele produz tanto o CSR quanto a chave privada RSA correspondente no seu navegador a partir de um formulário curto; depois você cola o CSR durante seu pedido de SSL.
  • Gere o CSR você mesmo com o OpenSSL, seja na sua máquina local ou em qualquer shell onde o OpenSSL esteja instalado. As etapas abaixo cobrem esse caminho.

Etapa 1: Abra um shell com o OpenSSL

O OpenSSL já vem instalado em toda distribuição Linux recente e no macOS. No Windows, instale-o (veja nosso guia sobre como instalar o OpenSSL no Windows) e execute o comando no PowerShell ou no Prompt de Comando. Abra um terminal em qualquer pasta na qual você tenha permissão de escrita: o OpenSSL criará ali os arquivos do CSR e da chave em texto simples, para que você possa movê-los para fora da máquina quando terminar.

Etapa 2: Execute o comando OpenSSL

Execute o comando a seguir no seu shell. Substitua yourdomain pelo seu domínio real (por exemplo, example.com):

openssl req -new -newkey rsa:2048 -nodes 
  -keyout yourdomain.key -out yourdomain.csr 
  -addext "subjectAltName = DNS:yourdomain.com,DNS:www.yourdomain.com"

O que cada flag faz:

  • -new cria um novo CSR.
  • -newkey rsa:2048 gera uma nova chave privada RSA de 2048 bits junto com o CSR. Use rsa:3072 ou rsa:4096 se sua política exigir uma chave maior. Não mude para ECDSA: o Heroku rejeita chaves ECC em envios manuais.
  • -nodes grava a chave sem senha (no OpenSSL 3.x a flag equivalente é -noenc; ambas funcionam). O Heroku rejeitará uma chave privada criptografada durante o heroku certs:add.
  • -keyout e -out são os caminhos de saída da chave e do CSR.
  • -addext “subjectAltName=DNS:…” insere diretamente os Subject Alternative Names (SANs) (requer OpenSSL 1.1.1 ou posterior). Todo navegador moderno e toda CA exigem a extensão SAN, mesmo para certificados de domínio único, portanto inclua tanto o domínio raiz (yourdomain.com) quanto qualquer variante www que você pretenda servir no Heroku. Para um wildcard, liste também *.yourdomain.com.

Etapa 3: Preencha os detalhes do CSR

O OpenSSL solicitará os campos de identidade do certificado. Preencha-os da seguinte forma:

  • Country Name: o código ISO de duas letras do país onde sua organização está legalmente registrada (por exemplo, US).
  • State or Province Name: o nome completo do estado ou região (por exemplo, Nevada). Não abrevie.
  • Locality Name: a cidade (por exemplo, Las Vegas).
  • Organization Name: o nome legal da sua organização. Para um certificado de Validação de Domínio, esse campo não é validado e pode ser deixado em branco, mas não simplesmente pressione Enter: o OpenSSL preencherá o valor padrão definido na sua configuração, e a configuração padrão vem com Internet Widgits Pty Ltd, o que acabaria constando no seu CSR. Digite um único ponto (.) para deixá-lo genuinamente vazio.
  • Organizational Unit Name: descontinuado pelo CA/Browser Forum, portanto deixe em branco.
  • Common Name: o nome de domínio totalmente qualificado (FQDN) que você deseja proteger, por exemplo www.yourdomain.com. Para um wildcard, digite *.yourdomain.com. O Common Name também deve constar na lista de SAN.
  • Email Address: um endereço de e-mail de contato válido (ou deixe em branco).
  • A challenge password e An optional company name: deixe ambos em branco. Pressione Enter para pular.

O OpenSSL grava dois arquivos no diretório atual:

  • yourdomain.csr: o CSR que você envia à sua Autoridade Certificadora.
  • yourdomain.key: a chave privada. Mantenha esse arquivo em sigilo e faça backup dele; você precisará dele novamente ao enviar o certificado emitido para o Heroku.

Etapa 4: Envie o CSR à sua Autoridade Certificadora

Abra o arquivo yourdomain.csr em qualquer editor de texto e copie o bloco inteiro, incluindo os marcadores -----BEGIN CERTIFICATE REQUEST----- e -----END CERTIFICATE REQUEST-----. Cole-o no campo de CSR durante seu pedido de SSL.

Antes de enviar, você pode verificar o conteúdo do CSR com nosso Decodificador de CSR: ele mostra o Common Name, a lista de SAN, o tipo de chave e o comprimento da chave, para que você identifique erros de digitação antes que a CA o faça.

Complete as etapas de validação solicitadas pela CA (por DNS, arquivo ou e-mail). Assim que o certificado for emitido, a CA enviará o certificado assinado da entidade final (geralmente um arquivo .crt) e o pacote de CA intermediária (geralmente um arquivo .ca-bundle). Continue com o envio abaixo.

Envie o certificado para o Heroku

Etapa 1: Registre seu domínio personalizado na aplicação

O Heroku não vinculará um certificado até que o domínio personalizado esteja registrado na aplicação. Em um terminal autenticado no Heroku CLI, execute:

heroku domains:add www.example.com -a your-app-name

Substitua www.example.com pelo seu domínio e your-app-name pela sua aplicação Heroku. Repita o comando para quaisquer nomes de host adicionais (por exemplo, um domínio raiz simples ou um segundo subdomínio). O comando retorna um alvo DNS específico do domínio, como quiet-fire-1234.herokudns.com: você apontará seu provedor de DNS para esse valor na Etapa 4.

Etapa 2: Monte o arquivo PEM da cadeia completa

O Heroku espera um único arquivo PEM com o certificado da entidade final primeiro e a cadeia intermediária logo após. No Linux ou macOS, concatene os arquivos com cat:

cat yourdomain.crt yourdomain.ca-bundle > server.crt

No Windows, abra ambos os arquivos em um editor de texto simples (Notepad++ ou VS Code, não o Word) e cole o conteúdo do arquivo .ca-bundle logo abaixo do conteúdo do arquivo .crt, nessa ordem, sem linha em branco entre os blocos. Salve o arquivo combinado como server.crt. Se sua CA já tiver enviado a cadeia dentro de um único PEM (com o certificado folha no topo), você pode usar esse arquivo como está.

Etapa 3: Envie o certificado com o Heroku CLI

Para uma instalação totalmente nova, envie o PEM da cadeia completa e a chave privada correspondente com certs:add:

heroku certs:add server.crt yourdomain.key -a your-app-name

Se você estiver substituindo um certificado existente na mesma aplicação (por exemplo, durante a renovação), use certs:update em vez disso, para que o Heroku mantenha o mesmo alvo DNS:

heroku certs:update server.crt yourdomain.key -a your-app-name

Prefere o painel? Abra a aplicação, vá em Settings > Domains and certificates, clique em Configure SSL, escolha Manually, arraste o arquivo combinado server.crt para o campo do certificado e o arquivo .key para o campo da chave privada, depois clique em Next e confirme.

Se você vir um Internal server error durante o envio, quase sempre isso significa que o Heroku CLI da sua máquina está desatualizado. Execute heroku update e tente novamente. Se o erro persistir, confirme que o arquivo de certificado é uma cadeia completa em formato PEM (entidade final primeiro, intermediários depois) e que a chave privada é a chave RSA correspondente ao CSR que você enviou.

Etapa 4: Aponte o DNS para o alvo DNS do Heroku

Liste seus domínios e copie o alvo DNS que o Heroku retornou para cada um:

heroku domains -a your-app-name

No seu provedor de DNS, crie um registro por domínio:

  • Subdomínio (por exemplo, www.example.com): crie um registro CNAME apontando para o alvo DNS do Heroku.
  • Domínio raiz / apex (por exemplo, example.com): um CNAME não é permitido no domínio raiz de acordo com a especificação de DNS, portanto use um registro ALIAS, ANAME ou CNAME achatado (flattened-CNAME) (o nome exato depende do seu provedor de DNS) apontando para o mesmo alvo DNS do Heroku. Se seu provedor de DNS não suportar nenhum desses tipos, migre o DNS para um que suporte (Cloudflare, DNSimple, Route 53, NS1, easyDNS e similares).

Não aponte o DNS para your-app-name.herokuapp.com nem para nenhum nome de host *.herokussl.com: a vinculação manual não será roteada corretamente por nenhum desses. Sempre use o alvo DNS específico do domínio atribuído pelo Heroku.

Verifique o CSR e o certificado implantado

Antes de enviar o CSR, decodifique-o localmente para confirmar o Common Name, a lista de SAN, o tipo de chave e o comprimento da chave:

openssl req -in yourdomain.csr -noout -text

Ou cole o CSR em nosso Decodificador de CSR para obter as mesmas informações diretamente no seu navegador.

Após o envio, confirme que o certificado está instalado e servindo tráfego. Pela CLI:

heroku certs:info -a your-app-name

A saída lista o certificado, a CA emissora, a data de expiração e os domínios que ele cobre. Em seguida, abra seu site via https:// em um navegador, verifique se o cadeado está presente e execute uma varredura externa mais aprofundada com nosso Verificador de SSL para confirmar que a cadeia de certificados está completa e que os protocolos estão configurados corretamente.

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

Uma imagem detalhada de um dragão em voo
Escrito por

Redator de conteúdo experiente, especializado em certificados SSL. Transformação de tópicos complexos de segurança cibernética em conteúdo claro e envolvente. Contribua para melhorar a segurança digital por meio de narrativas impactantes.

Avatar of Sergiu Rosca
Technical Review by Sergiu Rosca

Sergiu Rosca is the core web developer behind SSL Dragon. He manages the technical infrastructure, platform performance, and backend integrations that keep the site running smoothly and securely. At SSL Dragon, Sergiu shares practical insights on web development, site optimization, and technical troubleshooting.

All SSL Dragon installation guides are tested on live server environments and undergo a strict peer-review process to ensure your infrastructure remains secure. Read our full Editorial Policy.