IIS 8.5 (y IV): Implementando SSL

En este último post de esta serie donde estamos repasando las funcionalidades de IIS 8.5, nos vamos a centrar en la creación de páginas seguras mediante el protocolo https. En la actualidad la mayor parte de páginas donde necesitamos validarnos emplean este protocolo para proteger nuestra privacidad, así mismo los buscadores como Google o Bing, permiten realizar las búsquedas también en modo seguro.

El https está basado en TLS/SSL que es el protocolo que se encarga de dar seguridad al protocolo de hipertexto. TLS/SSL proporciona privacidad (cifrado de las comunicaciones), integridad y autenticación. Desde que Netscape desarrollara el SSL por el año 1996, se ha convertido en un auténtico estándard de la seguridad en las comunicaciones web.

En este video de Intypedia, teneis una introducción a este protocolo y a su funcionamiento:

Si nos centramos en nuestro caso práctico, vamos a ver cómo implementar una página segura con IIS 8.5.

El primer punto a considerar, es qué tipo de certificados vamos a utilizar, en webs públicas usaremos certificados emitidos por entidades de certificación como Symantec o Comodo que son aceptadas por los navegadores y por tanto no generan ningún aviso al usuario. Para aplicaciones internas, como una intranet, podemos crear nuestros propios certificados.

Una de las grandes novedades que apareció en 2012 fue la posibilidad de disponer de diversas sites seguras en el servidor. Anteriormente, debíamos definir IPs virtuales en el servidor y asignar a cada página segura una IP diferente.

En primer lugar vamos a crear un certificado propio, para ello en el gestor de IIS vamos al panel de configuración para el servidor y clicamos sobre Server Certificates.

iis_secure01En la barra de la derecha, seleccionamos la opción de crear un certificado autofirmado (Self-Signed Certificate):

iis_secure02

Nos solicita el nombre que deseamos poner al certificado y donde se quiere ubicar, en este caso Web Hosting

iis_secure03

Ahora, vamos al site que queremos securizar y en la barra de la derecha, seleccionamos Edit site -> Bindings y añadimos un nuevo binding o enlace, donde configuraremos la conexión segura y indicamos el certificado a usar:

iis_secure04Vamos a la configuración de SSL y seleccionamos la opción de requerir SSL. Aquí nos da la opción de solicitar o no certificado al cliente. Habitualmente, los clientes no tendrán certificado, pero si queremos realizar un site donde los usuarios deban usar un certificado propio para poder acceder, sería aquí donde deberíamos habilitar la opción.

iis_secure05.:

Probamos ahora la conexión con nuestro site y observamos las características de nuestro certificado:

iis_secure06Si ahora intentamos acceder al mismo site sin poner https, observamos como aparece un error 403, de manera que sería conveniente que independentiemente que el usuario introduzaca https o no, se abra siempre la conexión en mode seguro. Configurar este comportamiento, es extremadamente sencillo: nos vamos a personalizar los errores del site y para el error 403, seleccionamos redirección y como URI indicamos https://url de nuestro site.

Si lo que queremos es utilizar un certificado comercial, el proceso también es muy sencillo, en la opción de certificados, seleccionamos la opción de crear una petición de certificado (request). Posteriormente, nos vamos a la autoridad de certificación que elijamos e iniciar el proceso de solicitud, en este paso nos va a pedir copiar el contenido del archivo de solicitud en un textbox.

Una vez finalizado el proceso, nos enviarán un archivo que será el que tendremos que seleccionar desde la opción Complete Certificate Request. De esta manera, ya tendremos nuestro certificado listo para ser utilizado.

IIS 8.5 (III): Autenticación

Seguimos con nuestra serie de posts dedicados a IIS 8.5, en esta ocasión veremos qué métodos de autenticación nos proporciona el servidor web para validarnos contra nuestros sitios web.

La autenticación de los usuarios es una de las tareas más importantes a la que se enfrentan los adminitradores de sitios web. Métodos para hacerlo hay diversos, pero en general podemos hacer una división entre los métodos que gestiona el código del web o los que se basan en el servicio web.

Ejemplos de los primeros son el muy extendido de emplear una base de datos para almacenar los campos usuario y password. Mediante un formulario y una consulta a la BD realizamos la validación. Otra opciones de validación por código es emplear es realizar consultas LDAP a un servicio de directorio o incluso emplear métodos como OAuth que permiten utilitzar sistemas de autenticación sobre IDs.

Por otro lado, podemos emplear las propias funcionalidades del servidor web para realizar dicha autenticación, es decir, que en lugar de desarrollar en la aplicación la lógica para autenticar usuarios, emplearemos al IIS.

En concreto, empleando IIS 8.5 tenemos a nuestra disposición diferentes opciones, de las cuales en concreto implementaremos dos a modo de ejemplo:

  • Autenticación básica: se basa en la especificación del protocolo http y envía las credenciales en formato usuario:password codificadas en formato Base64. Evidentemente, desde un punto de vista de seguridad, es una autenticación con una seguridad muy baja, al poder fácilmente obtenerse las credenciales. Por ello, no es un sistema que se recomiende y en caso de usarse, debería emplearse conexión segura.

  • Autenticación por desafío (digest): se basa en la especificación RFC 2619 utilizando el sistema Radius. Se envía el password del usuario en forma de hash MD5 y sólo puede utilizarse con cuentas de Directorio Activo. También se recomienda utilizar una conexión segura para securizar el proceso de autenticación.

  • Autenticación windows: es el sistema más sofisticado ya que emplea dos mecanismos de autenticación NTLMv2 y Kerberos.  El primer caso, lo emplea caso que realicemos la autenticación contra cuentas locales. El sistema Kerberos, se emplea con las cuentas de Directorio Activo y tiene la ventaja de permitir una autenticación segura. Este método es el que se recomienda para intranets.

  • Autenticación por certificado: en este caso, el cliente presenta un certificado y dentro de la negociación TLS/SSL se emplea para verificar su identidad.

Una vez hemos visto esta pequeña introducción, pasamos a la parte práctica. En primer lugar vamos a configurar una autenticación básica, que va a emplear credenciales bien locales de máquina o bien de directorio, si no se indica nada y el server está integrado en un directorio, se tomará éste por defecto.

Para configurarlo, nos vamos al panel del site que queremos editar y clicamos sobre Authentication o Autenticación y seleccionamos básica y muy importante, desactivamos la autenticación anónima.

auth

iis_aut_basEn la configuración de la autenticación nos pregunta por el dominio o bien por el Realm de Kerberos, ponemos el dominio AD que hemos creado. Si probamos ahora a entrar a dicha página:

iis_aut_bas2

A continuación, vamos a configurar la autenticación implícita o digest. Cambiamos el modo de autenticación de básica a digest y observamos como nos pregunta el Realm de autenticación, en nuestro caso utilizamos el dominio.

authdigest1Si observamos ahora la autenticación que nos solicita el site:
authdigest2Por último, la autenticación por Windows es similar a nivel de configuración no nos pregunta nada en principio porque ya toma las credenciales del sistema, sí que tiene una serie de configuraciones interesantes como la protección extendida que define el nivel de autenticación en modo Kernel o no. Cuando entramos en el site:

auth_win2En el próximo post, veremos cómo configurar las páginas mediante TLS/SSL.

IIS 8.5 (II): Configurando sites

En el post anterior vimos como instalar Internet Information Services sobre Windows Server 2012 R2. En este post, vamos a crear dos sites sobre el servidor, realizando algunas configuraciones básicas.

En primer lugar y aunque para nuestro casa concreto no va ser utilizado, vamos a comentar una herramienta muy útil que incorpora IIS y que ayuda a desplegar soluciones preparadas. Se trata de Web Platform Installer, es un complemento gratuito que se puede descargar de la página de IIS (www.iis.net) y que simplifica muchísimo la tarea de desplegar sobre nuestro servidor soluciones que anteriormente podían ser un auténtico dolor de cabeza, como PHP, WordPress, Joomla, etc. Instalando el producto desde aquí nos aseguramos la máxima compatibilidad con el servidor web.

La instalación la podemos realizar desde la página de iis.net/downloads y el propio IIS al iniciar nos va a preguntar si queremos descargar el complemento, llevándonos a dicha página web.

2014-01-24_1002Una vez instalado, aparece en la columna de Actions (a la derecha del menú del IIS Manager) la opción de descargar complementos desde esta herramienta.

2014-01-24_1003Si clicamos, veremos que se nos abre un menú con múltiples opciones para configurar nuestro sitio

2014-01-24_1004Volviendo a nuestro caso concreto, queremos crear dos sites, en mi caso los voy a llamar casa.local (coincide con el nombre del dominio del Active Directory) y serveis.net. Dado que nuestro Windows Server tiene instalado el rol de DNS voy a configurar allí los registros.

Para el caso del dominio existente, crearé un nuevo registro A que llamaré webserver con la IP del servidor y un alias al que denominaré www. Para el caso de serveis.net tendré que en primer lugar crear la zona primaria y posteriormente repetir la acción.

2014-01-24_0958 2014-01-24_1000

Ahora vamos a crear las carpetas donde tendremos nuestro código html. IIS crea en el disco la carpeta inetpub donde colgarán todas las carpetas (de los diferentes sites, de los logs y de los errores por defecto). Por ello, crearemos una carpeta www y dentro de ella dos carpetas una para cada uno de los sites.

2014-01-24_1006

El siguiente paso, sería crear una página de inicio para cada uno de nuestros sites dentro de su carpeta, podemos ir creando carpetas para las imágenes, css, etc. si queremos hacer un web más complejo, aunque se escapa del objetivo de este post.

Ahora abrimos el IIS Manager y sobre el nombre del servidor, hacemos clic botón derecho y seleccionamos Add Website

2014-01-24_1025A continuación configuraremos el Binding o característica de la conexión, debiendo indicar el nombre del site, su ubicación, el protocolo (http o https), la IP y el puerto, así como el nombre del host.

2014-01-24_1026Repetimos lo mismo para crear el segundo site y comprobamos desde un cliente (acordaos de configuarlo para que utilice como DNS el servidor) o desde el propio servidor.

2014-01-24_10282014-01-24_1029Ya tenemos nuestros sites en funcionamiento. Ahora vamos a ver tres configuraciones que pueden ser bastante útiles.

La primera es la restricción de IPs. Seguro que conoceis páginas, Netflix es un ejemplo, que restringen su acceso a determinadas IPs para bloquear a los usuarios de determinados países. O al contrario, podemos configurar un sitio para que únicamente puedan acceder determinadas IPs. La configuración es realmente sencilla:

2014-01-24_1030Aquí tendremos la opción de configurar reglas de aceptación, es decir, IPs que sí dejaremos conectarse o reglas de denegación para prohibir determinadas redes o direcciones.

2014-01-24_1032

Como prueba de concepto, bloqueo el acceso desde un cliente concreto de mi red.

Otra configuración que incluye esta opción es lo que han denominado bloqueo dinámico y que bloqueará direcciones en función de su comportamiento. Esto es muy útil si queremos por ejemplo evitar que un determinado equipo abra demasiadas conexiones concurrentes contra el sitio (o el servidor) o si realiza un número excesivo de peticiones. De esta manera podemos mitigar ataques de denegación de servicio (DoS) así como ataques de fuerza bruta contra el sistema de autenticación (aquí teneis información más detallada).

2014-01-24_1033

La segunda configuración, permite dimensionar los límites para el website, es decir si queremos limitar el ancho de banda disponibles, el time-out y el número máximo de conexiones. Configurar de manera adecuada los límites es importante para ofrecer una buena experiencia de usuario, debemos pensar que más conexiones, podemos tener una respuesta muy lenta, tanto por el ancho de banda disponible

2014-01-24_1043La tercera y última configuración que veremos en este post tiene que ver con los errores. Todos conocemos el clásico error 404 que nos aparece cuando intentamos acceder a una página inexistente. Pues bien, existen toda una serie de errores que nos informan del problema que se ha producido. IIS dispone de unas págines por defecto para cada uno de estos errores. Se encuentran en la carpeta inetpub\custerr y se pueden configuar según diferentes idiomas. Estas páginas son comunes para todo el servidor y evidentemente se pueden configurar para personalizar el mensaje.

2014-01-24_1035Pero podemos realizar otras opciones como tener una página de error propia para cada website o realizar acciones como redirigir a otra página. Para ello, dentro de la configuración del website, deberemos ir Error Pages

2014-01-24_1034Allí para cada error podremos seleccionar el comportamiento deseado, en nuestro caso queremos que el error 404 nos muestre una página de error propia para ese website.

2014-01-24_1039
2014-01-24_1046Hay que tener cuidado a la hora de realizar estas configuraciones porque se pueden realizar a nivel global del servidor, por tanto afectarán a todos los sites o a nivel de cada site en particular.

Con esto finaliza esta post, en el siguiente veremos como configurar la autenticación de nuestro website utilizando IIS.