¿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

Published 13/2/2007 10:47 por Sergio Vazquez
Archivado en:
Comparte este post:

Comentarios

Wednesday, March 21, 2007 5:21 PM por molnicolas

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

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.

Monday, October 13, 2008 8:37 AM por carlos

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

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.

Friday, November 13, 2009 3:02 AM por Carlos Solis

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

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

Thursday, December 10, 2009 10:34 PM por Carlos Christian Molina Vega

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

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.