¿Como leo certificados digitales de cliente en ASP.NET?

Hay veces que en vez de instalar un certificado digital SSL en el servidor web IIS, tal y como expliqué en el número 19 de Dotnetmania hace algún tiempo (próximamente estará disponible para su descarga gratuita en PDF), tenemos que leer un certificado digital de cliente que se instala en Internet Explorer para asegurarnos la identidad del visitante leyendo su nombre y DNI. Estos certificados los puede expedir una Entidad emisora de certificados como puede ser la Fábrica nacional de Moneda FNMT. Si lo que quieres es obtener la firma digital como ciudaddno puedes hacerlo en esta url http://www.cert.fnmt.es/index.php?cha=cit&sec=obtain_cert donde están todas las intrucciones detalladas. Ya sabéis que estos certificados se renuevan periódicamente como los SSL de servidor (puede no ser válido si ha caducado) y se pueden exportar en formato pfx de un pc a otro e incluso ponerle una clave o PIN.


 Aqui os copio un código sencillo en ASP.NET que os lee las características del certificado del cliente  en una petición http a través del famoso objeto Request que os puede ser de utilidad a más de uno:


Dim cert As HttpClientCertificate = Request.ClientCertificate


If cert.IsPresent Then


‘Get the Organization (O) field from the Subject section.


‘ certData.Text = cert.Get(«Subject O»)


Response.Write(«ServerSubject = » & cert.ServerSubject & «<br>»)


Response.Write(«Subject = » & cert.Subject & «<br>»)


Response.Write(«issuer = » & cert.Issuer & «<br>»)


Response.Write(«Valido desde = » & cert.ValidFrom & «<br>»)


Response.Write(«valido hasta = » & cert.ValidUntil & «<br>»)


Response.Write(«valido ? = » & cert.IsValid & «<br>»)


Response.Write(«tamaño de la clave secreta = » & cert.SecretKeySize & «<br>»)


Response.Write(«Server issuer = » & cert.ServerIssuer & «<br>»)


Response.Write(«Serial number hasta = » & cert.SerialNumber & «<br>»)


Response.Write(«Codificacion = » & cert.CertEncoding & «<br>»)


ElseIf Not cert.IsValid Then


Response.Write(«el certificado no es valido»)


 


Else


Response.Write(«No se ha encontrado certificado»)


 


End If


Dim desc As New X509Certificate(cert.Certificate)


Dim resultsTrue As String = desc.ToString(True)


Response.Write(«<br>despues de sacar flujo de bytes : » & resultsTrue)


Response.Write(«<br>Hash string : » & desc.GetCertHashString)


Response.Write(«<br>Algoritmo (parametros): » & desc.GetKeyAlgorithmParametersString)


Response.Write(«<br>Clave publica: » & desc.GetPublicKeyString)


Saludos


Sergio Vázquez

4 comentarios sobre “¿Como leo certificados digitales de cliente en ASP.NET?”

  1. estoy desarrollando una aplicacion la cual tiene validar a los usuarios a traves de un token, especificamente token ikey 2000. el problema es el siguiente:
    no puedo visualizar los certificados instalados en el lado del cliente al momento de subir mi aplicacion a un server,he implementado tu codigo pero no me trae los certificados, probe con System.Security.Cryptography.X509Certificates
    el cual si me trae los certificados pero los de la maquina en la que se esta ejecutando.

    he intentado de todo, por lo que lei instale un certificado en el servidor y active el puerto ssl,pero nada.
    si puedes ayudarme te lo agradeceria.

  2. Tienes que configurar tu Directorio Virtual como Directorio Seguro (HTTPS) y despues hay una opción para decirle al Directorio Virtual que Acepte Certificados Digitales (Tienes que marcar esa opción).

    Un saludo.

  3. En realidad para que una aplicación de servidor pueda tener acceso a los certificados de cliente, primero en el servidor web debe instalarse un certificado de servidor SSL. Esto se hace desde el Management console del servidor se añaden los complementos de certificados. Ahí en el repositorio de certificados del equipo local se importa el certificado del sitio SSL y la Autoridad certificadora(AC), además el certificado de la AC debe colocarse en el repositorios de autoridades de confianza.

    Posteriormente en el servidor Web como lo es IIS, debe configurarse el certificado importado en el paso anterior. En la cerpeta de la aplicación, entonces se especifica que se requiere de SSL y que se requieren certificados de cliente, por ultimo los certificados utilizados deben ser de la misma AC que se usó para el certificado de la servidor SSL.

    Cualquier aclaración escribanme a carlos.solis@cfe.gob.mx

    Saludos

  4. Carlos Solis, muy buena tu explicacion. Solo te comento que no es necesario que el certificado de SSL donde se encuentra el sitio IIS sea otorgado por la misma CA que emite los certificados de cliente.

    Saludos.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *