Como Gerar CSR e KEY para Certificado SSL no Apache usando OpenSSL

Ao configurar um certificado SSL manualmente em um servidor Apache, é necessário gerar dois arquivos essenciais:

  • Arquivo .key → Chave privada do certificado
  • Arquivo .csrCertificate Signing Request, utilizado para solicitar o certificado à autoridade certificadora

⚠️ Atenção:
Não é recomendado reutilizar um CSR antigo. Sempre gere um novo par de arquivos (.key e .csr), pois o reaproveitamento pode representar um risco de segurança.


Estrutura de Diretórios para os Certificados

Antes de iniciar, crie um diretório específico para armazenar os arquivos SSL do domínio:

/etc/httpd/ssl/meudominio/novocertificado


Gerando o CSR e a Chave Privada com OpenSSL

Execute o comando abaixo no servidor:

openssl req -new -newkey rsa:2048 -nodes \
-keyout meudominio.key \
-out meudominio.csr

Durante o processo, o OpenSSL solicitará algumas informações. Utilize os dados conforme o exemplo:

  • Country Name (Código do País): BR
  • State or Province Name (Estado): Paraná
  • Locality Name (Cidade): Curitiba
  • Organization Name (Nome da Empresa): Nome da sua empresa
  • Organizational Unit Name (Setor): TI
  • Common Name (Domínio com www): www.meudominio.com.br
  • Email Address: contato@meudominio.com.br
  • Challenge Password: (deixe em branco)
  • Optional Company Name: (deixe em branco)

Arquivos Gerados

Após a execução do comando, serão criados os seguintes arquivos:

  • meudominio.csr
  • meudominio.key

Copie todo o conteúdo do arquivo .csr e cole no formulário de solicitação do certificado SSL junto à autoridade certificadora (Namecheap, GoDaddy, Cloudflare, etc.).

📌 Em alguns casos, pode ser solicitado também o envio do arquivo .key.


Arquivo CA Bundle

Após a emissão do certificado, você receberá um arquivo chamado .ca-bundle.
Renomeie-o para .txt para facilitar o uso no Apache:

meudominio.ca-bundle → meudominio.txt


Configurando o Apache para HTTPS

Redirecionando HTTP para HTTPS

<VirtualHost *:80>
    ServerAdmin contato@meudominio.com.br
    ServerName www.meudominio.com.br
    ServerAlias meudominio.com.br
    DocumentRoot /var/www/html/meudominio/

    ErrorLog /var/www/html/errors/meudominio.log
    CustomLog /var/www/html/errors/meudominio-requests.log combined

    Redirect permanent / https://meudominio.com.br
    UseCanonicalName Off
</VirtualHost>


VirtualHost HTTPS com SSL

<VirtualHost *:443>
    SSLEngine On

    SSLCertificateFile /etc/httpd/ssl/meudominio/meudominio.crt
    SSLCertificateKeyFile /etc/httpd/ssl/meudominio/meudominio.key
    SSLCACertificateFile /etc/httpd/ssl/meudominio/meudominio.txt

    ServerAdmin contato@meudominio.com.br
    ServerName www.meudominio.com.br
    ServerAlias meudominio.com.br
    DocumentRoot /var/www/html/meudominio/

    ErrorLog /var/www/html/errors/meudominio.log
    CustomLog /var/www/html/errors/meudominio-requests.log combined
</VirtualHost>


Verificando a Configuração do Apache

Antes de reiniciar o serviço, valide se não há erros de sintaxe:

apachectl configtest
# ou
httpd -t


Habilitando o Site no Apache

Crie o link simbólico para ativar o VirtualHost:

sudo ln -s /etc/httpd/sites-available/meudominio.conf \
/etc/httpd/sites-enabled/meudominio.conf


Exemplo de VirtualHost com Proxy Reverso

<VirtualHost *:80>
    ServerName app.meudominio.com.br

    ProxyPreserveHost On
    ProxyPass "/" "http://IP_DO_SERVIDOR:PORTA/"
    ProxyPassReverse "/" "http://IP_DO_SERVIDOR:PORTA/"
</VirtualHost>