DNI electrónico y Autenticación en la Web


¿Que es el DNI Electronico o DNIe?

dniEl DNI incorpora en un chip la identidad digital de su titular. Esto permite con el DNIe realizar operaciones a través de Internet sin necesidad de desplazarse físicamente a las oficinas. En concreto permite dos tipos de operaciones:

  • Autenticación de la identidad: El equivalente en el mundo físico a presentar el DNI.
  • Firma electrónica de documentos: El equivalente en el mundo físico a firmar un documento.

Vamos a describir en esta entrada los pasos para implantar en nuestra aplicación la operación de autenticación en una aplicación web.

Autenticación de la identidad

El objetivo es validarnos en nuestra aplicación con nuestro DNI.

  • 1.-Instalar en el servidor cuatro certificados de la DIRECCION GENERAL DE LA POLICIA.

    PropiedadesCertificado

  • 2.- Habilitar permisos en el IIS; para que se pueda sobre escribir permisos de autenciación por aplicación. Abrir el Configuration Editor de la raíz del servidor. Navegar a las secciones de system.webServer/security/authentication y realizar un unlock de las entradas de la misma. Hacer los mismo para la sección system.webServer/security/access
    SecurityUnlock

  • 3.- Crear la aplicación que debe ser HTTPS que debe disponer de su certificado propio.
  • 4.- Modificar el web.config de la aplicación añadiendo en la entrada system.webServer la solicitud de certificado de DNIe. El usuario y passoword que debemos completar debe tener acceso al contenedor de certificados.
            <system.webServer>
                <security>
                    <access sslFlags="Ssl, SslNegotiateCert, SslRequireCert" />
                    <authentication>
                        <iisClientCertificateMappingAuthentication enabled="true" oneToOneCertificateMappingsEnabled="false">
                            <manyToOneMappings>
                                <add name="dnie" description="dnie" userName="[Usuario]" password="[Password]">
                                    <rules>
                                        <add certificateField="Issuer" certificateSubField="OU" matchCriteria="DNIE" />
                                    </rules>
                                </add>
                            </manyToOneMappings>
                        </iisClientCertificateMappingAuthentication>
                        <anonymousAuthentication enabled="true" userName="" />
                        <windowsAuthentication enabled="false" />
                    </authentication>
                </security>
            </system.webServer>
    
  • 5.- Podemos poner en la aplicación la pagina testDNIe.aspx; para verificar el correcto funcionamiento.
  • <%@ Page Language="C#"%>
    <html>
    <head><title>Datos del certificado</title></head>
    <body>
    <%
    HttpClientCertificate cs = Request.ClientCertificate;
    Response.Write("Datos del certificado:<br>");
    Response.Write("Certificate = " + cs.Certificate + "<br>");
    Response.Write("Cookie = " + cs.Cookie + "<br>");
    Response.Write("Flags = " + cs.Flags + "<br>");
    Response.Write("IsPresent = " + cs.IsPresent + "<br>");
    Response.Write("Issuer = " + cs.Issuer + "<br>");
    Response.Write("IsValid = " + cs.IsValid + "<br>");
    Response.Write("KeySize = " + cs.KeySize + "<br>");
    Response.Write("SecretKeySize = " + cs.SecretKeySize + "<br>");
    Response.Write("SerialNumber = " + cs.SerialNumber + "<br>");
    Response.Write("ServerIssuer = " + cs.ServerIssuer + "<br>");
    Response.Write("ServerSubject = " + cs.ServerSubject + "<br>");
    Response.Write("Subject = " + cs.Subject + "<br>");
    Response.Write("ValidFrom = " + cs.ValidFrom + "<br>");
    Response.Write("ValidUntil = " + cs.ValidUntil + "<br>");
    Response.Write("What's this = " + cs.ToString() + "<br>");
    %>        
    </body>
    </html>
    

    TestDNIe
    En la prueba si tenemos problemas; podemos ver los errores detallados añadiendo al web.config

    <system.webServer>
       <httpErrors errorMode="Detailed" />
    </system.webServer>
    
  • 6.- Cuando el IIS requiere el certificado del usuario; a este se le presenta en el navegador la lista de todos sus de certificados disponibles. Es engorroso ya que el usuario debe seleccionar de la lista su certificado DNIe. Podemos mejorar la experiencia de uso para el usuario; para que en el navegador tan solo se le muestren los certificados aceptados por el IIS. De esta manera al usuario en el navegador seguramente tan solo se le mostrara el certificado del DNIe en la lista :-).
    Para conseguirlo en el servidor añadiremos/habilitaremos a 1 el valor de la clave SendTrustedIssuerList en HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL en el registro de Windows.
    SendTrustedIssuerListDNIe
Anuncios
Esta entrada fue publicada en IIS, Seguridad, web y etiquetada . Guarda el enlace permanente.

Una respuesta a DNI electrónico y Autenticación en la Web

  1. Pingback: DNI electrónico y firma digital de formularios web | Pensando bajo la lluvia

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s