Cómo configurar el cifrado SSL de extremo a extremo de CloudFlare

Configurar SSL para cualquier sitio web es un desafío. Los visitantes del sitio, los navegadores y los motores de búsqueda recompensan un sitio web correctamente asegurado con Secure Sockets Layer (SSL). Anteriormente, este proceso implicaba comprar, instalar y configurar un certificado SSL. Pero con Cloudflare SSL, ¡puedes completar el proceso de configuración de SSL con solo unos pocos clics!

En este artículo, aprenderás cómo configurar tu sitio con cifrado SSL a través de Cloudflare. ¡Así que trabaja para obtener conexiones SSL cifradas de extremo a extremo!

**Requisitos previos**

Para seguir este tutorial, se requieren algunos requisitos previos a continuación:

  • A Cloudflare account with an existing website and domain pointed to the Cloudflare nameservers.
  • – Un servidor Ubuntu Linux con NGINX instalado y configurado. Este tutorial demuestra el uso de Linux y NGINX, pero el mismo proceso general funciona para IIS o Apache.

Configurar Cloudflare Universal SSL: ¡Solo el principio!

Hay varias formas en que puedes configurar un SSL usando Cloudflare. A menudo, el método más rápido es optar por SSL Universal. ¿Por qué? Con SSL Universal, en lugar de buscar y comprar un certificado SSL, Cloudflare provee un certificado, luego todo el tráfico enviado a través de Cloudflare usará ese certificado.

Después de habilitar SSL Universal, Cloudflare presenta un certificado SSL válido tanto a los visitantes como a los motores de búsqueda. Además, Cloudflare no requiere configurar el servidor o el sitio web para usar ese certificado, ¡genial!

1. Inicia tu navegador web e inicia sesión en el panel de control de Cloudflare.

2. Navega a tu sitio desde la lista de dominios de la cuenta, como se muestra a continuación.

Choose the site to change options for.

3. Ahora, haz clic en SSL/TLS para ver las opciones de cifrado de tu sitio.

The SSL/TLS Encryption mode page

4. Elige la opción Flexible para habilitar SSL Universal. Una vez seleccionado, el cambio surte efecto inmediatamente. ¡Tu sitio ahora está cifrado entre el navegador y Cloudflare!

Enabling Universal SSL on Cloudflare

Configurando el cifrado SSL de extremo a extremo completo

Aunque SSL Universal es una gran opción para comenzar a asegurar sitios, deja el tráfico entre el servidor y Cloudflare sin asegurar. Afortunadamente, hay dos modos de cifrado para cifrar el tráfico desde Cloudflare hacia el servidor, Full (Completo) y Full (estricto) cada uno con principalmente diferentes requisitos de instalación de certificados.

  • Completo: Requiere un certificado en el servidor, pero este puede ser un certificado autofirmado.
  • Completo (estricto) – El certificado instalado en el lado del servidor debe ser un certificado válido.

Vamos a repasar la diferencia entre estas cifrados y cómo configurarlos.

Configuración de la encriptación completa SSL/TLS con un certificado autofirmado.

A diferencia del SSL Universal, la encriptación completa SSL/TLS requiere que su servidor web sirva correctamente un certificado SSL para encriptar el tráfico desde el servidor hacia Cloudflare. Hay muchas formas de lograr esto, pero este tutorial muestra los pasos en un servidor Linux con NGINX.

Generación de un certificado autofirmado.

Para encriptar la conexión entre Cloudflare y su servidor de origen, necesita un certificado SSL. Dado que el modo de encriptación completa SSL/TLS no requiere que el certificado sea completamente confiable, puede usar un certificado autofirmado para ponerlo en marcha rápidamente.

1. Secure Shell (SSH) en su servidor web Linux.

2. Cambie (cd) al directorio SSL estándar de Ubuntu (/etc/ssl) ejecutando el siguiente comando. cd /etc/ssl

cd /etc/ssl
Navigating to the /etc/ssl directory

3. Ahora, genere tanto la clave pública como la privada para su sitio con el comando openssl. Para hacerlo, ejecute el siguiente comando openssl.

Este comando realiza algunas cosas:

  • Solicita (req) un certificado X.509 proporcionado por el parámetro -x509.
  • Cuando es referenciado por NGINX, permite a NGINX leer el certificado al iniciar usando el parámetro -nodes.
  • Especifica la cantidad de días que el certificado es válido.
  • Crea una nueva clave pública y privada con -newkey mediante cifrado RSA de 2048 bits (rsa:2048).
  • Guarda la clave privada en /etc/ssl/private/nginx-selfsigned.key con el parámetro -keyout.
  • Guarda la clave pública en /etc/ssl/certs/nginx-selfsigned.crt utilizando el parámetro -out.
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/nginx-selfsigned.key -out /etc/ssl/certs/nginx-selfsigned.crt

Si openssl devuelve un error benigno de No se puede cargar /root/.rnd en RNG, deberás comentar la línea #RANDFILE = $ENV::HOME/.rnd en /etc/ssl/openssl.cnf. Todas las versiones modernas de openssl recurren al uso del dispositivo /dev/urandom del sistema para datos de entropía aleatoria y no requieren un archivo específico para la inicialización.

4. Después de ejecutar el comando con éxito, openssl te pedirá información. A continuación, encontrarás todos los valores proporcionados para este tutorial.

  • Nombre del país: US
  • Nombre del estado o provincia: Illinois
  • Nombre de la localidad: Bloomington
  • Nombre de la organización: Test Company, LLC
  • Nombre de la unidad organizativa: <en blanco>
  • Nombre común: test.adamlistek.me
  • Dirección de correo electrónico: [email protected]
Generating a self-signed certificate

5. Por último, verifique que el certificado exista utilizando el comando test. Si el comando test devuelve (echo $?) 0, entonces el archivo existe como se espera. Puede ver en la siguiente captura de pantalla que cada comando devolvió un valor de 0.

test -f /etc/ssl/private/nginx-selfsigned.key; echo $?
 test -f /etc/ssl/certs/nginx-selfsigned.crt; echo $?
Verifying that the certificate files exist

Configuración de NGINX

Ahora que el certificado ha sido generado y almacenado en las ubicaciones clave /etc/ssl/certs y /etc/ssl/private, NGINX debe configurarse para aplicar el certificado y servir el contenido del sitio.

Las configuraciones del sitio de NGINX se definen en bloques server que típicamente se encuentran en archivos de host virtuales. En el ejemplo a continuación, la configuración básica del sitio se almacena en el archivo test.adamlistek.me.conf e incluida en el archivo principal nginx.conf.

1. En primer lugar, cree un nuevo archivo de host virtual con el nombre que desee, pero para este ejemplo, nómbrelo test.adamlistek.me.conf bajo el directorio /etc/nginx/vhosts.d. Luego copie el contenido a continuación al archivo de host virtual y guárdelo.

Sustituya el nombre de dominio test.adamlistek.me con el suyo propio, ya que esto es solo para fines de demostración. Y si el directorio /etc/nginx/vhosts.d no existe, cree el directorio ejecutando mkdir /etc/nginx/vhosts.d.

server {
   # Escuche en el puerto 80 para IPv4 e IPv6
   listen 80;
   listen [::]:80;
 server_name test.adamlistek.me;
 # Realice una redirección 301 con cualquier parámetro al bloque del servidor SSL a continuación
   return 301 https://test.adamlistek.me$request_uri;
 }
 server {
   # Escuche en el puerto 443 para IPv4 e IPv6 con HTTP2 habilitado (requiere SSL)
   listen 443 ssl http2;
   listen [::]:443 ssl http2;
 server_name test.adamlistek.me;
 # La ubicación del certificado público y privado
   ssl_certificate /etc/ssl/certs/nginx-selfsigned.crt;
   ssl_certificate_key /etc/ssl/private/nginx-selfsigned.key;
 # La ubicación de los archivos web para cargar, esta es la ubicación predeterminada de NGINX
   root /usr/share/nginx/html;
 # El archivo predeterminado para servir en una solicitud de dominio raíz
   index index.html;
 }

2. Verifique que su archivo de configuración principal de NGINX, /etc/nginx/nginx.conf, contenga la línea include necesaria dentro del bloque http, ubicado al final del bloque.

# Las configuraciones del servidor van aquí
 …
 http {
     # Las configuraciones adicionales van aquí# Incluya los hosts virtuales
     include /etc/nginx/vhosts.d/*.conf;
 }

3. Reinicie NGINX con el siguiente comando si está en systemd, que es un administrador de sistemas y servicios moderno para Linux.

service nginx restart

4. Vuelva a Cloudflare, verifique que el certificado autofirmado esté funcionando. Para hacerlo, desactive el “orange-cloud” para el registro DNS bajo Estado del proxy, como se muestra a continuación. Deshabilitar la opción “orange-cloud” omite Cloudflare y sirve las solicitudes directamente desde el servidor web.

Disabling Cloudflare proxying via Proxy Status.

5. Asegúrate de que el sitio esté devolviendo el certificado autofirmado recién creado navegando al sitio web en tu navegador web. Al hacerlo, se mostrará una página de advertencia, como se muestra a continuación.

Displaying the self-signed certificate error.

6. Finalmente, habilita el cifrado completo TLS/SSL en Cloudflare. Para hacerlo, vuelve a habilitar el estado de Proxy de Cloudflare “nube naranja” en el registro DNS que anteriormente deshabilitaste. Luego ve a la pestaña SSL/TLS y haz clic en el botón de radio Completo que se muestra a continuación.

Enabling Full SSL/TLS encryption on Cloudflare.

Generación de certificados de origen para cifrado SSL/TLS completo (estricto)

El modo de cifrado completo no garantiza que el certificado presentado por el servidor web tenga una cadena de certificados válida. Por lo tanto, en lugar de eso, opta por un cifrado no estricto, y Cloudflare aceptará cualquier certificado presentado por el servidor.

Cloudflare ofrece la capacidad de generar un certificado TLS gratuito para asegurar la conexión del servidor de origen. Pero hay dos inconvenientes al usar un certificado de origen proporcionado por Cloudflare. Uno es que necesitas generar e instalar el certificado manualmente. El segundo es que el certificado parece un certificado autofirmado que ningún navegador confiaría aparte de Cloudflare.

Es posible automatizar la generación de certificados utilizando el punto de conexión API de Creación de Certificado CA de Origen, pero eso está fuera del alcance de este tutorial.

1. Navega al servidor de origen yendo a la pestaña SSL/TLS -> Servidor Original, como se muestra a continuación, y haz clic en el botón Crear Certificado.

Navigating to the Origin Server page.

2. Como puedes ver a continuación, las opciones predeterminadas ya están configuradas para generar un certificado comodín para el dominio con 15 años de validez. ¡Genial! Así que deja las opciones predeterminadas y genera el certificado haciendo clic en el botón Crear en la esquina inferior derecha de la página.

A wildcard certificate, shown as *.domain.com, means that any subdomain will also be covered by this certificate including www.

Creating a Cloudflare-provided origin server certificate.

3. Añade el certificado recién creado a tu sistema Linux guardando primero las claves privadas y públicas con el editor de texto GNU nano. Dado que hay dos claves para guardar, deberás guardar los archivos de clave uno por uno.

Asegúrate de guardar la Clave Privada, ya que solo está disponible en el momento en que generaste un Certificado Original. Si pierdes esta clave accidentalmente, revoca el certificado y emite uno nuevo.

Abre una terminal, luego crea y abre el archivo de clave pública (nginx-test.adamlistek.me.crt) en nano ejecutando el primer comando a continuación.

Después, vuelve a Cloudflare y copia la clave del Certificado de Origen (clave pública) haciendo clic en la opción Haz clic para copiar, como se muestra a continuación. Luego pega (Ctrl+U) la clave pública que copiaste en el archivo de clave pública abierto en nano. Guarda los cambios (Ctrl+O) y sal (Ctrl+X) de nano.

Después de guardar el archivo de clave pública, repite el mismo proceso desde la creación del archivo de clave, copiando la clave de Cloudfare y guardándola en el archivo de clave. Pero esta vez estás creando el archivo de clave privada (nginx-test.adamlistek.me.key).

# La clave pública, bajo la sección de Certificado de Origen
 nano /etc/ssl/certs/nginx-test.adamlistek.me.crt
# La clave privada, bajo la sección del mismo nombre
 nano /etc/ssl/private/nginx-test.adamlistek.me.key
Copying the public/private certificate key information.

4. Ahora que has creado las claves pública y privada, apunta NGINX a la ubicación de los certificados. Hazlo modificando el archivo de configuración test.adamlistek.me.conf con las siguientes líneas, modificadas para que se ajusten a tu dominio.

 ssl_certificate /etc/ssl/certs/nginx-test.adamlistek.me.crt;
 ssl_certificate_key /etc/ssl/private/nginx-test.adamlistek.me.key;

5. Para aplicar los nuevos certificados, reinicia NGINX con el siguiente comando.

service nginx restart

6. Ahora regresa a la pestaña SSL/TLS en Cloudflare, actualiza el modo de encriptación SSL/TLS haciendo clic en Completo (estricto), tal como se muestra a continuación.

Setting the Encryption mode to Full (strict).

Habilitando el cifrado SSL/TLS completo (estricto) con LetsEncrypt

El mayor inconveniente al utilizar un certificado de origen de Cloudflare es que solo es confiable para Cloudflare. Supongamos que necesitas un certificado totalmente confiable para el navegador, ya sea como respaldo o para un mayor control. En ese caso, LetsEncrypt ofrece la capacidad de generar un certificado adecuado.

Aunque puedes utilizar cualquier certificado válido, LetsEncrypt es una opción común para generar un certificado válido. Hay múltiples clientes de LetsEncrypt disponibles, pero este tutorial demuestra el cliente acme.sh.

Dado que ya estás en Cloudflare, uno de los mejores métodos para la provisión DNS con LetsEncrypt es a través de la opción DNS.

1. Primero, abre tu terminal e instala acme.sh mediante el comando curl.

curl https://get.acme.sh | sh
Installing the acme.sh client.

2. A continuación, crea o modifica el archivo account.conf ubicado en el directorio de instalación para agregar las claves API guardadas de Cloudflare. Estas claves se pueden encontrar en la sección Perfil -> Tokens de API del panel de control de Cloudflare.

Aunque puedes crear un token específico con permisos limitados, para los propósitos de este tutorial, aplica en su lugar la Clave de API Global, como se muestra a continuación.

SAVED_CF_Key='cloudflareglobalapikey'
 SAVED_CF_Email='[email protected]'

3. Genera el certificado mediante el siguiente comando. Observa que el comando a continuación indica al cliente acme.sh que utilice Cloudflare (dns_cf) para verificar (--dns) la propiedad del certificado. Luego establece el tiempo de espera (--dnsslep) en 20 segundos antes de emitir (--issue) el certificado para (-d) el dominio (test.adamlistek.me).

Cuando el comando se complete, a continuación, verás las rutas donde puedes encontrar tu certificado, la clave del certificado, el certificado de la CA intermedia y los certificados de la cadena completa.

acme.sh --issue --dns dns_cf --dnssleep 20 -d test.adamlistek.me
Generating the LetsEncrypt certificate.

4. Como antes, modifica la configuración del sitio NGINX para cambiar la ubicación del ssl_certificate y ssl_certificate_key. Asegúrate de reemplazar /home/user con la ubicación de tu instalación de acme.sh.

ssl_certificate /home/user/.acme.sh/test.adamlistek.me/test.adamlistek.me.csr;
 ssl_certificate_key /home/user/.acme.sh/test.adamlistek.me/test.adamlistek.me.key;

5. Aplica la nueva configuración reiniciando NGINX con el siguiente comando.

service nginx restart

6. Por último, actualiza el modo de encriptación SSL/TLS de Cloudflare yendo a la pestaña SSL/TLS, luego haz clic en Completo (estricto).

Setting the Encryption mode to Full (strict).

Conclusión

A lo largo de este tutorial, has aprendido cómo asegurar tu sitio con las diversas opciones de SSL/TLS proporcionadas por Cloudflare. ¡Agregar LetsEncrypt a la configuración SSL de tu Cloudflare también añade una opción de certificado de origen flexible y gestionado por el usuario!

Con el conocimiento de varias opciones para asegurar la conexión con el visitante del sitio, ¿trabajarás para lograr una conexión totalmente segura a tu servidor con SSL de Cloudflare?

Source:
https://adamtheautomator.com/cloudflare-ssl/