IIS con autenticación con certificados de clientes (Autenticación mutua) - Error 403.16 Forbidden


Necesitaba configurar un sitio con autenticación exigiendo certificados X.509 (del tipo del que contiene la actual Cedula de Identidad uruguaya). Los certificados son usados por la aplicación también para identificar que operaciones puede realizar dicho usuario y para firmar digitalmente operaciones que necesitan ser firmadas. 

El sitio exigía https y certificados del lado del cliente (también llamada autenticación mutua), pues tanto el server como el cliente deben usar certificados para demostrar quienes son. 



Hay una guia paso a paso cómo hacer esto en este link.

La idea es que al intentar conectarse al sitio, presenta una lista de los certificados personales  que tengo instalado en mi maquina (o en algún otro repositorio local) de la forma:


y luego desde la aplicación recuperar la información de dicho certificado, como por ejemplo a que empresa representa esta persona o que documento tiene la misma. 

Para algunas aplicaciones este tipo de autenticación puede ahorrar mucho trabajo de registrar el usuario, aunque también exige algo de configuracion para instalar certificados locales. 

Del lado del servidor, exige poner un certificado para https (como siempre que se fuerza https) y hay que instalar el certificado de cliente en el repositorio Personal. 
En mi caso, como la autoridad certificadora era una de prueba que tenemos para desarrollo, también tuve que instalar en el server el certificado de dicha autoridad como Trusted Root Certificate Authority. 

En algunas máquinas, todo funcionaba bien, pero justo en la mía, daba un error 403.16 Forbidden

HTTP Error 403.16 - Forbidden
HRESULT: 0x800b0109
Description of HRESULT
Your client certificate is either not trusted or is invalid.

El certificado cliente era válido y también lo era el certificado de quien lo emitía y no encontraba el motivo del error. Me llevó varias horas, encontrar este link donde explican que hay que sacar del Trusted Root Certification Authorities Certificate store, todos los certificados que no sean self-signed, o sea que no sean firmados por la misma.

Corriendo el script PowerShell

Get-Childitem cert:\LocalMachine\root -Recurse | Where-Object {$_.Issuer -ne $_.Subject} | Format-List * | Out-File "c:\tmp\computer_filtered.txt"

pude encontrar cuáles eran estos certificados (que no tenían nada que ver ni con esta aplicación, ni con la autoridad certificadora de mi certificado) y pude configurar el sitio web para aceptar y validar certificados del cliente. Me resultó inexplicable el motivo, pero funcionó.

Con la madurez que ha alcanzado la infraestructura de claves públicas (PKI) uruguaya, es de esperar que varias instituciones empiecen a desarrollar aplicaciones que hagan un uso más intenso de los certificados digitales y la firma digital, para simplificar los tramites. 

Comentarios

  1. Siempre conceptualmente es sencillo este tema pero luego a la hora de ponerlo a andar es complicado.
    Con la madurez y años que tiene el tema es raro que necesites hacer ese paso, parece ser un incidente a reportar a Microsoft no?
    El caso de uso tuyo es bastante típico en un ambiente de pruebas.
    Seguro le ahorras varias horas a algún otro que necesite esto!
    Gracias!

    ResponderBorrar
    Respuestas
    1. Si, es cierto que es complejo ponerlo a andar, porque necesita configuracion tanto del lado del servidor (que es una vez) como del lado del cliente (tener el certificado, instalarlo o ponerlo en el lector, etc).
      Cuando los instituciones del estado permitan que todos los tramites se puedan firmar de esta forma, habra un incentivo claro para que otras intituciones (por ejemplo los bancos) lo hagan tambien. Es una cuestion de escala, para una empresa sola, es un esfuerzo grande, pero si varios lo hacen, la infraestructura madura y funciona.

      Participe el un proyecto de ALADI, que incluia firma digital de archivos XML, de Certificados de Origen. Si bien la teoria estaba madura, la puesta en marcha, llevo mas de 10 años. Era un intercambio entre muchos paises, con muchos involucrados (emisores de certificados, doble firma ) y con sistemas desarrollados en diversos lenguajes de programacion, con diferentes bibliotecas de firmado.

      Esta funcionando hace años.. y ha ahorrado mucho tiempo y dinero, pero lleva tiempo la puesta en marcha.

      Borrar

Publicar un comentario

1) Lee el post
2) Poné tu opinión sobre el mismo.
Todos los comentarios serán leidos y la mayoría son publicados.

Entradas más populares de este blog

Aplicación monolítica o distribuida?

La nefasta influencia del golero de Cacho Bochinche en el fútbol uruguayo

Funcionalidades de GeneXus que vale la pena conocer: DATE Constants.