Nombre de entidad de seguridad de servicio <SPN>
Información general
El elemento <spn>
agrega un nombre de entidad de seguridad de servicio (SPN) a la colección de SPN. Cada SPN especifica un punto de conexión único para la actividad de cliente mediante las características de protección extendida para la autenticación de Windows.
La protección ampliada mejora la funcionalidad de autenticación de Windows existente para mitigar los ataques de retransmisión de autenticación o de intermediario. Esta mitigación se logra mediante la información de seguridad que se implementa a través de dos mecanismos de seguridad:
- Información de enlace de canal que se especifica a través de un token de enlace de canal (CBT), que se usa principalmente para las conexiones SSL.
- Información de enlace de servicio que se especifica a través de un nombre de entidad de seguridad de servicio (SPN), que se usa principalmente para las conexiones que no usan SSL, o cuando se establece una conexión a través de un escenario que proporciona descarga SSL, como un servidor proxy o un equilibrador de carga.
El elemento <extendedProtection>
puede contener una colección de elementos <spn>
, cada uno de los cuales contiene un SPN único para la información de enlace de servicio. Cada SPN representa un punto de conexión único en la ruta de acceso de conexión, que puede ser un nombre de dominio completo (FQDN) o NETBIOS del servidor de destino o un servidor proxy. Por ejemplo, si un cliente se conecta a un servidor de destino a través de un servidor proxy, la colección SPN del servidor de destino tendría que contener el SPN para el servidor proxy. Cada SPN de la colección debe tener el prefijo "HTTP", por lo que el SPN resultante para "www.contoso.com" sería "HTTP/www.contoso.com".
Hay dos atributos del elemento <extendedProtection>
que configuran el enlace de canal y el comportamiento adicional para la protección ampliada de IIS:
El atributo tokenChecking configura el comportamiento para comprobar los tokens de enlace de canal. Los valores posibles para este atributo son:
Nombre Descripción None
Este valor especifica que IIS no realizará la comprobación de tokens de enlace de canal. Esta configuración emula el comportamiento que existía antes de la protección ampliada.
El valor numérico es0
.Allow
Este valor especifica que la comprobación de tokens de enlace de canal está habilitada, pero no es necesaria. Esta configuración permite una comunicación segura con los clientes que admiten la protección ampliada, pero aún admite clientes que no son capaces de usar la protección ampliada.
El valor numérico es1
.Require
Este valor especifica que se requiere la comprobación de tokens de enlace de canal. Esta configuración no proporciona compatibilidad con los clientes que no admiten la protección ampliada.
El valor numérico es2
.El atributo flags configura un comportamiento adicional para la protección ampliada. Las marcas posibles son:
Nombre Descripción None
Esta marca especifica que no hay ningún comportamiento adicional habilitado para la protección ampliada. (Por ejemplo, no se usa ningún servidor proxy y la comprobación de SPN está habilitada y requiere FQDN).
El valor numérico es0
.Proxy
Esta marca especifica que parte de la ruta de comunicación será a través de un proxy o que el cliente se conecta directamente al servidor de destino a través de HTTP.
El valor numérico es1
.NoServiceNameCheck
Esta marca especifica que la comprobación de SPN está deshabilitada; esta marca no debe usarse en escenarios en los que solo se comprueban los SPN.
El valor numérico es2
.AllowDotlessSpn
Esta marca especifica que los SPN no son necesarios para ser FQDN. Establecer esta marca permite SPN basados en NetBIOS. Nota: establecer esta marca no es un escenario seguro; los nombres no basados en FQDN son vulnerables a ataques de intoxicación por resolución de nombres.
El valor numérico es4
.ProxyCohosting
Esta marca especifica que toda la ruta de comunicación de cliente a servidor usará solo HTTP; ninguna parte de la ruta de comunicación usará SSL y se usará la comprobación de SPN. Nota: al especificar esta marca, también debe especificar la marca Proxy
.
El valor numérico es32
.
Escenarios de protección ampliada
Tenga en cuenta los siguientes escenarios de ejemplo:
- En cada uno de los siguientes escenarios también puede especificar la marca
AllowDotlessSpn
si el entorno de red admite SPN basados en NetBIOS; sin embargo, los SPN basados en NetBIOS no son seguros. - Para cada uno de los siguientes escenarios en los que se usará la comprobación de SPN y no se usará la comprobación de tokens de enlace de canal, no debe especificar la marca
NoServiceNameCheck
.
Escenario | Marcas | Descripción |
---|---|---|
El cliente se conecta directamente al servidor de destino mediante HTTP | Proxy , ProxyCohosting |
No se usará la comprobación de SPN y no se usará la comprobación de tokens de enlace de canal. |
El cliente se conecta directamente al servidor de destino mediante SSL | None |
La comprobación de tokens de enlace de canal se usa y no se usa la comprobación de SPN. |
El cliente se conecta al servidor de destino a través de un servidor proxy mediante HTTP para toda la ruta de acceso | Proxy , ProxyCohosting |
No se usará la comprobación de SPN y no se usará la comprobación de tokens de enlace de canal. |
El cliente se conecta al servidor de destino a través de un servidor proxy mediante SSL para toda la ruta de acceso | Proxy |
No se usará la comprobación de SPN y no se usará la comprobación de tokens de enlace de canal. |
El cliente se conecta al servidor proxy mediante SSL y el servidor proxy se conecta al servidor de destino mediante HTTP (carga fuera de SSL) | Proxy |
No se usará la comprobación de SPN y no se usará la comprobación de tokens de enlace de canal. |
Información adicional
Puede encontrar más información sobre la protección ampliada en el siguiente tema:
Compatibilidad
Versión | Notas |
---|---|
IIS 10.0 | El elemento <spn> no se modificó en IIS 10.0. |
IIS 8.5 | El elemento <spn> no se modificó en IIS 8.5. |
IIS 8.0 | El elemento <spn> no se modificó en IIS 8.0. |
IIS 7.5 | El elemento <spn> del elemento <extendedProtection> se introdujo en IIS 7.5. |
IIS 7.0 | N/D |
IIS 6,0 | N/D |
Configuración
La instalación predeterminada de IIS 7 y versiones posteriores no incluye el servicio de rol de autenticación de Windows. Para usar la autenticación de Windows en IIS, debe instalar el servicio de rol, deshabilitar la autenticación anónima para su sitio web o aplicación y, a continuación, habilitar la autenticación de Windows para el sitio o la aplicación.
Nota:
Después de instalar el servicio de rol, IIS 7 confirma las siguientes opciones de configuración en el archivo ApplicationHost.config.
<windowsAuthentication enabled="false" />
Windows Server 2012 o Windows Server 2012 R2
- En la barra de tareas, haga clic en Administrador del servidor.
- En Administrador del servidor, haga clic en el menú Administrar y, después, haga clic en Agregar roles y características.
- 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.
- En la página Roles de servidor, expanda Servidor web (IIS), expanda Servidor web, expanda Seguridad y seleccione Autenticación de Windows. Haga clic en Next.
. - En la página Seleccionar características, haz clic en Siguiente.
- En la página Confirmar selecciones de instalación, haga clic en Instalar.
- En la página Resultados , haga clic en Cerrar.
Windows 8 o Windows 8.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.
- En Panel de control, haga clic en Programas y características y después en Activar o desactivar las características de Windows.
- Expanda Internet Information Services, expanda Servicios World Wide Web, expanda Seguridad y luego seleccione Autenticación de Windows.
- Haga clic en OK.
- Haga clic en Cerrar.
Windows Server 2008 o Windows Server 2008 R2
- En la barra de tareas, haga clic en Inicio, seleccione Herramientas administrativas y, luego, haga clic en Administrador del servidor.
- En el panel de jerarquía del Administrador del servidor, expanda Roles y, luego, haga clic en Servidor web (IIS).
- En el panel Servidor web (IIS), desplácese hasta la sección Servicios de rol y, luego, haga clic en Agregar servicios de rol.
- En la página Seleccionar servicios de rol del Asistente para agregar servicios de rol, seleccione Autenticación de Windows y haga clic en Siguiente.
- En la página Confirmar selecciones de instalación, haz clic en Instalar.
- En la página Resultados , haga clic en Cerrar.
Windows Vista o Windows 7
- En la barra de tareas, haga clic en Inicio y, luego, haga clic en Panel de control.
- En Panel de control, haga clic en Programas y características y después en Activar o desactivar las características de Windows.
- Expanda Internet Information Services, después World Wide Web Services y luego Seguridad.
- Seleccione Autenticación de Windows y, a continuación, haga clic en Aceptar.
Procedimientos
Habilitación de la protección ampliada para la autenticación de Windows
Abra el Administrador de Internet Information Services (IIS):
Si usa Windows Server 2012 o Windows Server 2012 R2:
- En la barra de tareas, haga clic en Administrador del servidor, en Herramientas y, a continuación, en Administrador de Internet Information Services (IIS).
Si usa Windows 8 o Windows 8.1:
- Mantenga presionada la tecla Windows, presione la letra X y haga clic en Panel de control.
- En Panel de control, haga clic en Herramientas administrativas y, a continuación, haga doble clic en Administrador de Internet Information Services (IIS).
Si usa Windows Server 2008 o Windows Server 2008 R2:
- En la barra de tareas, haga clic en Inicio, seleccione Herramientas administrativas y, a continuación, haga clic en Administrador de Internet Information Services (IIS).
Si usa Windows Vista o Windows 7:
- En la barra de tareas, haga clic en Inicio y, luego, haga clic en Panel de control.
- Haga doble clic en Herramientas administrativas y, a continuación, haga doble clic en Administrador de Internet Information Services (IIS).
En el panel Conexiones, expanda el nombre del servidor, expanda Sitios y después el sitio, la aplicación o el servicio web para el que desea habilitar la autenticación de protección ampliada para Windows.
Desplácese hasta la sección Seguridad en el panel Inicio y, a continuación, haga doble clic en Autenticación.
En el panel Authentication, seleccione Autenticación de Windows.
Haga clic en Configuración avanzada en el panel Acciones.
Cuando aparezca el cuadro de diálogo Configuración avanzada, seleccione una de las siguientes opciones en el menú desplegable Protección ampliada:
Haga clic en Aceptar para cerrar el cuadro de diálogo Configuración avanzada.
Configuración
El elemento <spn>
del elemento <extendedProtection>
se puede configurar en el nivel de sitio, aplicación o directorio virtual en el archivo ApplicationHost.config.
Atributos
Atributo | Descripción |
---|---|
name |
Atributo de cadena opcional. Especifica un SPN único. No existe ningún valor predeterminado. |
Elementos secundarios
Ninguno.
Ejemplo de configuración
En el siguiente ejemplo se muestra un elemento <extendedProtection>
que muestra cómo habilitar la autenticación de Windows con protección ampliada para el sitio web predeterminado y agrega dos entradas SPN a la colección de SPN.
<location path="Default Web Site">
<system.webServer>
<security>
<authentication>
<windowsAuthentication enabled="true">
<extendedProtection tokenChecking="Allow" flags="None">
<spn name="HTTP/www.contoso.com" />
<spn name="HTTP/contoso.com" />
</extendedProtection>
</windowsAuthentication>
</authentication>
</security>
</system.webServer>
</location>
Código de ejemplo
En los siguientes ejemplos se muestra cómo configurar la autenticación de Windows con protección ampliada para el sitio web predeterminado y se agregan dos entradas SPN a la colección de SPN.
AppCmd.exe
appcmd.exe set config "Default Web Site" -section:system.webServer/security/authentication/windowsAuthentication /enabled:"True" /commit:apphost
appcmd.exe set config "Default Web Site" -section:system.webServer/security/authentication/windowsAuthentication /extendedProtection.tokenChecking:"Allow" /extendedProtection.flags:"None" /commit:apphost
appcmd.exe set config "Default Web Site" -section:system.webServer/security/authentication/windowsAuthentication /+"extendedProtection.[name='HTTP/www.contoso.com']" /commit:apphost
appcmd.exe set config "Default Web Site" -section:system.webServer/security/authentication/windowsAuthentication /+"extendedProtection.[name='HTTP/contoso.com']" /commit:apphost
Nota:
Debe asegurarse de establecer el parámetro de confirmación en apphost
cuando use AppCmd.exe para configurar estas opciones. Esto confirma los valores de configuración en la sección de ubicación adecuada del archivo ApplicationHost.config.
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 windowsAuthenticationSection = config.GetSection("system.webServer/security/authentication/windowsAuthentication", "Default Web Site");
windowsAuthenticationSection["enabled"] = true;
ConfigurationElement extendedProtectionElement = windowsAuthenticationSection.GetChildElement("extendedProtection");
extendedProtectionElement["tokenChecking"] = @"Allow";
extendedProtectionElement["flags"] = @"None";
ConfigurationElementCollection extendedProtectionCollection = extendedProtectionElement.GetCollection();
ConfigurationElement spnElement = extendedProtectionCollection.CreateElement("spn");
spnElement["name"] = @"HTTP/www.contoso.com";
extendedProtectionCollection.Add(spnElement);
ConfigurationElement spnElement1 = extendedProtectionCollection.CreateElement("spn");
spnElement1["name"] = @"HTTP/contoso.com";
extendedProtectionCollection.Add(spnElement1);
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 windowsAuthenticationSection As ConfigurationSection = config.GetSection("system.webServer/security/authentication/windowsAuthentication", "Default Web Site")
windowsAuthenticationSection("enabled") = True
Dim extendedProtectionElement As ConfigurationElement = windowsAuthenticationSection.GetChildElement("extendedProtection")
extendedProtectionElement("tokenChecking") = "Allow"
extendedProtectionElement("flags") = "None"
Dim extendedProtectionCollection As ConfigurationElementCollection = extendedProtectionElement.GetCollection
Dim spnElement As ConfigurationElement = extendedProtectionCollection.CreateElement("spn")
spnElement("name") = "HTTP/www.contoso.com"
extendedProtectionCollection.Add(spnElement)
Dim spnElement1 As ConfigurationElement = extendedProtectionCollection.CreateElement("spn")
spnElement1("name") = "HTTP/contoso.com"
extendedProtectionCollection.Add(spnElement1)
serverManager.CommitChanges()
End Sub
End Module
JavaScript
var adminManager = new ActiveXObject('Microsoft.ApplicationHost.WritableAdminManager');
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST";
var windowsAuthenticationSection = adminManager.GetAdminSection("system.webServer/security/authentication/windowsAuthentication", "MACHINE/WEBROOT/APPHOST/Default Web Site");
windowsAuthenticationSection.Properties.Item("enabled").Value = true;
var extendedProtectionElement = windowsAuthenticationSection.ChildElements.Item("extendedProtection");
extendedProtectionElement.Properties.Item("tokenChecking").Value = "Allow";
extendedProtectionElement.Properties.Item("flags").Value = "None";
var extendedProtectionCollection = extendedProtectionElement.Collection;
var spnElement = extendedProtectionCollection.CreateNewElement("spn");
spnElement.Properties.Item("name").Value = "HTTP/www.contoso.com";
extendedProtectionCollection.AddElement(spnElement);
var spnElement1 = extendedProtectionCollection.CreateNewElement("spn");
spnElement1.Properties.Item("name").Value = "HTTP/contoso.com";
extendedProtectionCollection.AddElement(spnElement1);
adminManager.CommitChanges();
VBScript
Set adminManager = createObject("Microsoft.ApplicationHost.WritableAdminManager")
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST"
Set windowsAuthenticationSection = adminManager.GetAdminSection("system.webServer/security/authentication/windowsAuthentication", "MACHINE/WEBROOT/APPHOST/Default Web Site")
windowsAuthenticationSection.Properties.Item("enabled").Value = True
Set extendedProtectionElement = windowsAuthenticationSection.ChildElements.Item("extendedProtection")
extendedProtectionElement.Properties.Item("tokenChecking").Value = "Allow"
extendedProtectionElement.Properties.Item("flags").Value = "None"
Set extendedProtectionCollection = extendedProtectionElement.Collection
Set spnElement = extendedProtectionCollection.CreateNewElement("spn")
spnElement.Properties.Item("name").Value = "HTTP/www.contoso.com"
extendedProtectionCollection.AddElement(spnElement)
Set spnElement1 = extendedProtectionCollection.CreateNewElement("spn")
spnElement1.Properties.Item("name").Value = "HTTP/contoso.com"
extendedProtectionCollection.AddElement(spnElement1)
adminManager.CommitChanges()