HTTP

Redirigir HTTP a HTTPS

Redirigir HTTP a HTTPS
Ya sea que esté utilizando certificados autofirmados o certificados de una CA reconocida, necesita una forma de integrarlos con sus servicios. Uno de los casos de uso más típicos es el de un servidor HTTP, podría ser un servidor web o un servidor API REST, pero debe configurarse para ser seguro.

La mayoría de los servidores web como nginx y apache escuchan en el puerto 80 de forma predeterminada y necesitan un poco de configuración antes de comenzar a usar los certificados para cifrar el tráfico. A pesar de tenerlo configurado, el servidor web aún puede atender el tráfico HTTP sin problemas. Por lo tanto, los visitantes de su sitio web solo escribirán http: // ejemplo.com en lugar de https: // ejemplo.com y todo el tráfico permanecerá sin cifrar para ellos. Para evitar este problema, debemos configurar los servidores HTTP de modo que ellos mismos redirijan todo el HTTP a HTTPS.

La configuración que tengo es usar un FQDN con una IP pública, por lo que emitiré un certificado SSL de LetsEncrypt en lugar de emitir uno autofirmado. Dependiendo del tipo de servidor web que esté utilizando, puede hacerlo de varias formas. Pero el flujo general es así:

  1. Obtenga un certificado firmado de una CA. En nuestro caso, este será LetsEncrypt
  2. Configure el servidor web para utilizar la clave de cifrado para cifrar el tráfico HTTP saliente en el puerto 443. Este es el puerto HTTPS predeterminado.
  3. Redirigir todas las solicitudes entrantes en el puerto 80 (que es HTTP sin cifrar) al puerto 443, permitiendo así sesiones cifradas para todas las conexiones entrantes.

Demostremos varias formas de lograr lo que queremos. Primero está la solución más fácil que usa Certbot.

1. La forma más sencilla: uso de complementos de Certbot para Nginx o Apache

Usaré Nginx como ejemplo para este servidor. Si está ejecutando uno diferente, como Apache o HAProxy, simplemente visite la página oficial de Certbot y seleccione su sistema operativo y el servidor web de su elección. Para Nginx en Ubuntu 18.04, estos son los comandos que necesitarías.

Primero, actualice su índice de repositorio.

$ sudo apt-get update
$ sudo apt-get install software-properties-common

Debería agregar los repositorios de terceros necesarios, que es posible que Ubuntu no haya habilitado de forma predeterminada.

$ sudo add-apt-repository universe
$ sudo add-apt-repository ppa: certbot / certbot
$ sudo apt-get update

Y luego instale el paquete certbot con complementos de Nginx, usando el comando a continuación.

$ sudo apt-get install certbot python-certbot-nginx

Las instrucciones serán diferentes para las diferentes plataformas e instalarán complementos para el servidor web si están disponibles. La razón por la que los complementos nos hacen la vida mucho más fácil es porque pueden editar automáticamente los archivos de configuración en el servidor web para redirigir el tráfico también. La desventaja podría ser que si está ejecutando un servidor muy personalizado para un sitio web preexistente, entonces el complemento puede romper algunas cosas allí.

Para sitios web nuevos o configuraciones muy simples, como un proxy inverso, el complemento funciona sorprendentemente bien. Para obtener los certificados y redirigir el tráfico, simplemente ejecute el siguiente comando y siga las diversas opciones interactivas a medida que el paquete lo guía a través de ellas.

$ sudo certbot --nginx

Producción:

certbot --nginx
Guardando el registro de depuración en / var / log / letsencrypt / letsencrypt.Iniciar sesión
Complementos seleccionados: Authenticator nginx, Installer nginx
Ingrese la dirección de correo electrónico (utilizada para renovaciones urgentes y avisos de seguridad) (Ingrese 'c' t
cancelar): YOUREMAILHERE @ EJEMPLO.COM
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Lea los Términos de servicio en
https: // permite encriptar.org / documents / LE-SA-v1.2-noviembre-15-2017.pdf. Debes
de acuerdo para registrarse con el servidor ACME en
https: // acme-v02.api.vamos a cifrar.directorio org /
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(A) gree / (C) ancel: A
 
..
No se encontraron nombres en sus archivos de configuración. Por favor ingrese su dominio
nombre (s) (separados por coma y / o espacio) (Ingrese 'c' para cancelar): SUBDOMAIN.NOMBRE DE DOMINIO.TLD
..
 
Elija si desea o no redirigir el tráfico HTTP a HTTPS, eliminando el acceso HTTP.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: Sin redireccionamiento: no realice más cambios en la configuración del servidor web.
2: Redirigir: redirigir todas las solicitudes a un acceso HTTPS seguro. Elija esto para
nuevos sitios, o si está seguro de que su sitio funciona en HTTPS. Puedes deshacer esto
cambiar editando la configuración de su servidor web.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Seleccione el número apropiado [1-2] luego [ingresar] (presione 'c' para cancelar): 2
Redirigir todo el tráfico en el puerto 80 a ssl en / etc / nginx / sites-enabled / default
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Felicidades! Ha habilitado con éxito https: // SUBDOMAIN.NOMBRE DE DOMINIO.TLD
 
Debe probar su configuración en:
https: // www.ssllabs.com / ssltest / analyse.html?d = SUBDOMINIO.NOMBRE DE DOMINIO.TLD
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

NOTAS IMPORTANTES:
- Felicidades! Su certificado y cadena se han guardado en:

/ etc / letsencrypt / live / SUBDOMAIN.NOMBRE DE DOMINIO.TLD / cadena completa.pem

Su archivo de claves se ha guardado en:

/ etc / letsencrypt / live / SUBDOMAIN.NOMBRE DE DOMINIO.TLD / clave privada.pem

Como se muestra en el ejemplo anterior, solo tiene que proporcionar una dirección de correo electrónico válida y su nombre de dominio para obtener el certificado. Este certificado está registrado en / etc / letsencrypt / live / SUBDOMAIN.NOMBRE DE DOMINIO.TLD. El último directorio llevará el nombre de su FQDN.

El aspecto más importante es seleccionar la opción Redirigir y hará el trabajo de redirigir todo el tráfico HTTP a HTTPS. Si tiene curiosidad sobre cuáles son estos cambios, puede inspeccionar los archivos de configuración en / etc / nginx / para entender la esencia.

2. Editar los archivos de configuración

Si desea configurar manualmente su servidor para usar los certificados. Para obtener los certificados usando certbot, ejecute:

$ sudo certbot certonly

Como antes, los certificados se guardan en el directorio / etc / letsencrypt / live / yourdomainname.com /

Ahora podemos configurar Nginx para usar los archivos en este directorio. Lo primero es lo primero, me deshaceré del diseño de directorio específico de Debian. El archivo de configuración del sitio de la página predeterminada es / etc / nginx / sites-available / default subdirectorio con un enlace simbólico a / etc / nginx / site-enabled.

Simplemente eliminaré el enlace simbólico y moveré el archivo de configuración a / etc / nginx / conf.d con un .conf extensión solo para mantener las cosas más generalizadas y aplicables a otras distribuciones también.

$ sudo rm / etc / sites-enabled / default
$ sudo mv / etc / nginx / sites-available / default / etc / nginx / conf.d / predeterminado.conf
$ sudo service nginx reiniciar

Modificaré este archivo de configuración predeterminado para demostrar cómo está habilitado TLS.

Los siguientes son los contenidos dentro de su archivo de configuración predeterminado, sin las secciones comentadas. Las secciones resaltadas son las que debe agregar a la configuración de su servidor para habilitar TLS y el último bloque en este archivo de configuración detecta si el esquema está usando TLS o no. Si no se usa TLS, simplemente devuelve un código de redireccionamiento 301 al cliente y cambia la URL para usar https en su lugar. De esta forma, no perderá usuarios

servidor
escuchar 80 default_server;
escuchar [::]: 80 default_server;
escuchar 443 ssl;
ssl_certificate / etc / letsencrypt / live / SUBDOMAIN.DOMINIO.TLS / cadena completa.pem;
ssl_certificate_key / etc / letsencrypt / live / SUBDOMAIN.DOMINIO.TLD / clave privada.pem;
ssl_session_cache compartido: le_nginx_SSL: 1m;
ssl_session_timeout 1440m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers "ECDHE-ECDSA-CHACHA20-POLY1305: ECDHE-RSA-CHACHA20-POLY1305: ECDHE-
ECDSA-AES128-GCM-SHA256: ECDHE-RSA-AES128-GCM-SHA256: ECDHE-ECDSA-AES256
-GCM-SHA384: ECDHE-RSA-AES256-GCM-SHA384: DHE-RSA-AES128-GCM-SHA256: DHE-RSA-AES256
-GCM-SHA384: ECDHE-ECDSA-AES128-SHA256: ECDHE-RSA-AES128-SHA256: ECDHE-ECDSA-AES128
-SHA: ECDHE-RSA-AES256-SHA384: ECDHE-RSA-AES128-SHA: ECDHE-ECDSA-AES256-SHA384: ECDHE
-ECDSA-AES256-SHA: ECDHE-RSA-AES256-SHA: DHE-RSA-AES128-SHA256: DHE-RSA-AES128-SHA: DHE
-RSA-AES256-SHA256: DHE-RSA-AES256-SHA: ECDHE-ECDSA-DES-CBC3-SHA: ECDHE-RSA-DES-CBC3
-SHA: EDH-RSA-DES-CBC3-SHA: AES128-GCM-SHA256: AES256-GCM-SHA384: AES128-SHA256: AES256
-SHA256: AES128-SHA: AES256-SHA: DES-CBC3-SHA:!DSS ";
root / var / www / html;
índice de índice.índice html.índice htm.nginx-debian.html;
nombre del servidor _;
localización /
try_files $ uri $ uri / = 404;

if ($ esquema != "https")
return 301 https: // $ host $ request_uri;

 

Hay algunos parámetros adicionales agregados a este archivo de configuración. Incluyendo parámetros que declaran el tiempo de espera, la versión de TLS que debe usar y qué cifrados de cifrado usará el servidor. Esto fue tomado de las configuraciones recomendadas (pero opcionales) de Certbot para Nginx.

Ahora, verifique si el archivo de configuración es válido y reinicie el servidor.

$ sudo nginx -t
nginx: el archivo de configuración / etc / nginx / nginx.conf sintaxis está bien
nginx: archivo de configuración / etc / nginx / nginx.conf prueba es exitosa
$ sudo service nginx reiniciar

Conclusión

Puede aplicar el mismo enfoque para aplicaciones y servicios web más complicados que necesitan HTTPS. Letsencrypt le permite emitir certificados para varios nombres de dominio a la vez, y puede alojar varios sitios web detrás de su servidor web nginx con bastante facilidad. Si siguió el ejemplo anterior, intente llegar a su sitio web mediante http (http: // SUBDOMAIN.DOMINIO.TLD) y será redirigido a HTTPS automáticamente.

Para otros servidores web, como Apache, use el complemento certbot apropiado o consulte su documentación oficial.

Cómo desarrollar un juego en Linux
Hace una década, no muchos usuarios de Linux predecían que su sistema operativo favorito algún día sería una plataforma de juegos popular para videoju...
Puertos de código abierto de motores de juegos comerciales
Las recreaciones gratuitas, de código abierto y de motores de juegos multiplataforma se pueden usar para jugar títulos de juegos antiguos y también al...
Los mejores juegos de línea de comandos para Linux
La línea de comandos no es solo su mayor aliado cuando usa Linux, también puede ser la fuente de entretenimiento porque puede usarla para jugar muchos...