Búsqueda de sitios web

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 mayores mejoras de rendimiento que 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 Apache o Servidores web Nginx.

Requisitos:

  • Versión de Apache 2.4.37 o superior.
  • Nginx versión 1.13.0 o superior.
  • OpenSSL versión 1.1.1 o superior.
  • Un nombre de dominio válido con registros DNS configurados correctamente.
  • Un certificado TLS válido.

Instale el certificado TLS de Let's Encrypt

Para obtener un Certificado SSL gratuito de Let’s Encrypt, necesita 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 
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 openssl versión 1.1.1).


nginx -V
Salida de muestra

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 inicie, 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 localice 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

Habilite 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 la versión de Apache y OpenSSL con la que se compiló Apache.


httpd -V
openssl version

Ahora inicie, 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 usando 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 
     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 haya configurado a través de un servidor web, puede verificar que su sitio se conecte a través del protocolo TLS 1.3 utilizando las herramientas de desarrollo del navegador Chrome en la versión Chrome 70+.

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