Cómo proteger mi sitio de WordPress con SSL

Hace algunos días anunciábamos los cambios que está implementando Google en su motor de búsqueda, relacionados con la idea de “subir” el ranking de los sitios que trabajen bajo un protocolo de navegación seguro (SSL/TLS) en los resultados de búsqueda.

Esto, sumado a los acontecimientos que en los últimos meses han demostrado la necesidad de tomar mayores recaudos a la hora de hablar de seguridad en Internet, nos lleva a evaluar diferentes alternativas para proteger nuestra información. En este post les ayudaré a implementar un certificado de seguridad (SSL/TLS) en un sitio de WordPress self-hosted.

WordPress.com no soporta el uso del HTTPS en dominios personalizados. Sin embargo, sí lo permite en aquellos blogs con dominio finalizado en wordpress.com. Más info aquí.

TLS (Transport Layer Security, por sus siglas en inglés) es uno de los protocolos de cifrado de información comunmente utilizados en Internet para proteger los datos enviados entre dos equipos. Más conocido como “HTTPS” o “HTTP con candado”, TLS y SSL, su antecesor, permiten a los usuarios asegurarse que los datos que intercambian en un sitio web viajan de manera segura y no puedan ser interceptados por usuarios malintencionados.

Hosting y SSL

Para empezar, debemos asegurarnos que nuestro proveedor de hosting permita agregar certificados de seguridad en el plan que tenemos contratado. Algunos proveedores solo permiten la instalación de certificados en planes del tipo VPS, no dejando muchas alternativas a los usuarios de hosting compartido. Otros, solo aceptan certificados emitidos por sus propias entidades.

NEOLO, proveedor de hosting de Argentina, nos cuenta que a partir de mañana todos sus planes de almacenamiento admitirán certificados SSL.

CoriaWeb, desde España, confirma que desde hace tiempo ya aceptan certificados SSL en todos sus planes de almacenamiento.

Generar un certificado

Una vez confirmado esto, necesitamos generar el certificado de seguridad. Los pasos a seguir variarán de acuerdo al proveedor de hosting, por lo que les recomiendo consultar con ellos cómo obtener la solicitud de firma de certificado (CSR, por sus siglas en inglés). El proceso es bastante sencillo, y casi todos los emisores de certificados brindan instrucciones al respecto.

Los certificados son emitidos por entidades certificantes de nivel internacional, como Symantec, GoDaddy, USERTrust, Comodo SSL, Thawte y sus revendedores. GoDaddy, por ejemplo, ofrece un año de certificado de seguridad gratuito con su plan de almacenamiento avanzado, y los años subsiguientes a solo 70 dólares. Su plataforma de hosting compartido acepta certificados propios y de terceros.

Comodo SSL ofrece un certificado de prueba por 90 días (mucho más que la competencia). Este certificado nos permitirá probar si nuestra plataforma es capaz de soportar y procesar el tráfico HTTPS. Para comenzar, pueden ingresar aquí.

¡Manos a la obra!

Ya con el certificado emitido e instalado en nuestra plataforma de almacenamiento, podremos poner manos a la obra en el blog. Existen decenas de plugins (como WordPress HTTPS) que hacen el trabajo sucio, pero vamos a hacerlo por nuestra cuenta.

Lo primero que necesitamos es actualizar la URL del sitio de WordPress. Para ello, desde el escritorio de WordPress, haremos clic en Ajustes > Generales y reemplazaremos http por https en las dos direcciones que allí aparecen, tal como podemos observar en la siguiente imagen:

como-proteger-mi-sitio-de-wordpress-con-ssl_002

Luego agregaremos la siguiente línea en el archivo wp-config.php (el mismo en el que especificamos la información de conexión a la base de datos de WordPress), para forzar el cifrado de los datos intercambiados en el inicio de sesión y el panel de administración del blog:

define('FORCE_SSL_ADMIN', true);

La línea debe ir justo antes del “require_once”, de la siguiente manera:

define('ABSPATH', dirname(__FILE__).'/');
define('FORCE_SSL_ADMIN', true);
require_once(ABSPATH.'wp-settings.php');

.htaccess y links

En este momento, nuestro blog ya es navegable por HTTPS. Sin embargo, también lo es por HTTP. Si queremos que todas las páginas sean navegadas exclusivamente por HTTPS, debemos hacer un pequeño ajuste en el archivo .htaccess, que se encuentra en el directorio raiz del sitio.

Agregaremos el siguiente fragmento, reemplazando www.pablofain.com por el dominio en cuestión, antes de la configuración de WordPress:

#RewriteEngine On
RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://www.pablofain.com/$1 [R=301,L]

El archivo quedaría de la siguiente manera:

#RewriteEngine On
RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://www.pablofain.com/$1 [R=301,L]

# BEGIN WordPress
RewriteEngine On
RewriteBase /
RewriteRule ^index.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
# END WordPress

Por otra parte, si en alguna oportunidad hemos utilizado links absolutos (aquellos conformados por la URL completa, por ej.: http://www.pablofain.com/nombre-del-post), nos gustará reemplazarlos por otros en formato relativo. Para ello les recomiendo el plugin Search and replace. ¡Antes de hacer cualquier cambio, hagan un backup de su base de datos!

Contenido no seguro

Algunos temas y plugins utilizan URLs absolutas, por lo que parte del contenido del sitio puede no transmitirse de manera segura. El sitio Why No Padlock? nos permite identificar y corregir el contenido que no viaja por HTTPS.

En la siguiente entrega les mostraré cómo configurar el inicio de sesión unificado, que les permitirá ingresar a su blog utilizando una cuenta de WordPress.com.

¡Hasta la próxima!

21 comentarios en “Cómo proteger mi sitio de WordPress con SSL”

  1. Hola, tengo problemas para configurar mi certificado… Ya subi los archivos al directorio /ssl/certs, ademas hay archivos en otros directorios como /ssl/csrs/ y /ssl/keys No te que el archivo *.ca-bundle tiene el codigo 3 veces.

    • Hola! Por lo que veo en tu web gutielua.com, tu certificado SSL está correctamente instalado. Tal vez te podría sugerir que agregues en el archivo .htaccess el siguiente fragmento para que redireccione todas las páginas a HTTPS:

      #RewriteEngine On
      RewriteEngine On
      RewriteCond %{SERVER_PORT} 80
      RewriteRule ^(.*)$ https://gutielua.com/$1 [R=301,L]

      Saludos!

  2. Gracias Pablo, ya por ultimo; te mande un correo preguntándote acerca del formato de contacto que usas en tu blog. Es a través de un plugin o template?

    Saludos desde Monterrey, México!
    Andres

    • Querido ederbay,

      No, no es necesario que ajustes nada en Google Analytics ya que esta herramienta monitorea el dominio sin discriminar el protocolo que éste utilice (a diferencia de las herramientas para administradores de web de Google).

      ¡Hasta pronto!

  3. Hola, acaban de activar el certificado SSL en mi sitio y tengo un par de problemas… en el pié de página tengo dos hipervínculos con http//: y me los fuerza a https:// lo que da lugar a error de seguridad en la página destino.

    Luego en los post, los videos (tanto youtube como vimeo) se muestra espacio en blanco…

    Como puedo indicar a un hiperenlace que no se fuerce a https?… y que los videos se muestren teniendo ssl activo?…

    GRACIAS

  4. Hola Pablo,

    gracias por tu rápida respuesta.

    josecostaros.es es mi sitio pero actualmente estoy emprendiendo creando un ecommerce – woocommerce y he creído oportuno activar SSL.

    El caso es que he activado SSL a todo el sitio, no se si quizá deba activarlo solo en aquellas páginas que lo requieran… como todo lo relacionado con datos personales y pago…

    El sitio que estoy creando es rincondellicor.com y aunque redirige a una página “proximamente” si me quieres ayudar y dar un vistazo te puedo dar acceso admin por priv y puedes verla completa, aun sin terminar. Y luego cometamos la experiencia aquí por si sirve a otros lectores.

    Te envío un cordial saludo.

    TW @josecostaros

    • Hola Jose! A simple vista tu página de mantenimiento está llamando recursos via HTTP, por lo que puedo imaginar que el sitio final también lo debe estar haciendo.

      Te sugiero revises el código buscando URLs absolutos y las reemplaces por relativas. Por ej.:

      URL absoluta: http://rincondellicor.com/imagen1.JPG
      URL relativa: rincondellicor.com/imagen1.JPG

      Esto permitirá que el navegador del usuario se encargue de utilizar el protocolo con el que carga el resto de la página.

      Puedes hacer una prueba sencilla ingresando a https://www.whynopadlock.com/ y verificando los resultados de tu página de mantenimiento (https://rincondellicor.com/proximamente/). Allí podrás observar que las fuentes que utilizas son llamadas por HTTP, algo que debe estar ocurriendo en todo tu sitio (revisa la hoja de estilos, ya que las fuentes suelen estar allí).

      Luego me cuentas qué tal te ha ido.

      Un abrazo!

  5. Hola Pablo,

    utilizar las URL Relativas me ha servido de mucho, aún así continuaba forzando a https:// los enlaces externos del pié de página dentro del sitio.

    De casualidad puse HTTP:// en lugar de http:// y……. funciona. ¿tiene sentido?…. no lo se, pero si lo pongo minúscula me lleva a https://.

    Gracias por tu ayuda!!!

    Saludos.

    • Hola nuevamente Jose,

      Déjame ver si comprendo… Tu quieres que tu sitio contenga mantenga enlaces HTTP en lugar de HTTPS? Puedo preguntar por qué?

      Te sugerí utilizar vínculos relativos, ya que se acostumbra dejar que todo el contenido del dominio pase por HTTPS. De lo contrario, navegadores como Google Chrome o Firefox mostrarán una advertencia asegurando que partes del contenido no se transfiere de manera segura, y ocasionando confusión entre tus visitantes.

      Por ej., si observas http://www.pablofain.com verás que todo el contenido es transferido via HTTPS (incluyendo imágenes y logotipos).

      Pablo

  6. Hola Pablo,

    Espero y te encuentres bien.

    Tengo un certificado de seguridad SSL en uno de mis sitios web, pero tengo una duda que no he podido resolver.

    Cuando estoy en la administración de WordPress, o entro a iniciar sesión es el candado color verde, pero cuando estoy viendo el sitio web tiene un icono amarillo de advertencia.

    No entiendo el por que sucede esto, creo que se me fue alguna configuración, si tienes alguna idea, tu ayuda me seria util.

    Gracias por tu tiempo!
    Saludos!

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.