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:
-
Criação de uma Autoridade Certificadora (em inglês usa-se a sigla CA de Certificate Authority); e a
- 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 (certificadora.key) e salvá-la na pasta “CA” com este comando:
openssl genrsa -des3 -out CA/certificadora.key 2048
Ao rodar o comando, o Terminal perguntará:
Enter pass phrase for certificadora.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 (certificadora.pem), contendo informações da Autoridade Certificadora e a sua chave privada. Este arquivo, codificado em ASCII (Base64)3, 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 Interativa4, 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:
openssl req -x509 -new -nodes -key CA/certificadora.key -sha256 -days 1825 -out CA/certificadora.pem -subj "/C=BR/ST=RJ/L=Rio de Janeiro/O=Certificadora Local/OU=Cert Local WebDev/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 (certificadora.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/certificadora.key
-out
- A chave pública ficará no mesmo diretório da chave privada da CA, por isso o caminho:
CA/certificadora.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 | Certificadora Local | /O= |
Organizational Unit | Cert Local WebDev | /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:
openssl req -x509 -new -nodes -key CA/certificadora.key -sha256 -days 1825 -out CA/certificadora.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
├── certificadora.key
└── certificadora.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ª Parte do Tutorial – Criação da Autoridade Certificadora.
- 2ª Parte do Tutorial – Certificado de domínio e subdomínio.
-
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 ↩
-
O uso do modo não interativo é bem explicado no site ShellHacks no artigo HowTo: Create CSR using OpenSSL Without Prompt (Non-Interactive) ↩