Configuración de asignaciones de certificados de cliente de varios a uno para IIS 7.0 y 7.5
En este artículo se presenta cómo usar la característica Editor de configuración en Microsoft Internet Information Services (IIS) para configurar asignaciones de certificados de cliente de varios a uno.
Versión del producto original: Internet Information Services 7.0, 7.5
Número KB original: 2026113
Introducción
IIS usa la asignación de certificados de cliente de varios a uno para asociar un usuario final a una cuenta de Windows cuando se usa el certificado de cliente para la autenticación de usuario. IIS ejecuta la sesión del usuario en el contexto de esta cuenta Windows asignada. Para funcionar como se esperaba, debe asegurarse de que la asignación de certificado a cuenta esté configurada correctamente en IIS.
En IIS 6.0, los usuarios tenían la opción de configurar la asignación de certificados de cliente de varios a uno a través de la interfaz de usuario del Administrador de IIS. En IIS 7.0 y 7.5, esa interfaz no existe para las asignaciones de uno a uno o de varios a uno. En este artículo se explica cómo usar la característica Editor de configuración de IIS para configurar asignaciones de certificados de cliente de varios a uno.
Nota
Para obtener información sobre cómo usar el Editor de configuración para configurar asignaciones de certificados de cliente de uno a uno, vea Configuring One-to-One Client Certificate Mappings.
Esquema de IIS 7.0/7.5
Este es el esquema de la característica de autenticación de asignación de certificados de cliente de IIS en IIS 7.0 e IIS 7.5:
<sectionSchema name="system.webServer/security/authentication/iisClientCertificateMappingAuthentication">
<attribute name="enabled" type="bool" defaultValue="false" />
<attribute name="manyToOneCertificateMappingsEnabled" type="bool" defaultValue="true" />
...
<element name="manyToOneMappings">
<collection addElement="add" clearElement="clear">
<attribute name="name" type="string" required="true" isUniqueKey="true"
validationType="nonEmptyString" />
<attribute name="description" type="string" />
<attribute name="enabled" type="bool" defaultValue="true"/>
<attribute name="permissionMode" type="enum" defaultValue="Allow">
<enum name="Allow" value="1"/>
<enum name="Deny" value="2" />
</attribute>
<element name="rules">
<collection addElement="add" clearElement="clear">
<attribute name="certificateField" type="enum" required="true" isCombinedKey="true">
<enum name="Subject" value="1" />
<enum name="Issuer" value="2" />
</attribute>
<attribute name="certificateSubField" type="string" caseSensitive="true"
required="true" isCombinedKey="true" />
<attribute name="matchCriteria" type="string" caseSensitive="true"
required="true" isCombinedKey="true" />
<attribute name="compareCaseSensitive" type="bool" isCombinedKey="true" defaultValue="true" />
</collection>
</element>
<attribute name="userName" type="string" validationType="nonEmptyString" />
<attribute name="password" type="string" caseSensitive="true" encrypted="true"
defaultValue="[enc:AesProvider::enc]" />
</collection>
</element>
...
</sectionSchema>
Requisitos previos
Estos son los requisitos previos necesarios para este recorrido:
Ha instalado el módulo de asignación de certificados de cliente de IIS en el servidor IIS.
Un sitio web está configurado con un enlace de protocolo de transferencia de hipertexto seguro (HTTPS) que puede aceptar conexiones de capa de sockets seguros (SSL).
Tiene un certificado de cliente instalado en el cliente.
El módulo de administración de IIS 7 está instalado en el servidor de IIS 7.0.
Nota
El Editor de configuración se envía de forma predeterminada en IIS 7.5.
Configurar la asignación de certificados por el Editor de configuración
Inicie el administrador de IIS y seleccione el sitio web que se configurará para la autenticación de certificados de cliente.
En la vista Características, seleccione Editor de configuración en la sección Administración.
Vaya al
system.webServer/security/authentication/iisClientCertificateMappingAuthenticationcuadro desplegable como se muestra a continuación:
Verá una ventana para configurar asignaciones de certificados de varios a uno o de uno a uno aquí. Esta es la interfaz de usuario proporcionada a través del Editor de configuración desde donde puedes configurar todas las configuraciones de asignación.
Modifique las propiedades a través de esta interfaz gráfica de usuario (GUI).
- Establecer habilitado en True.
- Establezca manyToOneCertificateMappingsEnabled en True.
- Seleccione manyToOneMappings y seleccione en el botón de puntos suspensivos para iniciar una nueva ventana para configurar asignaciones.
En esta nueva ventana, seleccione para agregar un nuevo elemento. Puede modificar las propiedades desde dentro de la ventana como se muestra a continuación:
Seleccione en el botón de puntos suspensivos para las reglas, lo que le dará la opción de agregar varios patrones para la coincidencia en función de las propiedades del certificado.
En estas imágenes de ejemplo, hay dos entradas para las reglas para asignar el certificado.
En primer lugar, están los campos Asunto y Emisor en el certificado. En segundo lugar, está la propiedad matchcriteria para asignar el certificado a la cuenta mydomain\testuser.
En la imagen siguiente, se muestra la asignación final de una cuenta de Windows específica. Como puede ver, hay dos entradas para las reglas de esta cuenta.
Del mismo modo, puede tener otras asignaciones para las cuentas basadas en los campos Emisor y Asunto en el certificado.
Configurar la asignación de certificados APPCMD.exe
Hasta ahora, lo que se ha ilustrado se logra con el Editor de configuración, que proporciona una interfaz gráfica para establecer fácilmente la configuración. Puede lograr lo mismo con comandos y, de hecho, el Editor de configuración hace lo mismo en segundo plano y agrega esta configuración al APPCMD.exe ApplicationHost.config archivo.
El Editor de configuración también te ofrece una opción para ejecutar estos comandos manualmente y genera los scripts para lograrlo desde dentro de la propia interfaz de usuario:
Estos son los fragmentos de código para realizar los mismos pasos anteriores para configurar la asignación de certificados. Se generaron mediante la característica generación de scripts del Editor de configuración.
Comandos de AppCmd
appcmd.exe set config "Default Web Site" -section:system.webServer/security/authentication/iisClientCertificateMappingAuthentication /enabled:"True" /manyToOneCertificateMappingsEnabled:"True" /commit:apphost
appcmd.exe set config "Default Web Site" -section:system.webServer/security/authentication/iisClientCertificateMappingAuthentication /+"manyToOneMappings.[name='My 1st Mapping',description='1st User Mapping',userName='mydomain\testuser',password='abcdef']" /commit:apphost
appcmd.exe set config "Default Web Site" -section:system.webServer/security/authentication/iisClientCertificateMappingAuthentication /+"manyToOneMappings.[name='My 1st Mapping',description='1st User Mapping',userName='mydomain\testuser',password='abcdef'].rules.[certificateField='Subject',certificateSubField='CN',matchCriteria='Test User']" /commit:apphost
C# código
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["manyToOneCertificateMappingsEnabled"] = true;
ConfigurationElementCollection manyToOneMappingsCollection = iisClientCertificateMappingAuthenticationSection.GetCollection("manyToOneMappings");
ConfigurationElement addElement = manyToOneMappingsCollection.CreateElement("add");
addElement["name"] = @"My 1st Mapping";
addElement["description"] = @"1st User Mapping";
addElement["userName"] = @"mydomain\testuser";
addElement["password"] = @"abcdef";
ConfigurationElementCollection rulesCollection = addElement.GetCollection("rules");
ConfigurationElement addElement1 = rulesCollection.CreateElement("add");
addElement1["certificateField"] = @"Subject";
addElement1["certificateSubField"] = @"CN";
addElement1["matchCriteria"] = @"Test User";
rulesCollection.Add(addElement1);
manyToOneMappingsCollection.Add(addElement);
serverManager.CommitChanges();
}
}
}
Scripting (JavaScript)
var adminManager = new ActiveXObject('Microsoft.ApplicationHost.WritableAdminManager');
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST";
var iisClientCertificateMappingAuthenticationSection = adminManager.GetAdminSection("system.webServer/security/authentication/iisClientCertificateMappingAuthentication", "MACHINE/WEBROOT/APPHOST/Default Web Site");
iisClientCertificateMappingAuthenticationSection.Properties.Item("enabled").Value = true;
iisClientCertificateMappingAuthenticationSection.Properties.Item("manyToOneCertificateMappingsEnabled").Value = true;
var manyToOneMappingsCollection = iisClientCertificateMappingAuthenticationSection.ChildElements.Item("manyToOneMappings").Collection;
var addElement = manyToOneMappingsCollection.CreateNewElement("add");
addElement.Properties.Item("name").Value = "My 1st Mapping";
addElement.Properties.Item("description").Value = "1st User Mapping";
addElement.Properties.Item("userName").Value = "mydomain\\testuser";
addElement.Properties.Item("password").Value = "abcdef";
var rulesCollection = addElement.ChildElements.Item("rules").Collection;
var addElement1 = rulesCollection.CreateNewElement("add");
addElement1.Properties.Item("certificateField").Value = "Subject";
addElement1.Properties.Item("certificateSubField").Value = "CN";
addElement1.Properties.Item("matchCriteria").Value = "Test User";
rulesCollection.AddElement(addElement1);
manyToOneMappingsCollection.AddElement(addElement);
adminManager.CommitChanges();