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
Marcelo Albuquerque

Marcelo Albuquerque

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

More from Medium

The magical world of containers — Docker

Why Use Termux?

libgpiod API usage (Linux shared libraries) On Eclipse- Solving Problem with libgpiod — undefined…

What happens when you type an URL in your browser and press Enter?