Configuración de asignaciones de certificados de cliente uno a uno
por Robert Lucero
Fondo
IIS 6 tenía una interfaz de usuario para configurar y asignar uno a uno los certificados de autenticación. Permitía a los usuarios seleccionar el certificado de cliente de validación y asignar las credenciales de usuario autorizado. No hay ninguna interfaz de usuario similar en IIS 7 y versiones posteriores. Este tutorial está diseñado para indicar a los usuarios que configuren uno a uno de los certificados de cliente mediante el Editor de configuración del paquete de administración. Los usuarios que no tienen este complemento pueden ver la sección apéndice de argumentos de AppCmd y ejemplos de código de C# para realizar este tutorial.
Esquema IIS 7 y versiones posteriores
Este es el esquema de la característica de autenticación de asignación de certificados de cliente de IIS en IIS 7 y versiones posteriores.
<sectionSchema name="system.webServer/security/authentication/iisClientCertificateMappingAuthentication">
<attribute name="enabled" type="bool" defaultValue="false" />
<attribute name="oneToOneCertificateMappingsEnabled" type="bool" defaultValue="true" />
<element name="oneToOneMappings">
<collection addElement="add" clearElement="clear">
<attribute name="enabled" type="bool" defaultValue="true" />
<attribute name="userName" type="string" />
<attribute name="password" type="string" encrypted="true" />
<attribute name="certificate" type="string" required="true" isUniqueKey="true" />
</collection>
</element>
</sectionSchema>
Requisitos previos
Estos son los requisitos previos necesarios para este tutorial. No se hablará de cómo crear o hacer estas cosas.
- Módulo de asignación de certificados de cliente de IIS instalado
- Un sitio web con un enlace HTTPS, configurado correctamente
- Un certificado Base-64 (archivo .cer). [Nota: Puede ser cualquier certificado de 64 bits válido, pero debe estar en formato de archivo]
- Un certificado de cliente instalado en un cliente
- Instalación de la Versión preliminar técnica 2 del Paquete de administración IIS 7
Paso 1: Obtener el blob de certificados
El elemento de colección oneToOneMappings tiene un atributo denominado certificado. El valor necesario para este atributo no es el certificado, sino el blob de certificado real. Así es como se extrae.
Haga clic con el botón derecho en el archivo .cer.
Seleccione Abrir con... en el menú contextual
Seleccione Bloc de notas en la lista Otros programas y haga clic en Aceptar. [Nota: El Bloc de notas puede estar oculto debajo de una lista desplegable en la vista de lista de Vista/Windows 2008]
Esto es lo que debe mostrarse en el Bloc de notas:
-----BEGIN CERTIFICATE----- MIIEfjCCA2agAwIBAgIKFW1IXAAAAAAAAjANBgkqhkiG9w0BAQUFADAbMRkwFwYD VQQDExBJSVNSZW1vdGVNZ3JUZXN0MB4XDTA4MDIxMTIxNTk1NloXDTA5MDIxMTIy MDk1NlowaDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNV BAcTB1JlZG1vbmQxDTALBgNVBAoTBE1TRlQxDDAKBgNVBAsTA0lJUzEVMBMGA1UE AxMMUkxVQ0VSTzItSUlTMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC3611j 34q2qQgHa7ao11TcQMDYlJMrqET05MWFY1/Vso+leujLoIGTfdHOuz4IBVoeUE+y mlL8r53s2BQeVFROnDtg4Jko1zJsz7AUAnQNBk/GYA1AHYmhY79Z0p1KXW/wSTJB tdUn732GQOqYf4wY8jOD2zUJDUG4HXm6ib8ajwIDAQABo4IB+TCCAfUwDgYDVR0P AQH/BAQDAgTwMBMGA1UdJQQMMAoGCCsGAQUFBwMBMHgGCSqGSIb3DQEJDwRrMGkw DgYIKoZIhvcNAwICAgCAMA4GCCqGSIb3DQMEAgIAgDALBglghkgBZQMEASowCwYJ YIZIAWUDBAEtMAsGCWCGSAFlAwQBAjALBglghkgBZQMEAQUwBwYFKw4DAgcwCgYI KoZIhvcNAwcwHQYDVR0OBBYEFHbHA+HwZcIrslklj1W3O23UFrBgMB8GA1UdIwQY MBaAFMxzlGbmkp2+phhDg7TPfi83d7UVMHMGA1UdHwRsMGowaKBmoGSGL2h0dHA6 Ly9paXNzYjMwNS9DZXJ0RW5yb2xsL0lJU1JlbW90ZU1nclRlc3QuY3JshjFmaWxl Oi8vXFxpaXNzYjMwNVxDZXJ0RW5yb2xsXElJU1JlbW90ZU1nclRlc3QuY3JsMIGe BggrBgEFBQcBAQSBkTCBjjBEBggrBgEFBQcwAoY4aHR0cDovL2lpc3NiMzA1L0Nl cnRFbnJvbGwvaWlzc2IzMDVfSUlTUmVtb3RlTWdyVGVzdC5jcnQwRgYIKwYBBQUH MAKGOmZpbGU6Ly9cXGlpc3NiMzA1XENlcnRFbnJvbGxcaWlzc2IzMDVfSUlTUmVt b3RlTWdyVGVzdC5jcnQwDQYJKoZIhvcNAQEFBQADggEBAEsSkcx0re36IL80UphJ w/srR3LBsy8sfwqxBMzMTdF7k6jYtUVpn3D2Dd4JXXVOaEVud9YNn9pr6xJL4t79 Zh+hJzIPA5pQLbccx4vjWB4cWEYxzcoKYCuUdZrfPFXO1a5kQAj8IZ0/6bhMceyR Z7dRDoaIuAGQLFAlC/KjIBCemDi54MlWtvATQ8bmiRuEOWeneK2Vd2e0fxyezk05 dRqa8DEC74CQN4rQuz395ECm+M/hQnN+dHOygV8n9swd0bdNq8qypwfVUes5HIpj LFmKTuGyFSVj7jv+64oTxvxtYX2QFp9q6Bi+qj0uyrX8Xjxy5rPSVPEfnxPCBg58 RCI= -----END CERTIFICATE-----
Quite -----BEGIN CERTIFICATE----- y -----END CERTIFICATE----
Aplique formato al blob de certificado para que sea una sola línea.
Guarde este archivo como clientCertBlob.txt
Paso 2: Habilitar la autenticación de asignación de certificados de cliente de IIS y la asignación de certificados uno a uno para un sitio web
En los pasos siguientes se explica cómo habilitar la característica de autenticación de asignación de certificados de cliente, cómo asignar certificados uno a uno y cómo agregar una entrada de asignación.
- Inicie Inetmgr, la interfaz de usuario del Administrador de IIS
- Seleccione el sitio web SSL que se está configurando y abra el Editor de configuración
- Escriba system.webServer/security/authentication/iisClientCertificateMappingAuthentication en el cuadro desplegable Sección.
- Seleccione el campo habilitado y cambie el valor a true
- Seleccione la entrada de cuadrícula de propiedades oneToOneCertificateMappingsEnabled y cambie el valor a true
- Seleccione la entrada de cuadrícula de propiedades oneToOneMappings y haga clic en Editar elementos... en el panel de tareas de Acciones
- Haga clic en Agregar en la lista de tareas del Editor de colección
- Copie el blob de certificado de cadena única anterior y péguelo en el campo certificado
- Establezca el nombre de usuario y la contraseña con los cuales se autenticarán los clientes.
- Establezca el campo habilitado en true
- Cierre el Editor de colecciones
- Haga clic en Aplicar en el panel de tareas de Acciones [Nota: Haga clic en Generación de scripts antes de hacer clic en Aplicar para obtener scripts para este proceso]
Una vez completado, el servidor se configurará para controlar la autenticación de asignación de certificados de cliente de IIS con una sola entrada de asignación de certificados uno a uno.
Paso 3: Habilitar la autenticación de certificados de cliente para un sitio web mediante SSL
Una vez creada una asignación y habilitada la característica, se debe configurar un sitio para que use los certificados de cliente.
- Desde Inetmgr, la interfaz de usuario del Administrador de IIS, seleccione el sitio web de SSL para el que desea usar los certificados de cliente
- Seleccione el módulo de interfaz de usuario SSL
- En Certificados de cliente: seleccione el botón de radio Aceptar
- Haga clic en Aplicar en el panel de tareas de Acciones
Ahora el sitio web está configurado para aceptar y autenticar clientes en función de los certificados de cliente.
Paso 4: Comprobar que todo funciona
El cliente que intenta acceder a la página web SSL necesita que el certificado de cliente esté instalado correctamente. Si un cliente intenta solicitar una página sin el certificado se atenderá a 401. Una vez instalado correctamente el certificado de cliente, la página se servirá como normal.
Juegue con diferentes combinaciones de reglas de autorización para satisfacer sus necesidades.
Resumen
Ahora ha configurado asignaciones de certificados de cliente de IIS y una sola asignación de certificados uno a uno.
Apéndice
Estos son los fragmentos de código para realizar los pasos 2 y 3 del tutorial. Todo esto se generó mediante la generación de scripts del Editor de configuración.
Instrucciones específicas de AppCmd
appcmd.exe set config "Default Web Site" -section:system.webServer/security/authentication/iisClientCertificateMappingAuthentication
/enabled:"True" /oneToOneCertificateMappingsEnabled:"True" /commit:apphost
appcmd.exe set config "Default Web Site" -section:system.webServer/security/authentication/iisClientCertificateMappingAuthentication
/+"oneToOneMappings.[userName='testUser',password='securePassWord!1',certificate='CERTIFICATE_BLOB']" /commit:apphost
appcmd.exe set config "Default Web Site" -section:system.webServer/security/access /sslFlags:"Ssl, SslNegotiateCert, Ssl128" /commit:apphost
Código C#:
using System;
using System.Text;
using Microsoft.Web.Administration;
internal static class Sample {
private static void Main() {
using(ServerManager serverManager = new ServerManager()) {
Configuration config = serverManager.GetApplicationHostConfiguration();
ConfigurationSection iisClientCertificateMappingAuthenticationSection =
config.GetSection("system.webServer/security/authentication/iisClientCertificateMappingAuthentication", "Default Web Site");
iisClientCertificateMappingAuthenticationSection["enabled"] = true;
iisClientCertificateMappingAuthenticationSection["oneToOneCertificateMappingsEnabled"] = true;
ConfigurationElementCollection oneToOneMappingsCollection =
iisClientCertificateMappingAuthenticationSection.GetCollection("oneToOneMappings");
ConfigurationElement addElement = oneToOneMappingsCollection.CreateElement("add");
addElement["userName"] = @"testUser";
addElement["password"] = @"securePassWord!1";
addElement["certificate"] = @"CERTIFICATE_BLOB";
oneToOneMappingsCollection.Add(addElement);
serverManager.CommitChanges();
}
}
}
using System;
using System.Text;
using Microsoft.Web.Administration;
internal static class Sample {
private static void Main() {
using(ServerManager serverManager = new ServerManager()) {
Configuration config = serverManager.GetApplicationHostConfiguration();
ConfigurationSection accessSection = config.GetSection("system.webServer/security/access", "Default Web Site");
accessSection["sslFlags"] = @"Ssl, SslNegotiateCert, Ssl128";
serverManager.CommitChanges();
}
}
}