Tomaste la decisión de incorporar SSL/TLS a tu aplicación Web. ¡Felicitaciones! Es un paso más hacia más seguridad y confianza con tus usuarios.
Es muy probable que luego de activar el servicio y certificado, hayas encontrado que en tu sitio:
- No cambió nada
- Se rompieron la mitad de los enlaces
Primero lo primero
Cuando escribes una URL tu navegador, éste se conecta al servidor web utilizando un protocolo. Este va a ser http o https (http+ssl). Posiblemente, solo escribas www.tusitio.com sin especificar el protocolo, en ese caso el navegador lo va a elegir por vos. Por defecto, la mayoría va a usar http.
Es decir, salvo que tu usuario lo especifique a mano, lo más probable es que aún teniendo un certificado SSL instalado, todos sigan navegando tu sitio sin usarlo.
Auto HTTPs vs Configuración Manual
Todas las configuraciones y variantes que describimos abajo puede ser evitadas -en casi todos los casos- simplemente activando el servicio de Auto HTTPs para tu cuenta.
Al activar Auto HTTPs nosotros nos encargamos automágicamente de los redirects http y de los encabezados Content-Security-Policy para resolver enlaces forzados a http.
Pero si tu sitio tiene alguna particularidad, o quieres saber como hacer todo esto manualmente, seguí leyendo.
Nota: AutoHTTPs se activa por defecto cuando activas SSL en tu sitio. Puedes desactivarlo si prefieres realizar la configuración de forma manual.
Redireccionar http a https
Hay distintas formas de direccionar los accesos a tu sitio a https (¡y aprovechar todas las ventajas que te ofrece!)
Utilizando reglas .htaccess
RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule (.*) https://%{HTTP_HOST}/$1 [R=301,L]
Esto lo que dice es: Si el acceso que esta llegando no utiliza https, generar un redirect 301 y terminar la ejecución.
Directo desde la aplicación
Si bien esto no abarca el sitio completo, muchas veces es suficiente con un cambio en el inicio. Por ejemplo para un index.php
if($_SERVER['HTTP_X_FORWARDED_PROTO'] != 'https'){
header("HTTP/1.1 301 Moved Permanently");
header('Location: https://' . $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"] . ');
exit();
}
Reemplazar todos los enlaces que contengan http por https
Una vez resuelto el redireccionamiento inicial, es importante que tus enlaces no digan https:// por ningún lado. De ser así, le estarías indicando al navegador que quieres que ese enlace en particular debe ser solicitado sin SSL. Esto no solamente es contrario al objetivo, sino que además va a generar alertas al usuario.
Si usas enlaces relativos no vas a tener que cambiar nada. Si usas enlaces absolutos, posiblemente tengas que cambiar todo.
Veamos este ejemplo:
Incorrecto:
Contactanos
Correcto:
<a href="/contacto">Contactanos
Contactanos
Content-Security-Policy
El encabezado HTTP Content-Security-Policy permite indicarle a un navegador que debe ignorar el https:// en los enlaces, y asumir que dichos enlaces dicen https:// en su lugar. De esta forma, podemos lograr una transición fácil a usar SSL, sin preocuparnos porque nuestros enlaces estén todos rotos.
Puedes generar la siguiente regla .htaccess:
`Header always set Content-Security-Policy "upgrade-insecure-requests;"
WordPress a veces necesita una ayuda adicional
Si tu sitio en WordPress empieza a arrojar un error de ERR_TOO_MANY_REDIRECTS es posible que tengas que ajustar un poco el archivo wp-config.php
if ( $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https' )
{
$_SERVER['SERVER_PORT'] = 443;
}
Y si aun permanece el error, definiendo de forma forzada las configuraciones WP_HOME y WP_SITEURL también en wp-config.php
define('WP_HOME','https://www.tusitio.com');
define('WP_SITEURL','https://www.tusitio.com');
PrestaShop, también:
PrestaShop a veces, puede insistir en que el sitio cargue con http por más que uno quiera mandarlo a https. Similar a WordPress, termina arrojando ERR_TOO_MANY_REDIRECTS
Opción 1: Desde el Administrador de PrestaShop, habilitar SSL:
Ir a Preferencias -> General y tildas las opciones Activar SSL y Activar SSL en todas las páginas
Opción 2: Alternativamente, desde phpMyAdmin, o cualquier administrador de base de datos, modificar le valor de PS_SSL_ENABLED.
UPDATE ps_configuration SET value
=1 WHERE name
="PS_SSL_ENABLED"; UPDATE ps_configuration SET value
=1 WHERE name
="PS_SSL_ENABLED_EVERYWHERE";
En caso que tengas habilitado el sistema de caché nativo de PrestaShop, es posible que debas vaciarlo para que el cambio haga efecto. Esto lo puedes hacer Ingresando a Preferencias -> Performance en versiones <1.5 o a Parámetros Avanzados -> Performance en versiones más nuevas, desactivando la opción de Caché y volviéndola a activar.
Si eso no funciona, también es posible eliminar manualmente los contenidos la carpeta cache/cachefs/ via FTP o SSH.