Cómo habilitar TLS 1.3 en Apache y Nginx


TLS 1.3 es la última versión del protocolo Transport Layer Security (TLS) y se basa en las especificaciones 1.2 existentes con el estándar IETF adecuado: RFC 8446. Proporciona mayor seguridad y mejoras de rendimiento superiores a sus predecesores.

En este artículo, le mostraremos una guía paso a paso para obtener un certificado TLS válido y habilitar la última versión del protocolo TLS 1.3 en su dominio alojado en servidores web Apache o Nginx.

  • Apache version 2.4.37 or greater.
  • Nginx version 1.13.0 or greater.
  • OpenSSL version 1.1.1 or greater.
  • A valid domain name with correctly configured DNS records.
  • A valid TLS certificate.

Instale el certificado TLS de Let's Encrypt

Para obtener un certificado SSL gratuito de Let’s Encrypt, debe instalar el cliente Acme.sh y también algunos paquetes necesarios en el sistema Linux como se muestra.

# 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 protected]
# 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: Reemplace example.com en el comando anterior con su nombre de dominio real.

Una vez que tenga el certificado SSL instalado, puede continuar para habilitar TLS 1.3 en su dominio como se explica a continuación.

Habilite TLS 1.3 en Nginx

Como mencioné en los requisitos anteriores, TLS 1.3 es compatible a partir de la versión Nginx 1.13. Si está ejecutando la versión anterior de Nginx, primero debe actualizar a la última versión.

# apt install nginx
# yum install nginx

Verifique la versión de Nginx y la versión de OpenSSL con la que se compiló Nginx (asegúrese de que la versión de nginx sea al menos 1.14 y la versión 1.1.1 de openssl).

# nginx -V
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
....

Ahora comience, habilite y verifique la instalación de nginx.

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

Ahora abra el archivo de configuración de nginx vhost /etc/nginx/conf.d/example.com.conf usando su editor favorito.

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

y ubique la directiva ssl_protocols y agregue TLSv1.3 al final de la línea como se muestra a continuación

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;
}

Finalmente, verifique la configuración y vuelva a cargar Nginx.

# nginx -t
# systemctl reload nginx.service

Habilitar TLS 1.3 en Apache

A partir de Apache 2.4.37, puede aprovechar TLS 1.3. Si está ejecutando la versión anterior de Apache, primero debe actualizar a la última versión.

# apt install apache2
# yum install httpd

Una vez instalado, puede verificar Apache y la versión de OpenSSL con la que se compiló Apache.

# httpd -V
# openssl version

Ahora comience, habilite y verifique la instalación de 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

Ahora abra el archivo de configuración del host virtual Apache con su editor favorito.

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

y ubique la directiva ssl_protocols y agregue TLSv1.3 al final de la línea como se muestra a continuación.

<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 protected]
     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>

Finalmente, verifique la configuración y vuelva a cargar Apache.

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

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

Verifique que el sitio esté usando TLS 1.3

Una vez que lo haya configurado a través de un servidor web, puede verificar que su sitio se comunique con el protocolo TLS 1.3 utilizando las herramientas de desarrollo del navegador Chrome en la versión Chrome 70+.

Eso es todo. Ha habilitado con éxito el protocolo TLS 1.3 en su dominio alojado en servidores web Apache o Nginx. Si tiene alguna pregunta sobre este artículo, no dude en preguntar en la sección de comentarios a continuación.