Servidor Web com NGINX — Instalação e configuração de certificado SSL em sistemas baseados em RHEL
Desde que comecei a estudar sobre Desenvolvimento Web, tenho utilizado o Apache como meu servidor web padrão. Quando comecei meus estudos ele definitivamente era o servidor web mais utilizado, talvez até hoje deva ser. Porém, alternativas vão surgindo e o NGINX é mais do que uma alternativa, hoje ele dividi o mercado de servidores com o Apache e possui muitas vantagens em relação ao seu concorrente.

Este artigo faz parte de uma série de artigos que visam a instalação e configuração de um Servidor Web com NGINX.
Hoje, vamos realizar a instalação e configuração de um certificado SSL para um domínio local.
Para a geração de certificados SSL, vamos utilizar o mkcert. O mkcert necessita do certutil instalado, então iniciaremos com a instalação do nss-tools que nos fornece essa ferramenta.
Considerações
- Para este tutorial, vamos utilizar um domínio fictício: “example.com”.
- Todos os comandos serão executados a partir de nossa “home”.
Instalação do nss-tools
Vamos começar instalando o pacote de ferramentas nss-tools. Utilizando o terminal, executamos o seguinte comando:
sudo dnf install nss-tools
Instalação do mkcert
O mkcert gerará nossos certificados. Essa ferramenta é de código aberto e possuí um repositório no GitHub, no momento de publicação deste artigo, a ferramenta esta em sua versão v1.4.3
, que inclusive deve ser informada no processo de instalação.
Primeiramente vamos criar uma variável para definir o valor referente a versão do mkcert. A variável se chamará VER
e seu valor será v1.4.3
. Utilizando o terminal, executamos o seguinte comando:
export VER="v1.4.3"
Criada a variável, podemos fazer o download do pacote binário da aplicação. Utilizando o terminal, executamos o seguinte comando:
wget -O mkcert https://github.com/FiloSottile/mkcert/releases/download/${VER}/mkcert-${VER}-linux-amd64
Lembrando que o arquivo baixado foi para a nossa
home
!
Vamos tornar o arquivo executável. Utilizando o terminal, executamos o seguinte comando:
chmod +x mkcert
Agora, vamos mover o arquivo para o diretório /usr/locak/bin/
. Utilizando o terminal, executamos o seguinte comando:
sudo mv mkcert /usr/local/bin/
Para finalizar, utilizando o terminal, executamos o seguinte comando:
mkcert -install
Receberemos o seguinte retorno no terminal:
Created a new local CA 💥
The local CA is now installed in the system trust store! ⚡️
The local CA is now installed in the Firefox and/or Chrome/Chromium trust store (requires browser restart)! 🦊
A instalação do mkcert está finalizada!
Gerando os certificados
Primeiramente devemos definir o domínio local para o qual desejamos criar o certificado SSL. Neste exemplo vou utilizar o domínio local example.com
e www.example.com
, lembrando que se comportam como domínios diferentes, então devemos criar essa distinção. O domínio example.com
já deve estar devidamente configurado em nosso servidor local, bastando seguir com a configuração. Utilizando o terminal, executamos o seguinte comando:
mkcert example.com www.example.com
Receberemos o seguinte retorno no terminal:
Created a new certificate valid for the following names 📜
- "example.com"
- "www.example.com"
The certificate is at "./example.com+1.pem" and the key at "./example.com+1-key.pem" ✅
It will expire on 30 January 2023 🗓
O mkcert gerou dois arquivos com a extensão .pem
na nossa home
.
Estrutura de pastas para o armazenamento dos Certificados
Precisamos definir um local para armazenarmos nossos certificados, lembrando que a organização é de extrema importância para a devida manutenção do nosso servidor local.
Vamos criar uma extrutura de pastas proposta pelo próprio NGINX. Utilizando o terminal, executamos o seguinte comando:
sudo mkdir -p /etc/pki/nginx/ mkdir -p /etc/pki/nginx/private/
Agora, vamos mover o primeiro arquivo example.com+1.pem
para a pasta /etc/pki/nginx/
. Utilizando o terminal, executamos o seguinte comando:
sudo mv example.com+1.pem /etc/pki/nginx
Podemos mover o segundo arquivo example.com+1-key.pem
para a pasta /etc/pki/nginx/private
. Utilizando o terminal, executamos o seguinte comando:
sudo mv example.com+1-key.pem /etc/pki/nginx/private
Um passo importantíssimo é lembrarmos que sistemas baseados no RHEL trabalham com o SELinux, por esse motivo, precisamos mudar o contexto de segurança dos arquivos e pastas para httpd_sys_content_t. Neste caso, vamos alterar o contexto de segurança apenas dos arquivos .pem
.
Falo sobre isso neste artigo aqui, onde ensino a configurar os Virtual Hosts no Fedora. Caso tenha alguma dúvida, antes de prosseguir, dê uma conferida!
No terminal executamos os seguintes comandos:
sudo chcon -R -t httpd_sys_content_t /etc/pki/nginx/*.pem
sudo chcon -R -t httpd_sys_content_t /etc/pki/nginx/private/*.pem
Configuração do Server Block
Para que o servidor reconheça os certificados SSL, precisamos configurá-los devidamente. Neste ponto, precisamos editar e configurar o arquivo responsável pelos Server Blocks.
Lembrando que a configuração e localização do arquivo referente aos Server Blocks é algo definido pelo próprio usuário.
Meu arquivo de configuração dos Server Blocks está localizado no caminho /etc/nginx/conf.d/example.com.conf
.
Utilizando o terminal, executamos o seguinte comando:
code /etc/nginx/conf.d/example.com.conf
Agora podemos adicionar ao arquivo, o seguinte conteúdo:
Após salvar e fechar o arquivo, devemos reiniciar o servidor NGINX. Utilizando o terminal, executamos o seguinte comando:
sudo systemctl restart nginx
Apontando os domínios para o servidor local
Para finalizar, precisamos verificar se o arquivo hosts
está devidamente configurado com o domínio apontando para nosso servidor local.
Portanto, utilizando o terminal, executamos o seguinte comando:
code /etc/hosts
Adicionamos ao arquivo o seguinte conteúdo:
127.0.0.1 example.com www.example.com
::1 example.com www.example.com
Agora podemos salvar e fechar o arquivo.
Não esqueça de reiniciar seus navegadores antes de acessar o domínio com o “https”.
Tudo pronto, nossos certificados estão devidamente configurados.