Como criar Certificados e SSL válidos para sites em desenvolvimento no XAMPP/ GNU/Linux – Parte 1

A principal razão para você ter o seu ambiente local de desenvolvimento no XAMPP com um SSL válido é de aproximá-lo do ambiente de Produção (online).

Com o funcionamento do certificado, você poderá perceber os alertas de conteúdo misto, redirecionamentos e rotas sem HTTPS ainda em desenvolvimento. E se algum software exigir o SSL para funcionar, o processo se dá sem erro.

Inicialmente, o processo se dá em duas etapas distintas:

  1. Criação de uma Autoridade Certificadora (em inglês usa-se a sigla CA de Certificate Authority); e a

  2. Criação do certificado de domínio (site local) com a sua CA. Esta última etapa se repetirá toda vez que você precisar certificar um novo domínio.

Como organizo estes arquivos

Eu tenho um diretório (pasta) de fácil acesso que tem toda a configuração estendida do meu servidor Apache/XAMPP. Neste diretório criei uma pasta “ssl” e dentro dela outra chamada “CA”. Ficou assim:

XamppConfig
└── ssl
    └── CA     
├── httpd-vhosts.conf
└── httpd-vhosts-ssl.conf

Chave Privada da Autoridade Certificadora

A primeira parte do processo é criar uma Autoridade Certificadora.

Ela certificará cada domínio (site) de desenvolvimento que você venha criar. Este passo só é necessário uma única vez. Este certificado raiz será o guarda-chuva para os outros certificados serem validados no navegador.

Abrindo o terminal na pasta “ssl”, vamos criar a Chave Privada da Certificadora (localhost.key) e salvá-la na pasta “CA” com este comando:

sudo openssl genrsa -des3 -out CA/localhost.key 2048

Ao rodar o comando, o Terminal perguntará:
Enter pass phrase for localhost.key:
Então definirei como “123456” e depois confirmarei a senha. Toda vez que utilizar esta chave, iremos responder com esta senha.

Identificação da Autoridade Certificadora no Modo Não Interativo

Depois de criar a Chave Privada, iremos criar então um arquivo PEM (localhost.pem), contendo informações da Autoridade Certificadora e a sua chave privada. Este arquivo, codificado em ASCII (Base64)1, será salvo na pasta “CA”.

A criação deste arquivo tem duas opções: uma Interativa (com prompt no Terminal para responder) e a outra Não Interativa2, passando as respostas por meio da opção -subj do comando. Esta última opção muito mais rápida.

Utilizando a opção -subj, é recomendável prepará-lo num editor de texto antes copiar e colar no terminal.

Segue o comando e em seguida explico alguns detalhes:

sudo openssl req -x509 -new -nodes -key CA/localhost.key -sha256 -days 1825 -out CA/localhost.pem -subj "/C=BR/ST=RJ/L=Rio de Janeiro/O=Vinicius Braga Ink/OU=Web Desenvolvimento/CN=localhost"
-days
O comando -days 1825 gera uma validade de 5 anos. Então somente daqui a 5 anos que você precisará refazer este processo de criação de uma Chave Pública com a mesma chave privada (localhost.key). Você pode modificar este valor para o tempo que achar melhor.
-key
Como criamos anteriormente a chave da CA em um diretório chamado CA, nós reproduzimos este caminho (path): CA/localhost.key
-out
A chave pública ficará no mesmo diretório da chave privada da CA, por isso o caminho: CA/localhost.pem.

Importante: Este arquivo PEM da certificadora deve ser carregado no seu navegador para que ele possa aceitar como válidos os certificados de domínio criados por ela.

Das Informações

As perguntas do certificado estão na tabela abaixo com um exemplo de resposta e seu campo correspondente na opção -subj.

Pergunta Exemplo Campo -subj
Country BR /C=
State RJ /ST=
Location Rio de Janeiro /L=
Organization Vinicius Braga Ink /O=
Organizational Unit Web Desenvolvimento /OU=
Common Name localhost /CN=

O Common Name é o campo mais tricky na criação do certificado. Este campo determina se vai funcionar ou não um certificado. Neste caso da Autoridade Certificadora (CA), ele será localhost. Mais tarde na criação do certificado do domínio, irei detalhar as suas sutilezas.

Arquivo de Identificação da CA no Modo Interativo

Ao rodar o comando abaixo, o terminal fará as perguntas na ordem descrita na tabela anteriormente apresentada:

sudo openssl req -x509 -new -nodes -key CA/localhost.key -sha256 -days 1825 -out CA/localhost.pem

Conclusão da 1ª Etapa

E com isto chegamos a conclusão da criação da Chave Pública e Arquivo de Identificação da Autoridade Certificadora. O diretório ficou com a seguinte organização:

XamppConfig
└── ssl
    └── CA
        ├── localhost.key
        └── localhost.pem        
├── httpd-vhosts.conf
└── httpd-vhosts-ssl.conf

O próximo passo será a criação de um Certificado para um domínio específico no XAMPP, e como exemplo inicial, iremos criar o certificado SSL do domínio https://localhost que acessa o PHPMyAdmin e outras funcionalidades do XAMPP. Até lá.


  1. Uma boa explicação para os diferentes significados das extensões tem neste texto: DER vs. CRT vs. CER vs. PEM Certificates and How To Convert Them 

  2. O uso do modo não interativo é bem explicado no site ShellHacks no artigo HowTo: Create CSR using OpenSSL Without Prompt (Non-Interactive) 

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Topo da Página