Configurar IIS para utilizar sus certificados autofirmados con su aplicación incluyendo la autenticación de mapeo de certificado de cliente IIS – blog.

, Author

Ahora asumo que has leído mi anterior post sobre cómo crear certificados autofirmados para el desarrollo y puede que te haya dejado pensando «¡Sí, genial! ….¿Pero cómo los uso realmente?». Esta entrada del blog le llevará paso a paso a través del proceso manual de configuración de IIS en su PC o servidor de Windows para utilizar sus certificados autofirmados junto con la autenticación de mapeo de certificado de cliente de IIS.

Por favor, tenga en cuenta que en mis ejemplos utilizo mi alojamiento localhost y un nombre de dominio al azar, pero se puede hacer esto en el IIS de su servidor real si usted tiene una dirección IP estática de su proveedor de servicios de Internet o su compañía de alojamiento de dominio, así como configurado su firewall, router, etc. correctamente donde finalmente se puede apuntar su nombre de dominio a su esa dirección. PERO no recomiendo ninguno de los dos junto con certificados autofirmados a menos que sus clientes/usuarios estén dispuestos a recibir e instalar su certificado raíz y de cliente autofirmado. Un buen ejemplo de esto es en una intranet cerrada donde usted tiene acceso a todas las computadoras de los usuarios finales porque entonces usted puede instalar los certificados en sus máquinas, lo cual es necesario si usted no quiere que sus usuarios reciban una gran advertencia sobre problemas de confianza con su certificado de servidor autofirmado. Si está buscando una solución comercial digna de producción, debería comprar sus certificados en lugar de autofirmarse. Así que ahora tenemos que fuera del camino que estoy usando un PC con Windows 8.1 Pro, IIS 8.5 y Visual Studio Premium 2013. (También he probado con una VM Hyper-V de Windows Server 2012 R2 en mi PC).

Instalación de IIS
Si aún no has instalado IIS en la máquina que actuará como servidor de alojamiento, hazlo pulsando el botón de Windows de un PC y busca «Activar o desactivar las características de Windows» (o ve al Panel de control y busca). Compruebe los Servicios de Información de Internet y los siguientes nodos secundarios. 1 instalación completa de IIS
(Si está ejecutando en .NET 3.5 necesita comprobar la Extensibilidad de .NET 3.5 y ASP.NET 3.5)

Para Windows Server 2012 vaya al panel de control del administrador del servidor ➜ Haga clic en añadir roles y características ➜ Elija la instalación basada en roles o en característicasbasado en la instalación y vaya a continuación ➜ Seleccione el servidor ➜ Habilite el rol de servidor llamado Servidor web (IIS) y los siguientes elementos hijos Servidor IIS

Asegúrese también de que Desarrollo de aplicaciones esté marcado con los siguientes elementos hijos Servidor IIS application dev

Haga clic en Aceptar y deje que Windows instale.

Creando nuestro proyecto de ejemplo
Para esta demostración crearemos una miniaplicación realmente sencilla que alojaremos en el IIS local. (También puedes hacer un fork de la mía directamente en Github)

En Visual Studio, crea una nueva aplicación web vacía y haz referencia a la web api 5 New Project

Sólo necesitaremos un controlador reeeealmente sencillo:

using System.Web.Http;namespace IISWithCertificatesSample.WebApi.Controllers{ public class CatsController : ApiController { public IHttpActionResult Get() { return Ok("A lot of cats meowing for food"); } }}

Ahora deberías poder ejecutar ambas rutas (F5) y navegar a la url de localhost con /api/cats (la mía parece http://localhost:62172/api/cats). Impresionante, vamos a alojar esta aplicación usando nuestro IIS local.

NOTA: Ya no vamos a ejecutar la aplicación directamente desde Visual Studio (F5) que está configurado para usar IIS Express.

Configurando IIS
Abre tu Administrador de IIS (botón de Windows + buscarlo). Añade un nuevo sitio web y un pool de aplicaciones con nuestra aplicación de ejemplo. (Clic derecho Sitios ➜ Añadir sitio web) La ruta tiene que ser la carpeta donde se encuentran los documentos de tu sitio web, así que si has publicado tu sitio web apunta la ruta allí. Sólo voy a utilizar la ruta directa al proyecto en Visual Studio para este ejemplo muy simple.

Ahora vamos a alojar localmente este sitio especificando el nombre de host AKA. su nombre de dominio. 7 sudominio.com

Dado que sólo estoy alojando localmente necesito añadir el sitio a mi archivo de hosts local con el fin de vincular mi dirección IP de localhost con el nombre de host. Esto se hace ejecutando el bloc de notas como administrador y abriendo el archivo hosts en la ruta: %systemroot%\System32\drivers\etc archivo hosts

Agregando lo siguiente al final: 127.0.0.1 sudominio.com www.yourdomain.com 8 archivo hosts

Ahora cada vez que navegue a sudominio.com y www.yourdomain.com en mi máquina resolverá el sitio con mis enlaces recién añadidos a la dirección IP 127.0.0.1 (que es la IP de localhost).

Añadamos el enlace www. binding a tu sitio en el gestor de IIS también 9 IIS bindings 10 add http binding 11 domain with www12 both http added

Surfea el nombre de dominio que configuraste en los bindings con o sin www. y añade la terminación /api/cats y deberías obtener los gatos maullando. (Si no es así prueba a vaciar la caché)

IMPORTANTE: Esto sólo va a ocurrir en la máquina local porque hemos alterado el archivo hosts para redirigir nuestras peticiones del nombre de dominio que hemos añadido a la dirección IP del localhost. Está pensado para el desarrollo y para poder probar sus cambios antes de desplegarlos en su servidor de alojamiento web real.

Asegurar el servidor con SSL
Ahora queremos asegurar los gatos añadiendo un certificado SSL a nuestro Servidor.
En su Administrador de IIS vaya a su servidor (La parte superior del árbol a la izquierda) ➜ Desplácese hacia abajo y haga doble clic en Certificados de servidor. 13 Servidor IIS

(Si su certificado autofirmado ya está aquí, salte a los pasos de los enlaces)

Necesitamos importar nuestro certificado de servidor autofirmado para habilitar la comunicación https con SSL, así que haga clic en Importar… 14 Importar certificado de servidor

Haga clic en el botón … y encuentre su archivo .pfx, rellene la contraseña (el parámetro -po en su archivo de lotes de comandos) y haga clic en Aceptar 15 browse server cert

Su certificado se añade ahora 16 cert added

Haga doble clic en el cert recién añadido para verificar que es de confianza. (Sus certificados autofirmados se añadieron a los almacenes correctos en mi post anterior, así que de nuevo: léelo si estás perdido ahora mismo ;-))

17 trusted server cert

¡Hasta aquí, todo bien! Ahora podemos añadir el enlace https, de la misma forma que antes pero eligiendo https con puerto 443, tu dominio como nombre de host y buscando tu certificado autofirmado en la lista desplegable

18 bindings add ssl

Marca la casilla Server Name Indication que permite a nuestro servidor tener múltiples certificados instalados en la misma dirección IP enviando el nombre de host con la primera etapa del handshake SSL. Repita los mismos pasos para añadir SSL para www.sudominio.com pero con un certificado en el que el nombre CN coincida con el nombre del dominio o un certificado comodín
19 https www con comodín

Nuestras vinculaciones están completas por ahora

19 Todas las vinculaciones

Tadaa, ya puedes usar https://yourdomain.com/api/cats y https://www.yourdomain.com/api/cats

NOTA: Firefox no utiliza el almacén de certificados de Windows, por lo que tendrás que añadir tu CA raíz manualmente. Ve a Configuración de Firefox ➜ Opciones ➜ Avanzadas ➜ Ver Certificados ➜ Autoridades ➜ importar tu archivo CARoot.cer

Autenticación de Mapeo de Certificados de Cliente de IIS
Ya hemos pasado por los usos de los certificados raíz y de servidor y probablemente te estés preguntando qué hacer con el certificado de cliente que también creamos en mi anterior post. Esto es para situaciones en las que, por ejemplo, necesitamos autenticar a los clientes sin un enfoque de inicio de sesión de usuario y contraseña, sino que queremos que el servidor pida al cliente que muestre su certificado y, si es el correcto, el cliente puede entrar. Esto se puede hacer con un mapeo Many-To-One o One-To-One y le mostraré cómo hacer ambos manualmente en el Administrador de IIS.

Primero tenemos que instalar la característica, así que vuelve a sacar el «Turn Windows features on or off» e instala lo siguiente 20 IIS client cert mapping

Le diremos a nuestro servidor que requiera un certificado SSL del cliente 21 SSL Settings 22 apply require ssl

A continuación tenemos que configurar el servidor para que sepa qué certificado de cliente necesita validar, así que vamos al Editor de Configuración y elegimos la sección iisClientCertificateMappingAuthentication (también podemos introducir la ruta system.webServer/security/authentication/iisClientCertificateMappingAuthentication en el campo Section) 24 iisClientCertMapAuth section

Many-To-One Mappings
Si quieres asignar varios certificados de cliente a un solo usuario este enfoque es el que necesitas. También se pueden compartir certificados de cliente de esta manera, instalando el certificado de cliente (y el CA Root, ya que estamos autofirmando el certificado) en otros usuarios en cualquier máquina para obtener acceso, siempre y cuando el certificado de cliente coincida con los criterios de la regla del mapeo. Por ejemplo, sería útil en una situación en la que se quisiera que todos los usuarios de una organización obtuvieran acceso a través de un único mapeo de usuario.

Habilitar la autenticación del mapeo de certificado de cliente 25 habilitar autenticación de cliente

Para añadir un mapeo haga clic en el … de los manyToOneMappings 26 añadir mapeo

Aquí se añaden los usuarios a los que se quiere dar acceso.27 add new mapping

Rellena las propiedades de un mapping y repite para cada usuario que quieras configurar para acceder o denegar. Recuerda que necesitas el certificado del cliente y el certificado de la CA raíz instalados en todos los mmc del usuario.
28 manytoone mapping

IMPORTANTE: Para que esto funcione necesitas introducir un nombre de usuario y una contraseña válidos y como mi ordenador es el servidor, las credenciales serán mi nombre de usuario y mi contraseña de Windows.

Ahora tenemos que crear algunas reglas que acompañen a este mapeo para que el servidor pueda determinar si un cliente tiene permiso para entrar o no. Es un así que haga clic en la propiedad de las reglas y el botón …

29 añadir regla

Voy a añadir una regla como un ejemplo donde el servidor comprobará el certificado del cliente para ver si está firmado por la raíz CA correcta. Siga adelante y agregue más reglas para más seguridad, por favor visite la referencia de mapeo IIS Many-To-One para más documentación.
31 regla

Recuerda aplicar los cambios en el Administrador de IIS, así que cierra las ventanas de reglas y mapeos y haz clic en Aplicar 32 aplica los cambios

Abre una nueva ventana de navegador de incógnito para asegurarte de empezar de cero en cuanto a caché y cookies y entra en tu url con el /api/cats y verás que el navegador te pide un certificado. Elige el ClientCert y haz clic en ok para acceder a los gatos. 33 ok client cert

Si esto no funciona asegúrate de que tu certificado de cliente está en tu almacén de CurrentUser/Personal así como en el almacén de certificados de tu navegador. Si es así, vaya al Panel de control ➜ Opciones de Internet ➜ Contenido y haga clic en Borrar estado SSL. 34 clear ssl state

Abre una nueva ventana de incógnito e inténtalo de nuevo, tu navegador debería pedirte ahora el certificado del cliente.

NOTA: Recuerda que, como he explicado antes, Firefox tiene su propio almacén de certificados, por lo que necesitas importar el certificado del cliente a «Tus Certificados» para poder utilizarlo.

Mapas de uno a uno
Vayamos a ver también los mapeos de uno a uno. Este enfoque significa que necesitamos un certificado de cliente individual para cada mapeo de usuario. Puede desactivar el mapeo uno a uno y utilizar el mismo certificado y usuario o crear nuevos. Vuelve al Editor de Configuración y abre de nuevo la sección iisClientCertificateMappingAuthentication. Haga clic en el … de los oneToOneMappings. 35 habilitar mapeos uno a uno

Para añadir el mapeo al certificado necesitamos exportar la clave pública del archivo de certificado del cliente. Esto lo podemos exportar desde la consola de administración de la máquina (pulsar el botón de Windows y buscar mmc) Hacer un snap-in en el almacén personal del certificado de la máquina local y exportar el certificado ssl del cliente que queremos utilizar sin la clave privada en el formato base64. Exportar certificado de cliente Con clave privada exportar en base64

Haga clic con el botón derecho en el certificado recién exportado y ábralo con el bloc de notas. Elimina todos los saltos de línea del propio certificado. Quita los saltos de línea

Ahora copia eso en el campo de propiedades del certificado del mapeo y rellena el resto 38 añadir mapeo de usuario

IMPORTANTE: Para que esto funcione necesitas introducir un nombre de usuario y una contraseña válidos y como mi ordenador es el servidor, las credenciales serán un nombre de usuario y una contraseña de Windows.

De nuevo, recuerda aplicar los cambios. 39 aplicar cambios

Y ya está, pruébalo y cuando te lo pida elige el certificado que has mapeado para el usuario que acabas de mapear.

Espero que te haya servido este post y para mi próximo post repasaré cómo usar certificados autofirmados junto con Windows Azure y cómo configurar el IIS mediante código C#, échale un vistazo aquí: http://blog.jayway.com/2015/04/21/configure-a-windows-azure-cloud-service-to-use-your-self-signed-certificates-for-iis-client-certificate-mapping-authentication/

Que os vaya bien =)

Deja una respuesta

Tu dirección de correo electrónico no será publicada.