Compartir a través de


Asignaciones uno a uno <oneToOneMappings>

Información general

El elemento <oneToOneMappings> del elemento <iisClientCertificateMappingAuthentication> asigna certificados de cliente individuales a cuentas de usuario individuales de uno a uno. Estas asignaciones de certificados uno a uno se pueden usar en lugar de los métodos de autenticación más usados, como la Autenticación de Windows o la Autenticación básica.

Nota:

Las asignaciones de certificados uno a uno difieren de asignaciones de certificados de varios a uno, que pueden asignar varios certificados a una sola cuenta de usuario.

Compatibilidad

Versión Notas
IIS 10.0 El elemento <oneToOneMappings> no se modificó en IIS 10.0.
IIS 8.5 El elemento <oneToOneMappings> no se modificó en IIS 8.5.
IIS 8.0 El elemento <oneToOneMappings> no se modificó en IIS 8.0.
IIS 7.5 El elemento <oneToOneMappings> no se modificó en IIS 7.5.
IIS 7.0 El elemento <oneToOneMappings> del elemento <iisClientCertificateMappingAuthentication> se introdujo en IIS 7.0.
IIS 6,0 El elemento <oneToOneMappings> reemplaza el objeto de metabase IIS 6.0 IIsCertMapper.

Configuración

El elemento <iisClientCertificateMappingAuthentication> no está disponible en la instalación predeterminada de IIS 7 y versiones posteriores. Para instalarlo, siga estos pasos.

Windows Server 2012 o Windows Server 2012 R2

  1. En la barra de tareas, haga clic en Administrador del servidor.
  2. En Administrador del servidor, haga clic en el menú Administrar y, después, haga clic en Agregar roles y características.
  3. En el asistente para Agregar roles y características, haga clic en Siguiente. Seleccione el tipo de instalación y haga clic en Siguiente. Seleccione el servidor de destino y haga clic en Siguiente.
  4. En la página Roles de servidor, expanda Servidor web (IIS), expanda Servidor web, expanda Seguridad y, a continuación, seleccione Autenticación de asignación de certificado de cliente IIS. Haga clic en Next.
    Screenshot that shows I I S Client Certificate Mapping Authentication selected for Windows Server 2012..
  5. En la página Seleccionar características, haz clic en Siguiente.
  6. En la página Confirmar selecciones de instalación, haga clic en Instalar.
  7. En la página Resultados , haga clic en Cerrar.

Windows 8 o Windows 8.1

  1. En la pantalla Inicio, mueva el puntero hasta la esquina inferior izquierda, haga clic con el botón derecho en el botón Inicio y, a continuación, haga clic en Panel de control.
  2. En Panel de control, haga clic en Programas y características y después en Activar o desactivar las características de Windows.
  3. Expanda Internet Information Services, expanda Servicios World Wide Web, expanda Seguridad y, a continuación, seleccione Autenticación de asignación de certificados de cliente de IIS.
    Screenshot that shows I I S Client Certificate Mapping Authentication selected for Windows 8.
  4. Haga clic en OK.
  5. Haga clic en Cerrar.

Windows Server 2008 o Windows Server 2008 R2

  1. En la barra de tareas, haga clic en Inicio, seleccione Herramientas administrativas y, luego, haga clic en Administrador del servidor.
  2. En el panel de jerarquía del Administrador del servidor, expanda Roles y, luego, haga clic en Servidor web (IIS).
  3. En el panel Servidor web (IIS), desplácese hasta la sección Servicios de rol y, luego, haga clic en Agregar servicios de rol.
  4. En la página Seleccionar servicios de rol del Asistente para agregar servicios de rol, seleccione Autenticación de asignación de certificados de cliente de IIS y, a continuación, haga clic en Siguiente.
    Screenshot that shows I I S Client Certificate Mapping Authentication selected for Windows Server 2008.
  5. En la página Confirmar selecciones de instalación, haz clic en Instalar.
  6. En la página Resultados , haga clic en Cerrar.

Windows Vista o Windows 7

  1. En la barra de tareas, haga clic en Inicio y, luego, haga clic en Panel de control.
  2. En Panel de control, haga clic en Programas y características y después en Activar o desactivar las características de Windows.
  3. Expanda Internet Information Services, seleccione Autenticación de asignación de certificados de cliente de IIS y, a continuación, haga clic en Aceptar.
    Screenshot that shows I I S Client Certificate Mapping Authentication selected for Windows Vista or Windows 7.

Procedimientos

No hay ninguna interfaz de usuario para configurar la autenticación de asignación de certificados de cliente de IIS en IIS 7. Para obtener ejemplos de cómo configurar la autenticación de asignación de certificados de cliente de IIS con programación, consulte la sección Código de ejemplo de este documento.

Configuración

Atributos

Ninguno.

Elementos secundarios

Elemento Descripción
add Elemento opcional.

Agrega una asignación uno a uno a la colección de asignaciones uno a uno.
clear Elemento opcional.

Quita todas las referencias a asignaciones uno a uno de la colección de asignaciones uno a uno.

Ejemplo de configuración

En el siguiente ejemplo de configuración se habilita la autenticación de asignación de certificados de cliente de IIS mediante la asignación de certificados de uno a uno para el sitio web predeterminado, se crea una asignación de certificado de uno a uno para una cuenta de usuario y se configura el sitio para requerir SSL y negociar certificados de cliente.

<location path="Default Web Site">
   <system.webServer>
      <security>
         <access sslFlags="Ssl, SslNegotiateCert" />
         <authentication>
            <windowsAuthentication enabled="false" />
            <anonymousAuthentication enabled="false" />
            <digestAuthentication enabled="false" />
            <basicAuthentication enabled="false" />
            <iisClientCertificateMappingAuthentication enabled="true"
                  oneToOneCertificateMappingsEnabled="true">
               <oneToOneMappings>
                  <add enabled="true"
                     userName="administrator"
                     password="[enc:57686f6120447564652c2049495320526f636b73:enc]"
                     certificate="Base64-Encoded-Certificate-Data" />
               </oneToOneMappings>
            </iisClientCertificateMappingAuthentication>
         </authentication>
      </security>
   </system.webServer>
</location>

Cómo recuperar una cadena codificada en Base-64 de un certificado de cliente

Nota:

Para recuperar datos de certificado codificados en Base-64 para todos los ejemplos de este tema, puede exportar un certificado mediante los siguientes pasos:

  1. Haga clic en Iniciar y, a continuación, Ejecutar.

  2. Escriba MMC y haga clic en Aceptar.

  3. Cuando se abra Microsoft Management Console, haga clic en Archivoy, a continuación, Agregar o quitar complementos.

  4. En el cuadro de diálogo Agregar o quitar complementos:

    • Resalte Certificados en la lista de complementos disponibles y haga clic en Agregar.
    • Elija administrar certificados para Mi cuenta de usuarioy haga clic en Finalizar.
    • Haga clic en Aceptar para cerrar el cuadro de diálogo.
  5. En Microsoft Management Console:

    • Expanda Certificados: usuario actual y, a continuación, Personaly, a continuación, Certificados.
    • En la lista de certificados, haga clic con el botón derecho en el certificado que desea exportar y, a continuación, haga clic en Todas las tareas y, a continuación, haga clic en Exportar.
  6. Cuando se abra el asistente para exportación de certificados:

    • Haga clic en Next.
    • Elija No, no exporte la clave privada y haga clic en Siguiente.
    • Elija X.509 9 codificado en Base-64 (.CER) para el formato de exportación y, a continuación, haga clic en Siguiente.
    • Elija guardar el certificado en el escritorio como MyCertificate.cer y haga clic en Siguiente.
    • Haga clic en Finalizar; debería ver un cuadro de diálogo que indica que la exportación se realizó correctamente.
  7. Cierre Microsoft Management Console.

  8. Abra el archivo MyCertificate.cer que exportó con el Bloc de notas de Windows:

    • Quite "-----BEGIN CERTIFICATE-----" del inicio del texto.
    • Quite "-----END CERTIFICATE-----" del final del texto.
    • Concatenar todas las líneas en una sola línea de texto: se trata de los datos de certificado codificados en Base-64 que usará para todos los ejemplos de este tema.

Código de ejemplo

Los siguientes ejemplos de código habilitan la autenticación de asignación de certificados de cliente IIS mediante la asignación de certificados uno a uno para el sitio web predeterminado, crean una asignación de certificados uno a uno para una cuenta de usuario y configuran el sitio para que requiera SSL y negocie certificados de cliente.

Nota:

Para recuperar los datos de certificado codificados en Base-64 para los ejemplos de código que se enumeran a continuación, puede exportar un certificado siguiendo los pasos que aparecen en la sección Detalles de configuración de este documento.

AppCmd.exe

Nota:

Debido a los caracteres de las cadenas de certificado que no se pueden analizar mediante AppCmd.exe, no debe usar AppCmd.exe para configurar asignaciones de certificados uno a uno de IIS.

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["enabled"] = true;
         addElement["userName"] = @"Username";
         addElement["password"] = @"Password";
         addElement["certificate"] = @"Base-64-Encoded-Certificate-Data";
         oneToOneMappingsCollection.Add(addElement);

         ConfigurationSection accessSection = config.GetSection("system.webServer/security/access", "Default Web Site");
         accessSection["sslFlags"] = @"Ssl, SslNegotiateCert";

         serverManager.CommitChanges();
      }
   }
}

VB.NET

Imports System
Imports System.Text
Imports Microsoft.Web.Administration

Module Sample

   Sub Main()
      Dim serverManager As ServerManager = New ServerManager
      Dim config As Configuration = serverManager.GetApplicationHostConfiguration

      Dim iisClientCertificateMappingAuthenticationSection As ConfigurationSection = config.GetSection("system.webServer/security/authentication/iisClientCertificateMappingAuthentication", "Default Web Site")
      iisClientCertificateMappingAuthenticationSection("enabled") = True
      iisClientCertificateMappingAuthenticationSection("oneToOneCertificateMappingsEnabled") = True

      Dim oneToOneMappingsCollection As ConfigurationElementCollection = iisClientCertificateMappingAuthenticationSection.GetCollection("oneToOneMappings")
      Dim addElement As ConfigurationElement = oneToOneMappingsCollection.CreateElement("add")
      addElement("enabled") = True
      addElement("userName") = "Username"
      addElement("password") = "Password"
      addElement("certificate") = "Base-64-Encoded-Certificate-Data"
      oneToOneMappingsCollection.Add(addElement)

      Dim accessSection As ConfigurationSection = config.GetSection("system.webServer/security/access", "Default Web Site")
      accessSection("sslFlags") = "Ssl, SslNegotiateCert"

      serverManager.CommitChanges()
   End Sub

End Module

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("oneToOneCertificateMappingsEnabled").Value = true;

var oneToOneMappingsCollection = iisClientCertificateMappingAuthenticationSection.ChildElements.Item("oneToOneMappings").Collection;
var addElement = oneToOneMappingsCollection.CreateNewElement("add");
addElement.Properties.Item("enabled").Value = true;
addElement.Properties.Item("userName").Value = "Username";
addElement.Properties.Item("password").Value = "Password";
addElement.Properties.Item("certificate").Value = "Base-64-Encoded-Certificate-Data";
oneToOneMappingsCollection.AddElement(addElement);

var accessSection = adminManager.GetAdminSection("system.webServer/security/access", "MACHINE/WEBROOT/APPHOST/Default Web Site");
accessSection.Properties.Item("sslFlags").Value = "Ssl, SslNegotiateCert";

adminManager.CommitChanges();

VBScript

Set adminManager = WScript.CreateObject("Microsoft.ApplicationHost.WritableAdminManager")
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST"

Set iisClientCertificateMappingAuthenticationSection = adminManager.GetAdminSection("system.webServer/security/authentication/iisClientCertificateMappingAuthentication", "MACHINE/WEBROOT/APPHOST/Default Web Site")
iisClientCertificateMappingAuthenticationSection.Properties.Item("enabled").Value = True
iisClientCertificateMappingAuthenticationSection.Properties.Item("oneToOneCertificateMappingsEnabled").Value = True

Set oneToOneMappingsCollection = iisClientCertificateMappingAuthenticationSection.ChildElements.Item("oneToOneMappings").Collection
Set addElement = oneToOneMappingsCollection.CreateNewElement("add")
addElement.Properties.Item("enabled").Value = True
addElement.Properties.Item("userName").Value = "Username"
addElement.Properties.Item("password").Value = "Password"
addElement.Properties.Item("certificate").Value = "Base-64-Encoded-Certificate-Data"
oneToOneMappingsCollection.AddElement(addElement)

Set accessSection = adminManager.GetAdminSection("system.webServer/security/access", "MACHINE/WEBROOT/APPHOST/Default Web Site")
accessSection.Properties.Item("sslFlags").Value = "Ssl, SslNegotiateCert"

adminManager.CommitChanges()