Desbloquea el contenido mixto envolviendo http en https en un túnel SSL

¡Hola amig@s! ¿Qué tal la semana? Hoy vengo con un tip de programación súper técnico principalmente pensado para programadores. Por favor, los que no sois tan técnicos no os agobiéis con este post y tened un poco de paciencia. Seguid visitando mi blog 😀 que pronto volveré con algo menos aburrido, por así decir, que no suene tan a chino mandarín y que podrás compartir con tus amigos.

Hoy vamos a hacer que nuestra aplicación web segura HTTPS envuelva en HTTPS las peticiones HTTP inseguras que intercambia con servicios externos. O dicho de otra manera, vamos a aprender a desbloquear el contenido mixto.

Advertencia: recurso no seguro

Esta semana me encontraba trabajando en la GUI de una app web que tenía https y resulta que la parte cliente, la GUI (Interfaz Gráfica de Usuario), tenía que comunicarse por medio de jQuery con un servicio web externo que no respondía en https, sino que respondía en http.

Como consecuencia de este desajuste HTTPS/HTTP que había entre la GUI y el web service, el navegador web bloqueaba la respuesta del servidor, lanzando una advertencia al usuario que le decía que dicho recurso no era seguro.

Recuerda…

Seguro que alguna vez te ha pasado esto que explico hoy, este problema se llama contenido mixto bloqueado.

Si tu website trabaja con HTTPS todos los recursos que sirve bajo HTTP quedan bloqueados de forma predeterminada por el navegador, degradándose así de forma notable la usabilidad de la aplicación. ¡Los usuarios recibirán un mensaje de advertencia comunicándoles que tu web sirve contenido no seguro!

¿Cómo puedo desbloquear los recursos HTTP?

En mi caso concreto, esta aplicación jQuery a la que me refiero en este post, hacía la llamada HTTP insegura para subir un archivo. Para solucionar esto, pues, tuve que cambiar la llamada de mi app jQuery: si antes el código JS llamaba al web service HTTP no seguro, ahora llamaría a una acción de controlador de mi servidor protegido con HTTPS, y desde dicha acción de controlador, ya en el servidor, se haría la llamada al web service de forma transparente para el usuario.

Túnel SSL

Un túnel SSL

La siguiente acción de controlador MVC pertenece al framework PHP Slim y maneja la subida de archivos con el componente Upload de codeguy (Josh Lockhart), el mismo tipo que está detrás de Slim.

En resumidas cuentas, en el servidor tienes que lidiar con el protocolo HTTP de forma completamente manual; debes recoger la petición HTTP y volver a montar las cabeceras y el cuerpo para, justo a continuación, reenviarla de nuevo al servicio web externo y recoger la respuesta.

Y esto es todo por hoy, ¡espero que este truco te resulte práctico! ¿Lo compartes con tus amigos y amigas?

También te puede interesar leer esto