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.

Photo by Towfiqu barbhuiya on Unsplash

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.

--

--

Apaixonado por Desenvolvimento Web, sempre aprendendo algo novo em PHP, Javascript, HTML e CSS. Ah…e lutando para estruturar corretamente meus bancos de dados!

Love podcasts or audiobooks? Learn on the go with our new app.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store