GNU/Linux >> Tutoriales Linux >  >> Ubuntu

Habilite correctamente HTTPS en Apache con Let's Encrypt en Ubuntu

Este tutorial le mostrará cómo habilitar correctamente HTTPS en Apache con Let's Encrypt en Ubuntu. Google Chrome y Firefox ya han comenzado a marcar las páginas web no cifradas con un cuadro de entrada de contraseña como inseguras. Eventualmente, todas las páginas web HTTP se marcarán como no seguras. HTTPS se convertirá en predeterminado para cualquier sitio web. También es un requisito si desea utilizar el protocolo HTTP/2 para acelerar su sitio web.

Como probablemente sepa, Let's Encrypt es una autoridad de certificación gratuita, automatizada y abierta. La documentación oficial describe pasos simples que puede seguir para habilitar HTTPS con Let's Encrypt, pero hay más que eso. Si sigues el documento oficial, obtendrás A en la prueba de SSL Labs. Si sigues mis pasos, obtendrás una puntuación A+ . Si ya implementó un certificado Let's Encrypt anteriormente, aún puede seguir este tutorial para renovar y reemplazar su certificado existente.

Antes de mostrarle los pasos para habilitar HTTPS con Let's Encrypt, primero quiero hablar sobre el registro CAA. encabezados de seguridad y grapado OCSP . Estas cosas son las que pueden ayudarte a obtener A+. También le mostraré cómo manejar el servicio CDN de CloudFlare al final de este tutorial.

Nota:este tutorial funciona en todas las versiones actuales de Apache y Ubuntu (incluidas 16.04, 18.04 y 20.04).

Creación de un registro CAA para su nombre de dominio

La autorización de la autoridad de certificación (CAA) es un registro de recursos de DNS que especifica qué autoridades de certificación (CA) pueden emitir un certificado para un nombre de dominio en particular. A partir de septiembre de 2017, todas las CA tienen la obligación de verificar los registros de CAA antes de emitir un certificado para un nombre de dominio en particular. Si no se encuentra ningún registro CAA para un nombre de dominio, cualquier CA puede emitir un certificado para ese nombre de dominio. Si una CA no figura en su registro de CAA, entonces esa CA no puede emitir un certificado para su nombre de dominio.

Para crear un registro CAA que permita a Let's Encrypt emitir un certificado para su nombre de dominio, agregue la siguiente entrada en su servidor DNS o administrador de DNS.

example.com. IN CAA 0 issue "letsencrypt.org"

También puede usar iodef para hacer que la CA informe de una solicitud de emisión de certificado malicioso a su dirección de correo electrónico.

example.com. IN CAA 0 iodef "mailto:your-email-address"

El formato de los registros anteriores es para archivos de zona. A continuación hay algunos consejos para usted.

  • Puede usar SSLMate CAA Record Helper para generar un registro CCA para su nombre de dominio.
  • Si está utilizando GoDaddy DNS, siga esta publicación para agregar un registro CAA.

Puede usar el siguiente comando de excavación para verificar su registro CAA.

dig example.com CAA

Tenga en cuenta que los navegadores web no comprobarán los registros CAA.

Encabezados de seguridad

Los encabezados de seguridad son tan importantes como HTTPS, pero solo un pequeño porcentaje de los sitios habilitados para HTTPS prestan atención a los encabezados de seguridad. Si bien una discusión completa sobre los encabezados de seguridad está más allá del alcance de este tutorial, quiero hablar sobre las solicitudes de actualización inseguras y HSTS encabezados porque puede habilitarlos fácilmente con Let's Encrypt para aumentar la seguridad de su sitio.

Solicitudes inseguras de actualización

Hay momentos en que un sitio ha habilitado HTTPS, pero algunos CSS, imágenes o JavaScript todavía se sirven a través de HTTP. En este caso, el candado verde al principio de la barra de direcciones del navegador desaparecerá. En Google Chrome, se reemplaza con un ícono de información; En Firefox, se reemplaza con un candado gris con un triángulo amarillo. Querrá mostrar un candado verde a los visitantes del sitio tanto como sea posible y la manera fácil de solucionar este problema es habilitar solicitudes inseguras de actualización encabezado, que forzará al navegador web a usar https:// por cada http:// recurso.

Para habilitar este encabezado, simplemente agregue --uir bandera al emitir certbot dominio. Tenga en cuenta que este encabezado funciona en recursos alojados en su propio dominio y recursos en dominios de terceros que admiten HTTPS. Si su página web incluye recursos en servidores de terceros que no están disponibles a través de HTTPS, los navegadores web bloquearán esos recursos, pero el uso de este encabezado garantiza que sus páginas web siempre tengan un candado verde.

HSTS (Seguridad de transporte estricta HTTP)

El encabezado HSTS les dice a los navegadores web que toda la comunicación con su sitio web debe realizarse a través de HTTPS. Se defiende contra SSL Striping, que es un ataque para degradar de HTTPS a HTTP. Para habilitar este encabezado, simplemente agregue --hsts bandera al emitir certbot comando.

Grapado OCSP

Cuando un navegador web se conecta a un sitio web HTTPS, envía una solicitud OCSP (Protocolo de estado de certificado en línea) a la autoridad de certificación (CA) para consultar el estado de revocación del certificado SSL del sitio web. Esto puede retrasar la carga de la página entre 1 y 3 segundos, según los datos de telemetría de Firefox.

Para mejorar el rendimiento, el propietario del sitio web puede habilitar el engrapado OCSP, en cuyo caso el propio servidor web obtiene la respuesta OCSP firmada por CA a intervalos regulares y la envía al navegador web, eliminando así la necesidad de que el navegador web se comunique con el servidor OCSP.

Para habilitar el grapado OCSP, simplemente agregue --staple-ocsp bandera al emitir certbot comando.

OCSP debe grapar

Si un pirata informático crea un sitio web falso y duplicado, desactiva el elemento básico OCSP y también bloquea el acceso del navegador web al servidor OCSP, entonces el navegador web asumirá que está bien y procederá al sitio web malicioso. Para resolver este problema, puede habilitar OCSP debe grapar en su sitio web, lo que le dice a los navegadores web que su sitio web debe presentar una respuesta básica OCSP durante la conexión HTTPS. Entonces, cuando los navegadores web se conectan a un sitio web falso que no tiene un elemento básico OCSP, detendrá la conexión.

Para habilitar OCSP debe grapar, agregue --must-staple bandera al emitir certbot comando.

Instalación del cliente Let's Encrypt (Certbot) en Ubuntu

Ahora es el momento de ensuciarse las manos. A partir de Ubuntu 16.04, el cliente Let's Encrypt (Certbot) está incluido en el repositorio de Ubuntu, por lo que puede instalarlo con el siguiente comando. Python3-certbot-apache es el complemento de Certbot Apache.

sudo apt install certbot python3-certbot-apache

Para comprobar el número de versión, ejecute

certbot --version

Salida de muestra:

certbot 0.31.0

Si desea utilizar la última versión, puede instalar Certbot desde la tienda Snap.

sudo apt install snapd

sudo snap install --classic certbot

Nota :si desea utilizar la versión Snap, debe utilizar la ruta binaria completa:/snap/bin/certbot .

Uso del complemento de Apache para habilitar HTTPS

Si su sitio web no utiliza el servicio CDN, se recomienda utilizar el complemento Apache para habilitar HTTPS en el servidor web Apache, ya que puede obtener automáticamente el certificado SSL/TLS y configurarlo por usted. Ejecute el siguiente comando en su servidor Ubuntu.

sudo certbot --apache --agree-tos --redirect --uir --hsts --staple-ocsp --must-staple -d www.example.com,example.com --email [email protected]

Explicación:

  • --apache :use el autenticador e instalador de Apache
  • --agree-tos :Acepto los términos de servicio de Let's Encrypt
  • --redirect :redirigir automáticamente todo el tráfico HTTP a HTTPS
  • --uir :agregue el encabezado "Content-Security-Policy:upgrade-insecure-requests" a cada respuesta HTTP.
  • --hsts :agregue el encabezado Strict-Transport-Security a cada respuesta HTTP.
  • --staple-ocsp :Habilita el grapado OCSP.
  • --must-staple :Agrega la extensión OCSP Must Staple al certificado.
  • -d va seguido de una lista de nombres de dominio, separados por comas. Puede agregar hasta 100 nombres de dominio.
  • --email :Correo electrónico utilizado para el registro y el contacto de recuperación.

Se le preguntará si desea recibir correos electrónicos de EFF (Electronic Frontier Foundation). Después de elegir S o N, su certificado SSL se obtendrá y configurará automáticamente para usted, lo cual se indica en el mensaje a continuación.

Ahora, si visita su sitio web, puede ver que HTTP se redirige automáticamente a la conexión HTTPS. Tenga en cuenta que el cliente de certbot crea /etc/apache2/sites-enabled/example.com-le-ssl.conf Host virtual SSL al configurar SSL para su sitio web.

Prueba de su certificado SSL

Vaya a ssllabs.com para probar su certificado y configuración SSL. Como prometí, obtienes A+ . También puede verificar si su nombre de dominio ha habilitado el registro CAA, si su servidor ha habilitado HSTS, grapado OCSP y grapado OCSP.

Redirigir WWW a No-WWW (o viceversa)

Ya hemos habilitado la redirección de HTTP a HTTPS, lo que queda por hacer es redirigir www a no-www, o viceversa. Si estás usando WordPress, entonces es muy fácil. Simplemente vaya a Panel de control de WordPress> Configuración> Generales y configure su versión preferida (www o no www) en Dirección de WordPress y Dirección del sitio .

Si sigue esa ruta, terminará con lo que se conoce como doble redirección 301. Primero, el servidor Apache redirige HTTP a HTTPS, luego WordPress redirige a un dominio www o no www.

Algunos pueden argumentar que puede perder el jugo del enlace SEO al hacer una doble redirección 301. Si le preocupa eso, puede usar el método a continuación para hacer que todas las versiones del dominio vayan directamente al destino final.

Edite su archivo de host virtual. (No el servidor virtual SSL)

sudo nano /etc/apache2/sites-enabled/example.com.conf

El cliente de CertBot agregó las siguientes líneas al archivo para redirigir HTTP a HTTPS.

RewriteEngine on
RewriteCond %{SERVER_NAME} =example.com [OR]
RewriteCond %{SERVER_NAME} =www.example.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]

Para redirigir a un dominio www o no www, debe cambiar la última línea. Reemplazar %{SERVER_NAME} con su versión de dominio preferida como se muestra a continuación. (dominio www)

RewriteRule ^ https://www.example.com%{REQUEST_URI} [END,NE,R=permanent]

Si prefiere un dominio que no sea www, cámbielo por el siguiente.

RewriteRule ^ https://example.com%{REQUEST_URI} [END,NE,R=permanent]

Luego guarde y cierre el archivo. También necesitaremos editar el servidor virtual SSL.

sudo nano /etc/apache2/sites-enabled/example.com-le-ssl.conf

Agregue las siguientes líneas sobre la etiqueta de cierre para redirigir un dominio que no sea www a www.

RewriteEngine on
RewriteCond %{SERVER_NAME} =example.com
RewriteRule ^ https://www.example.com%{REQUEST_URI} [END,NE,R=permanent]

Si desea redirigir www a un dominio que no sea www, agregue las siguientes líneas en su lugar.

RewriteEngine on
RewriteCond %{SERVER_NAME} =www.example.com
RewriteRule ^ https://example.com%{REQUEST_URI} [END,NE,R=permanent]

Guarde y cierre el archivo. Vuelva a cargar el servicio Apache para que los cambios surtan efecto.

sudo systemctl reload apache2

Para que quede más claro, a continuación se muestra una captura de pantalla de mi archivo de host virtual Apache y el archivo de host virtual SSL para redirigir un dominio que no sea www a www.

Archivo de host virtual de Apache

Archivo de host virtual Apache SSL

Si está utilizando WordPress, asegúrese de configurar su versión de dominio preferida en Dirección de WordPress y Dirección del sitio antes de editar los archivos de host virtual de Apache. Si la configuración de WordPress contradice la configuración de Apache, su sitio estará en un bucle de redirección.

Cómo deshabilitar TLSv1 y TLSv1.1

TLSv1 y TLSv1.1 ya no se consideran seguros. Para deshabilitarlos, edite el archivo de configuración de opciones SSL de Let's Encrypt.

sudo nano /etc/letsencrypt/options-ssl-apache.conf

Busque la siguiente línea, que deshabilita SSLv2 y SSLv3 de forma predeterminada.

SSLProtocol             all -SSLv2 -SSLv3

Cámbielo a lo siguiente para deshabilitar también TLSv1.0 y TLSv1.1.

SSLProtocol             all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1

Guarde y cierre el archivo. Luego reinicie Apache.

sudo systemctl restart apache2

Renovación automática de certificados

Para renovar automáticamente el certificado de Let's Encrypt, simplemente edite el archivo crontab del usuario raíz.

sudo crontab -e

Luego agregue la siguiente línea en la parte inferior.

@daily certbot renew --quiet && systemctl reload apache2

--quiet flag suprimirá los mensajes normales. Si desea recibir mensajes de error, agregue la siguiente línea al comienzo del archivo crontab.

MAILTO=your-email-address

Es necesario volver a cargar Apache para presentar el nuevo certificado a los clientes.

CDN de CloudFlare

Lo primero que debe saber es que si desea instalar el certificado Let's Encrypt en su servidor y, al mismo tiempo, usar el servicio CDN de CloudFlare, deberá habilitar Universal SSL de CloudFlare en su sitio, lo que significa que

  • Las conexiones entre los visitantes del sitio y el servidor perimetral de CloudFlare se cifran mediante el certificado SSL universal de CloudFlare.
  • Las comunicaciones entre su servidor de origen y el servidor perimetral de CloudFlare se cifran mediante el certificado emitido por Let's Encrypt.

Si instala el certificado Let's Encrypt en su servidor de origen, redirige HTTP a HTTPS y desactiva CloudFlare Universal SSL, los navegadores web se quejarán de que su sitio web está en un ciclo de redireccionamiento infinito porque CloudFlare redirige HTTPS a HTTP.

Lo segundo que debe saber es que si desea habilitar el registro CAA mientras usa CloudFlare Universal SSL, también debe crear el siguiente registro CAA.

example.com. IN CAA 0 issue "comodoca.com"

example.com. IN CAA 0 issue "digicert.com"

example.com. IN CAA 0 issue "globalsign.com

Siga esta publicación para agregar un registro CAA para el certificado SSL universal de CloudFlare.

Entonces, ¿cómo haces para instalar el certificado Let's Encrypt con CloudFlare? Bueno, hay dos escenarios.

  1. Ya instaló el certificado Let's Encrypt siguiendo los pasos anteriores, ahora desea habilitar el servicio CloudFlare CDN.
  2. Su sitio web está utilizando el servicio CloudFlare CDN, ahora desea instalar el certificado Let's Encrypt en su servidor de origen.

El primer escenario

Si se encuentra en el primer escenario, puede continuar y habilitar el servicio CloudFlare CDN y también habilitar CloudFlare Universal SSL en CloudFlare Dashboard yendo a Crypto> SSL y seleccionando Completo (estricto) . Su sitio funcionará bien sin ningún problema.

El segundo escenario

Si usa CloudFlare CDN y ahora desea instalar Let's Encrypt en su servidor de origen, ejecute el siguiente comando para obtener e instalar el certificado TLS de Let's Encrypt.

sudo certbot --apache --agree-tos --redirect --uir --hsts --staple-ocsp --must-staple -d www.example.com,example.com --email [email protected]

Después de obtener e instalar el certificado en su servidor, vaya al panel de control de Cloudflare y habilite CloudFlare Universal SSL.

Siguiente paso

Espero que este tutorial te haya ayudado a habilitar HTTPS en el host virtual de Apache con Let's Encrypt en Ubuntu . También es posible que desee configurar el cortafuegos de la aplicación web ModSecurity para proteger su sitio contra la piratería.

  • Cómo configurar ModSecurity con Apache en Debian/Ubuntu

Para acelerar su sitio web, puede habilitar el protocolo HTTP/2 con Apache.

  • Cómo habilitar el protocolo HTTP/2 con Apache en Ubuntu

Como siempre, si esta publicación le resultó útil, suscríbase a nuestro boletín informativo gratuito para obtener más tutoriales.


Ubuntu
  1. Cómo proteger Nginx con Lets Encrypt en Ubuntu 20.04/18.04

  2. Asegure Nginx con Let's Encrypt en Ubuntu 18.04 - ¿Cómo hacerlo?

  3. Cómo instalar Let's Encrypt con Apache en CentOS 7

  4. Cómo habilitar el protocolo HTTPS con Apache 2 en Ubuntu 20.04

  5. Cómo asegurar Apache con Lets Encrypt en Ubuntu 18.04

Proteja Nginx con el certificado Let's Encrypt SSL en Ubuntu 18.04

Instale el servidor LAMP con Let's Encrypt Free SSL en Ubuntu 18.04

Cómo habilitar HTTP/2 con Apache en Ubuntu

Cómo proteger Nginx con Let's Encrypt en Ubuntu 20.04

Cómo proteger Apache con Let's Encrypt en Ubuntu 20.04

Cómo instalar Django 3.2 en Ubuntu 20.04 con Apache y WSGI