Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Antecedentes
IIS 6 tenía una interfaz de usuario para configurar y asignar certificados uno a uno para la autenticación. Permite a los usuarios seleccionar el certificado de cliente de validación y asignar las credenciales de usuario autorizadas. No hay una 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 módulo 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 funcionalidad de autenticación mediante asignación de certificados de cliente 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>
Prerrequisitos
Estos son los requisitos previos necesarios para este tutorial. No voy a cubrir 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 (.cer archivo). [Nota: Puede ser cualquier certificado de 64 bits válido, pero debe estar en formato de archivo]
- Instalado un certificado de cliente en un cliente
- Instalación del módulo de administración de IIS 7 Technical Preview 2
Paso 1: Obtención del blob de certificado
El elemento de colección oneToOneMappings tiene un atributo denominado certificate. El valor requerido para este atributo no es lo que el certificado posee, sino el bloque real del certificado. Así es como lo extraigas.
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 de Otros programas y haga clic en Aceptar. [Nota: El Bloc de notas puede estar oculto debajo de una lista desplegable 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-----Eliminar -----BEGIN CERTIFICATE----- y -----END CERTIFICATE-----
Dé 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 siguientes pasos se explica cómo habilitar la característica de autenticación mediante asignación de certificados de cliente, la asignación de certificados Uno a Uno, y cómo agregar una entrada de asignación.
- Iniciar 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 Acciones.
- Haga clic en Agregar en la lista de tareas Editor de recopilación .
- Copie la cadena de caracteres única de certificado anterior y péguela en el campo certificado.
- Establezca el nombre de usuario y la contraseña que los clientes se autenticarán como.
- Establezca el campo habilitado en true.
- Cerrar editor de recopilación
- Haga clic en Aplicar en el panel de tareas Acciones [Nota: Haga clic en Generación de scripts antes de hacer clic en Aplicar para obtener scripts para este proceso]
Una vez que esto esté completo, el servidor se configurará para manejar la autenticación de asignación de certificados de cliente de IIS con una única entrada de asignación de certificados de uno a uno.
Paso 3: Habilitar la autenticación de certificados de cliente para un sitio web mediante SSL
Una vez creado un mapeo y habilitada la característica, se debe configurar un sitio para usar certificados de cliente.
- Desde Inetmgr, la interfaz de usuario del Administrador de IIS, seleccione el sitio web SSL que desea usar certificados de cliente.
- Selección del 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 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 un certificado, se responderá con un código de estado 401. Una vez instalado correctamente el certificado de cliente, la página se servirá como normal.
Juega con diferentes combinaciones de reglas de autorización para satisfacer tus necesidades.
Resumen
Ahora ha configurado mapeos de certificados de cliente de IIS y un solo mapeo de certificado de 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 de 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();
}
}
}