bg-tutorials

Como Gerar um CSR no Postfix

Este guia mostra como gerar uma CSR (Certificate Signing Request) no Postfix usando a linha de comando do OpenSSL. O próprio Postfix não gera chaves ou CSRs; ele utiliza os ficheiros produzidos pelo OpenSSL e faz referência a eles a partir de /etc/postfix/main.cf. Você executa um único comando que cria dois ficheiros ao mesmo tempo: uma chave privada que permanece no servidor e a CSR que você envia à sua Autoridade Certificadora (CA).

A CSR codifica o nome de host que o seu MTA apresenta no STARTTLS, os detalhes da sua organização e a metade pública da chave. A chave privada correspondente nunca sai do servidor. Se você a perder, o certificado emitido torna-se inutilizável e é preciso começar tudo de novo.

Pré-requisitos

  • Acesso root ou sudo ao servidor que executa o Postfix.
  • OpenSSL instalado. Ele vem incluído no sistema base de todas as principais distribuições Linux; verifique com openssl version.
  • O nome de host de correio totalmente qualificado que deseja no certificado, por exemplo mail.example.com. Este deve corresponder ao registo MX ao qual os clientes se ligam via STARTTLS, não ao domínio raiz simples.

Passo 1: Prepare um diretório para a chave e a CSR

Mantenha o material TLS do Postfix no seu próprio diretório sob /etc/postfix/ para que as permissões sejam fáceis de gerir. Crie-o e restrinja-o ao root:

sudo mkdir -p /etc/postfix/ssl
sudo chmod 700 /etc/postfix/ssl
cd /etc/postfix/ssl

Você irá gerar a chave e a CSR dentro deste diretório e, em seguida, fazer referência a elas em main.cf depois que a CA emitir o certificado.

Passo 2: Gere a chave privada e a CSR

Execute o comando abaixo. Ele cria a chave privada e a CSR num único passo e inclui o Subject Alternative Name (SAN) exigido pelos browsers modernos, clientes de e-mail e CAs. O SAN deve listar o nome de host de correio (aquele para o qual o seu registo MX aponta), não o domínio raiz simples:

sudo openssl req -new -newkey rsa:2048 -nodes 
-keyout /etc/postfix/ssl/mail.example.com.key 
-out /etc/postfix/ssl/mail.example.com.csr 
-subj "/C=US/ST=YourState/L=YourCity/O=YourCompany/CN=mail.example.com" 
-addext "subjectAltName=DNS:mail.example.com"

Aqui está o que cada parte faz:

  • req -new cria um novo pedido de assinatura de certificado.
  • -newkey rsa:2048 gera uma nova chave privada RSA de 2048 bits. 2048 bits é o mínimo atual para certificados públicos; pode usar rsa:4096 para uma chave maior.
  • -nodes deixa a chave privada sem cifragem (sem frase-passe), para que o Postfix possa carregá-la ao arrancar sem pedir confirmação.
  • -keyout grava a chave privada. Mantenha este ficheiro privado e nunca o envie a ninguém, incluindo à CA.
  • -out grava a CSR que você envia à CA.
  • -subj preenche os campos do sujeito diretamente na linha de comando, para que o comando seja executado sem perguntas interativas. Defina o CN (Common Name) como o seu nome de host de correio.
  • -addext “subjectAltName=…” adiciona a entrada SAN. As CAs emitem certificados com base na lista SAN, portanto o nome de host de correio deve aparecer aqui.

Substitua mail.example.com pelo nome de host real ao qual os clientes se ligam (geralmente o mesmo nome do seu registo MX) e edite os valores de -subj para corresponder à sua organização. O código de país de duas letras (C) deve estar em maiúsculas, por exemplo US ou GB. Para um certificado com validação de domínio (DV), os campos de organização não são verificados, mas o comando ainda precisa de valores válidos. O OpenSSL moderno assina a CSR com SHA-256 por padrão, que é o que todas as CAs públicas exigem.

Se preferir preencher os campos interativamente em vez de usar -subj, remova essa linha e o OpenSSL irá pedir-lhe cada valor:

sudo openssl req -new -newkey rsa:2048 -nodes 
-keyout /etc/postfix/ssl/mail.example.com.key 
-out /etc/postfix/ssl/mail.example.com.csr 
-addext "subjectAltName=DNS:mail.example.com"

Quando solicitado, deixe a challenge password e o nome de empresa opcional em branco, pressionando Enter. As CAs ignoram esses campos, e uma challenge password causa problemas mais tarde.

Cobrir mais do que um nome de host

Se a mesma instância do Postfix responder por mais de um nome (por exemplo, tanto mail.example.com como smtp.example.com, ou um certificado partilhado para correio e webmail), liste todos os nomes de host no valor SAN, separados por vírgulas:

-addext "subjectAltName=DNS:mail.example.com,DNS:smtp.example.com,DNS:webmail.example.com"

O Common Name deve continuar a ser o nome de host de correio principal. Adicionar o domínio raiz simples ao SAN só é útil se os clientes de e-mail se ligarem diretamente a ele; se o seu registo MX apontar para um subdomínio, não precisa do domínio raiz no certificado.

Prefere uma chave ECDSA?

As chaves ECDSA são mais pequenas e mais rápidas do que as RSA com o mesmo nível de segurança, e são suportadas por todos os clientes de e-mail e CAs atuais. Para gerar uma chave e CSR P-256 (prime256v1), substitua o argumento -newkey:

sudo openssl req -new -newkey ec -pkeyopt ec_paramgen_curve:prime256v1 -pkeyopt ec_param_enc:named_curve -nodes 
-keyout /etc/postfix/ssl/mail.example.com.key 
-out /etc/postfix/ssl/mail.example.com.csr 
-subj "/C=US/ST=YourState/L=YourCity/O=YourCompany/CN=mail.example.com" 
-addext "subjectAltName=DNS:mail.example.com"

Passo 3: Proteja a chave privada

Restrinja a chave privada para que apenas o root a possa ler. O Postfix abre o seu material TLS antes de abandonar privilégios, portanto a propriedade root e o modo 600 são ambos corretos e obrigatórios:

sudo chown root:root /etc/postfix/ssl/mail.example.com.key
sudo chmod 600 /etc/postfix/ssl/mail.example.com.key

O ficheiro CSR não é secreto (contém apenas a chave pública e os seus detalhes de sujeito), mas mantê-lo no mesmo diretório restrito mantém a organização mais clara.

Passo 4: Verifique a CSR

Antes de enviar o pedido, confirme que ele contém o nome de host e o SAN corretos e que a sua assinatura é válida. Este comando imprime o conteúdo decodificado e verifica a assinatura localmente:

openssl req -noout -text -verify -in /etc/postfix/ssl/mail.example.com.csr

Procure por verify OK na saída, verifique se a linha Subject mostra o seu nome de host de correio como Common Name, e confirme que a secção X509v3 Subject Alternative Name lista todos os nomes de host esperados. Se um SAN estiver em falta, gere novamente a CSR com o valor -addext correto: uma CA não pode adicionar nomes de host depois da emissão. Também pode colar a CSR na nossa ferramenta online CSR Decoder para verificar estes campos num navegador.

Passo 5: Envie a CSR

Abra o ficheiro CSR e copie todo o seu conteúdo, incluindo as linhas BEGIN e END:

cat /etc/postfix/ssl/mail.example.com.csr

O bloco tem este aspeto. Copie tudo desde a primeira até à última linha, incluindo os cinco hífenes de cada lado dos marcadores BEGIN e END:

-----BEGIN CERTIFICATE REQUEST-----
MIIC...base64-encoded data...AB
-----END CERTIFICATE REQUEST-----

Cole esse bloco no seu formulário de encomenda SSL. Depois de a CA validar a CSR e emitir o certificado, siga as nossas instruções de instalação de SSL no Postfix para o implementar. Mantenha o ficheiro .key no servidor: você precisa dele juntamente com o certificado emitido para servir STARTTLS, e nunca deve enviá-lo à CA ou a mais ninguém.

Se preferir não usar a linha de comando, crie o pedido com a nossa CSR Generator e cole o resultado na sua encomenda. O gerador devolve uma chave privada correspondente que você coloca no mesmo caminho no servidor.

Onde os ficheiros ficam no Postfix

Para contexto, é assim que os ficheiros que você acabou de gerar são integrados no Postfix depois de a CA devolver o certificado e o intermediário (CA bundle). No Postfix 3.4 e versões mais recentes, a forma de diretiva única recomendada utiliza um ficheiro PEM que contém a chave privada seguida da cadeia completa de certificados:

cat mail.example.com.key mail.example.com.crt intermediate.pem 
> /etc/postfix/ssl/mail.example.com.chain.pem
sudo chmod 600 /etc/postfix/ssl/mail.example.com.chain.pem

Depois, em /etc/postfix/main.cf:

smtpd_tls_chain_files = /etc/postfix/ssl/mail.example.com.chain.pem
smtpd_tls_security_level = may

Em versões do Postfix anteriores à 3.4, use o par legado de diretivas, com a chave e um certificado com cadeia completa mantidos em ficheiros separados:

smtpd_tls_cert_file = /etc/postfix/ssl/mail.example.com.fullchain.crt
smtpd_tls_key_file  = /etc/postfix/ssl/mail.example.com.key
smtpd_tls_security_level = may

O tutorial completo de instalação, incluindo o serviço de submissão na porta 587 e a verificação com OpenSSL, está disponível no nosso guia de instalação de SSL no Postfix.

Gerar uma CSR noutras plataformas de e-mail

Está a usar um servidor ou gateway de e-mail diferente? Consulte os nossos outros guias de 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

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.