Pesquisa de site

Como habilitar o TLS 1.3 no Apache e Nginx


TLS 1.3 é a versão mais recente do protocolo Transport Layer Security (TLS) e é baseado nas especificações 1.2 existentes com o padrão IETF adequado: RFC 8446. Ele fornece segurança mais forte e melhorias de desempenho superiores em relação aos seus antecessores.

Neste artigo, mostraremos um guia passo a passo para obter um certificado TLS válido e ativar a versão mais recente do protocolo TLS 1.3 em seu domínio hospedado no Apache ou Servidores web Nginx.

Requisitos:

  • Apache versão 2.4.37 ou superior.
  • Nginx versão 1.13.0 ou superior.
  • OpenSSL versão 1.1.1 ou superior.
  • Um nome de domínio válido com registros DNS configurados corretamente.
  • Um certificado TLS válido.

Instale o certificado TLS do Let’s Encrypt

Para obter um Certificado SSL gratuito da Let’s Encrypt, você precisa instalar o cliente Acme.sh e também alguns pacotes necessários no sistema Linux, conforme mostrado.


apt install -y socat git  [On Debian/Ubuntu]
dnf install -y socat git  [On RHEL/CentOS/Fedora]
mkdir /etc/letsencrypt
git clone https://github.com/Neilpang/acme.sh.git
cd acme.sh 
./acme.sh --install --home /etc/letsencrypt --accountemail [email 
cd ~
/etc/letsencrypt/acme.sh --issue --standalone --home /etc/letsencrypt -d example.com --ocsp-must-staple --keylength 2048
/etc/letsencrypt/acme.sh --issue --standalone --home /etc/letsencrypt -d example.com --ocsp-must-staple --keylength ec-256

NOTA: Substitua example.com no comando acima pelo seu nome de domínio real.

Depois de instalar o certificado SSL, você pode prosseguir para ativar o TLS 1.3 em seu domínio, conforme explicado abaixo.

Habilite TLS 1.3 no Nginx

Como mencionei nos requisitos acima, o TLS 1.3 é compatível a partir da versão Nginx 1.13. Se você estiver executando a versão mais antiga do Nginx, primeiro será necessário atualizar para a versão mais recente.


apt install nginx
yum install nginx

Verifique a versão do Nginx e a versão do OpenSSL na qual o Nginx foi compilado (certifique-se de que a versão do nginx seja pelo menos 1.14 e openssl versão 1.1.1).


nginx -V
Saída de amostra

nginx version: nginx/1.14.1
built by gcc 8.2.1 20180905 (Red Hat 8.2.1-3) (GCC) 
built with OpenSSL 1.1.1 FIPS  11 Sep 2018
TLS SNI support enabled
....

Agora inicie, habilite e verifique a instalação do nginx.


systemctl start nginx.service
systemctl enable nginx.service
systemctl status nginx.service

Agora abra o arquivo de configuração nginx vhost /etc/nginx/conf.d/example.com.conf usando seu editor favorito.


vi /etc/nginx/conf.d/example.com.conf

e localize a diretiva ssl_protocols e anexe TLSv1.3 no final da linha, conforme mostrado abaixo


server {
  listen 443 ssl http2;
  listen [::]:443 ssl http2;

  server_name example.com;

  # RSA
  ssl_certificate /etc/letsencrypt/example.com/fullchain.cer;
  ssl_certificate_key /etc/letsencrypt/example.com/example.com.key;
  # ECDSA
  ssl_certificate /etc/letsencrypt/example.com_ecc/fullchain.cer;
  ssl_certificate_key /etc/letsencrypt/example.com_ecc/example.com.key;

  ssl_protocols TLSv1.2 TLSv1.3;
  ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256';
  ssl_prefer_server_ciphers on;
}

Por fim, verifique a configuração e recarregue o Nginx.


nginx -t
systemctl reload nginx.service

Habilite o TLS 1.3 no Apache

A partir do Apache 2.4.37, você pode aproveitar as vantagens do TLS 1.3. Se você estiver executando a versão mais antiga do Apache, primeiro será necessário atualizar para a versão mais recente.


apt install apache2
yum install httpd

Depois de instalado, você pode verificar o Apache e a versão do OpenSSL com a qual o Apache foi compilado.


httpd -V
openssl version

Agora inicie, habilite e verifique a instalação do nginx.


-------------- On Debian/Ubuntu -------------- 
systemctl start apache2.service
systemctl enable apache2.service
systemctl status apache2.service

-------------- On RHEL/CentOS/Fedora --------------
systemctl start httpd.service
systemctl enable httpd.service
systemctl status httpd.service

Agora abra o arquivo de configuração do host virtual Apache usando seu editor favorito.


vi /etc/httpd/conf.d/vhost.conf
OR
vi /etc/apache2/apache2.conf

e localize a diretiva ssl_protocols e anexe TLSv1.3 no final da linha, conforme mostrado abaixo.


<VirtualHost *:443>
SSLEngine On

RSA
ssl_certificate /etc/letsencrypt/example.com/fullchain.cer;
ssl_certificate_key /etc/letsencrypt/example.com/example.com.key;
ECDSA
ssl_certificate /etc/letsencrypt/example.com_ecc/fullchain.cer;
ssl_certificate_key /etc/letsencrypt/example.com_ecc/example.com.key;

ssl_protocols TLSv1.2 TLSv1.3
ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256';
ssl_prefer_server_ciphers on;
SSLCertificateFile /etc/letsencrypt/live/example.com/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/example.com/chain.pem

     ServerAdmin [email 
     ServerName www.example.com
     ServerAlias example.com
    #DocumentRoot /data/httpd/htdocs/example.com/
    DocumentRoot /data/httpd/htdocs/example_hueman/
  # Log file locations
  LogLevel warn
  ErrorLog  /var/log/httpd/example.com/httpserror.log
  CustomLog "|/usr/sbin/rotatelogs /var/log/httpd/example.com/httpsaccess.log.%Y-%m-%d 86400" combined
</VirtualHost>

Por fim, verifique a configuração e recarregue o Apache.


-------------- On Debian/Ubuntu -------------- 
apache2 -t
systemctl reload apache2.service

-------------- On RHEL/CentOS/Fedora --------------
httpd -t
systemctl reload httpd.service

Verifique se o site está usando TLS 1.3

Depois de configurar por meio de um servidor web, você pode verificar se seu site está fazendo handshaking no protocolo TLS 1.3 usando as ferramentas de desenvolvimento do navegador Chrome na versão Chrome 70+.

Isso é tudo. Você ativou com sucesso o protocolo TLS 1.3 em seu domínio hospedado em servidores web Apache ou Nginx. Se você tiver alguma dúvida sobre este artigo, sinta-se à vontade para perguntar na seção de comentários abaixo.