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 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