SNI: usar certificados SSL para varios dominios desde la misma IP (con IIS 8.0)

Cuando un navegador se conecta a un servidor web usando el protocolo comúnmente conocido como SSL (Secure Sockets Layer, de manera más formal SSL/TLS: Transport Layer Security), las comunicaciones se cifran entre ambos con el triple objeto de:

  • Evitar que se puedan inspeccionar (cifrado)
  • Evitar que se puedan modificar (no repudio)
  • Autenticar al servidor, y opcionalmente al cliente, aunque no es lo habitual (autenticación).

El handsahe de TLS se produce antes de que se intercambien cabeceras algunas entre cliente y servidor. Es decir, que en la comunicación que se inicia todo el tráfico va encriptado, incluso las propias peticiones, lo cual incluye el propio nombre de dominio al que nos conectamos. Esto presenta una dificultad para el servidor ya que hasta que recibe la petición y la descifra no sabe a qué dominio nos queremos conectar, pero si no lo sabe ¿cómo sabe qué certificado debe utilizar?

SSL-Secure

La respuesta tradicional a este problema ha sido que cada certificado SSL estuviese asignado a una única dirección IP. De este modo, según la dirección IP a la que se estuviese realizando la llamada, el servidor podría saber perfectamente qué certificado le correspondía, usar su clave privada para descifrar la petición inicial e iniciar el proceso de comunicación.

Esta solución, aunque válida, tenía varias pegas importantes, pero sobre todo estas dos:

  1. Si hay más de un dominio albergado en la misma IP, cualquier conexión a dicha IP a través e otros dominios no asociados al mismo certificado SSL generarían un aviso de seguridad por parte del navegador. El motivo es que se recibe la petición, se atiende con el certificado asociado a la IP, pero el nombre de dominio solicitado y el del certificado no coinciden.
  2. Si queríamos usar más de un certificado SSL en un servidor teníamos que disponer como mínimo de tantas direcciones IPs como certificados, lo cual encarece y complica la gestión del servidor. Además es un impedimento enorme para las empresas de hosting.

Para tratar de solucionar estas pegas se definieron unas extensiones al protocolo SSL/TSL llamadas Server Name Indication o SNI. Lo que hacen es que incluyen el nombre del dominio como parte de la negociación inicial (o handshake) de SSL/TSL. Esto permite al servidor saber cuál es el dominio al que nos queremos conectar y utilizar así el certificado apropiado. Gracias a estas extensiones los problemas mencionados anteriormente se pueden solventar de un plumazo.

Además permite la utilización de certificados SSL de tipo "wildcard", es decir, que sirven para cualquier subdominio de un dominio dado. Podemos comprar un certificado de tipo *.dominio.com y que sirva para cualquier subdominio de éste: subdom.dominio.com, otro.dominio.com, etc… lo cual puede ser muy útil (por cierto, estos certificados wildcard son mucho más caros que los normales).

Es más, en teoría con SNI podríamos tener un certificado SSL asociado a múltiples dominios diferentes a la vez, aunque en la práctica no se utilizan por la dificultad de gestión (por ejemplo, habría que anular el certificado y crear uno nuevo ante cualquier cambio en la lista de dominios).

…SIGUE LEYENDO PARA:

  • Saber qué soporte hay para SNI
  • Aprender a configurarlo en IIS 8.0

Gorroneando OneDrive: Cómo embeber un vídeo desde OneDrive en una página propia

A raíz de un artículo que escribí hace ya un tiempo en el que explicaba cómo crear enlaces de descarga directa para archivos de Google Drive o de OneDrive, un lector me preguntaba si se podría utilizar alguna técnica similar para poder embeber vídeos subidos a OneDrive en una página propia, albergada fuera de los servidores de Microsoft.

Me decía que si ponía una etiqueta iframe apuntando a la URL que yo indicaba cómo generar, que se mostraba la páginad e OneDrive, pero no se veía el vídeo. Claro, lógicamente, porque si haces eso estás simplemente enlazando con la página de OneDrive que visualiza el vídeo, pero no estás visualizando el vídeo en sí.

En OneDrive, al seleccionar un archivo de tipo Office (Excel, Word o PowerPoint), una de las opciones que te proporciona, aparte de compartirlo, es embeberlo. Por ejemplo, en esta imagen tengo seleccionada una hoja de cálculo de Microsoft Excel, y me permite generar el código para embeberla en cualquier página externa:

Embeber-Excel-OneDrive

Por el contrario, no permite embeber vídeos en páginas externas y no ofrece esa opción "Embed" en el caso de un vídeo.

Así que de entrada la respuesta es que no se puede.

Sin embargo, pensé que seguramente no sería tan difícil "hackear" un poco OneDrive para permitir usarlo como repositorio externo de vídeos que podamos usar en otras páginas. Y realmente se puede conseguir, aunque con algunas limitaciones.

Vamos a ver el proceso, y luego las limitaciones que tiene…

… SIGUE LEYENDO EN JASoft.org…

Cómo solucionar que no se vean los iconos especiales del explorador en TortoiseGit y similares

Todo programador que se precie utiliza para desarrollar algún sistema de control de código de fuente (no te engañes: aunque no trabajes en equipo es indispensable usar un sistema de estos). Entre los más conocidos están Apache Subversion/SVN, que es un sistema centralizado, y Mercurial o Git, dentro de la categoría de sistemas distribuidos (DVCS: Distributed Version Control Systems).

Sea cual sea el que uses, para los más conocidos existe una colección de aplicaciones llamadas TortoiseXXX que sirven para integrar de manera fácil este tipo de soluciones dentro del explorador de archivos de Windows. Así, tenemos TortoiseSVN para Subversion, TortoiseHg para Mercurial y TortoiseGit para Git.

Todos tienen un aspecto y funcionalidad muy similar (ya que parten del mismo código base) y lo que hacen básicamente dos cosas:

  • Añaden un menú contextual a las carpetas de tu sistema de modo que puedas gestionar repositorios de código de manera sencilla:

    TortoiseGit-menuContextual

  • Muestran el estado de cada archivo que esté bajo control de código mediante el uso de iconos superpuestos sobre el icono normal de un archivo o carpeta, indicando si está cambiado, ya respaldado, con conflictos, etc…:

    Tortoise-IconOverlays-Explorer

De este modo, es realmente fácil gestionar cualquiera de estos sistemas de control de código sin necesidad de recurrir a la línea de comandos ni a otras herramientas especiales.

Gracias a ello y a que son gratuitas y Open Source, Tortoise es una de las herramientas más populares para trabajo con sistemas de control de código fuente.

Un problema habitual que suele ocurrir, sobre todo si usas Dropbox, es que los iconos de esta de carpetas y archivos no funcionen.

El motivo es que otras aplicaciones que también superponen sus iconos en otras carpetas del sistema, y a veces por cuestión de orden pueden interaccionar.

Si no se muestran los iconos superpuestos y por lo tanto no sabes en qué estado están tus repositorios, prueba a hacer lo siguiente:

…SIGUE LEYENDO…

Escalabilidad: Granjas web con ASP.NET e IIS

Aunque hayamos diseñado nuestra aplicación web con el máximo cuidado y tratando de que esté lo más optimizada posible, si tiene éxito y acaba creciendo mucho en cuanto a necesidades de atender usuarios y peticiones, llegará un momento en el que no de más de si y sea necesario hacerla crecer.

Una aplicación que reciba simplemente unas pocas peticiones por segundo va a funcionar sin problema en cualquier servidor barato, pero si el número de peticiones crece y necesitamos atender a decenas, cientos o miles de peticiones por segundo es el momento de pensar en la escalabilidad y el crecimiento.

La escalabilidad de un sistema informático se define como la capacidad de éste para expandirse según las necesidades que se deriven del uso que se le va a dar. De este modo decimos que una aplicación web es escalable si es capaz atender a un número cada vez mayor de usuarios sin necesidad de cambiar el código de la aplicación.

Fundamentalmente existen dos maneras de escalar:

  • Escalado vertical: implica añadir más recursos físicos al sistema actual para que pueda atender más solicitudes. Así, por ejemplo, se le añaden más procesadores o más memoria a un servidor. El escalado vertical presenta un límite claro y llega un punto en el que la aplicación necesita ser rediseñada para poder escalar más. En inglés a este tipo de escalado se le denomina "Scale Up".
  • Escalado horizontal: en este caso el escalado se consigue simplemente añadiendo más nodos al conjunto del sistema, por ejemplo, poniendo otra máquina en paralelo a funcionar. Este tipo de escalado es más sencillo y no tiene límite, pero implica que las aplicaciones deben estar adaptadas para poder hacerlo, pues implican coordinación, replicación, etc… Se denomina comúnmente como "Scale Out".

El escalado vertical tiene un límite, mientras que el horizontal no.

Evidentemente el escalado que debiéramos buscar siempre es el horizontal. Al menos tener la posibilidad de hacerlo cuando sea necesario. Si nos limitamos a añadir más memoria y procesador al servidor, cuando llegue el momento (y si tenemos suerte llegará) de que la máquina no soporte más, será necesario que pasemos a escalar de manera horizontal. Y si nuestra aplicación no está preparada lo pasaremos muy mal.

SIGUE LEYENDO para aprender:

  • Qué es una Web Farm o Granja de Servidores
  • Cómo funciona el mantenimiento de sesión en estas infraestructuras
  • Cómo podemos configurar ASP.NET para usar un servidor de estado o una base de datos remota para mantener la sesión
  • Otros detalles importantes

Cómo solucionar el error con "Microsoft.PowerShell_profile.ps1" en PowerShell

powershell-logoComo ya os he contado hace poco, PowerShell es una herramienta avanzada de línea de comandos para Windows que trata de llevar a este sistema la potencia de otros intérpretes de comandos (fundamentalmente el shell bash para UNIX), muy extendidos en otros sistemas operativos.

Si estás trabajando con alguna herramienta de administración desde línea de comandos puede que al cargar PowerShell te muestre el siguiente error:

File Microsoft.PowerShell_profile.ps1 cannot be loaded because running scripts is disabled on this system.

o en español "El archivo Microsoft.PowerShell_profile.ps1 no se ha podido cargar porque la ejecución de scripts está deshabilitada en este sistema":

Error-con-Microsoft-PowerShell_profile-1

Pulsa para aumentar

Este error se debe a que, por defecto, los permisos de ejecución de scripts externos están restringidos en PowerShell y solamente nos permite ejecutar comandos interactivos, es decir, directamente en la consola. El archivo que menciona el mensaje de error se crea por parte de algunas aplicaciones (por ejemplo posh–git) para cargar un entorno de ejecución personalizado para el usuario (en el caso de posh-git, por ejemplo, para modificar la salida del prompt de modo que nos indique el estado de un repositorio Git cuando entramos en él).

Dado que los permisos por defecto no permiten la ejecución de archivos de comandos PowerShell (con extensión .ps1), la ejecución falla y obtenemos ese error.

SIGUE LEYENDO para descubrir:

  • Qué políticas de ejecución existen
  • Cómo cambiarlas
  • Cómo librarte de ese error