Criando certificados locais (localhost) no servidor Apache

Precisei criar certificados locais para testar corretamente o HTTPS antes de subir o código para a produção. Eis o que fiz:

Etapa 1 - Criar autoridade local

Uma autoridade local é aquela que fornecerá uma identidade padrão para certificar endereços e, sem ela, não é possível criar certificados corretamente. No Linux, podemos usar o comando openssl para gerar certificados. Vamos ver como se faz.

Inicialmente usei dois comandos para criar a autoridade local. O primeiro foi...

sudo openssl genrsa -out /etc/ssl/private/rootCA.key 2048

... onde rootCA.key é o nome do arquivo que receberá os dados do certificado (você pode escolher qualquer nome, mas lembre-se do nome escolhido).

O segundo comando foi...

sudo openssl req -x509 -new -nodes -key /etc/ssl/private/rootCA.key -sha256 -days 3650 -out /etc/ssl/certs/rootCA.pem

... e, da mesma maneira, o nome rootCA.key pode ser alterado ao gosto do freguês.

Você precisa responder algumas perguntas sobre a localização e a empresa do certificado. Lembre-se que estamos gerando um certificado para o localhost, então não precisa usar dados reais.

A autoridade local foi criada. No seu navegador preferido, adicione o certificado .pem que acabou de criar.

Etapa 2 - O arquivo de configuração

Para facilitar, criei um arquivo de configuração, contendo os dados da chave que vou criar, e salvei como localhost.cnf. Esse é o conteúdo:

Etapa 3 - Criar o certificado

Com a autoridade local e o arquivo de configuração criados, agora é possível criar a chave privada e o certificado. Para criar a chave privada, acessei o diretório que guardará as minhas chaves e usei o comando...

openssl req -new -sha256 -nodes -newkey rsa:2048 -keyout localhost.key -out localhost.csr -config localhost.cnf

... e, em seguida...

openssl x509 -req -in localhost.csr -CA /etc/ssl/certs/rootCA.pem -CAkey /etc/ssl/private/rootCA.key -CAcreateserial -out localhost.crt -sha256 -days 3650 -extfile localhost.cnf -extensions v3_ca

Etapa final

Por último precisei alterar o meu virtual host tanto para responder na porta 443 quanto para carregar os arquivos criados. Ficou assim:

O teste

Para testar, reiniciei o apache usando...

sudo systemctl restart apache2

... e acessei o endereço https://localhost. O resultado: certificado criado e devidamente reconhecido, como a imagem demonstra:


Comentários

Postagens mais visitadas deste blog

Tá na hora de piscar LEDs de maneira melhorada

LEDs on/off com PHP, Python e RPi

PagSeguro e PHP - Usando a tela do PagSeguro (checkout redirect)