Estás trabajando sin conexión, espera a que vuelva la conexión a Internet

Cómo usar SPN al configurar aplicaciones Web que se alojan en servicios de Internet Information Server

IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.

Haga clic aquí para ver el artículo original (en inglés): 929650
Resumen
Este artículo describe los nombres principales de servicio (SPN). Este artículo describe también cómo usar SPN al configurar aplicaciones Web que se alojan en los servicios de Microsoft Internet Information Services (IIS). Este artículo también describe el proceso de negociación de la autenticación integrada de Windows. El encabezado de seguridad "Negotiate" permite a los clientes seleccionar entre la autenticación Kerberos y la autenticación NTLM.

Además, este artículo describe escenarios comunes que requieren un SPN para habilitar la autenticación Kerberos. La última sección describe situaciones en que la autenticación Kerberos puede fallar. La última sección también proporciona pasos para solucionar problemas.
INTRODUCCIÓN
Importante: Los temas que se tratan en este artículo se aplican a servicios de Internet Information Server (IIS) 6.0. Los temas también se aplican a IIS 7.0 y 7.5 si está deshabilitada la autenticación de modo Kernel estableciendo el valor de configuración useKernelMode a False.
En este artículo paso a paso se describe cómo utilizar nombres principales de servicio (SPN) al configurar aplicaciones Web que se alojan en IIS. IIS pasa el encabezado de seguridad Negotiate cuando se utiliza la autenticación integrada de Windows para autenticar las solicitudes de cliente. El encabezado de seguridad "Negotiate" permite a los clientes seleccionar entre la autenticación Kerberos y la autenticación NTLM. El proceso de negociación selecciona la autenticación Kerberos a menos que una de las siguientes condiciones sea verdadera:
  • Uno de los sistemas que está implicado en la autenticación no puede utilizar la autenticación Kerberos.
  • La aplicación que se está llamando no proporciona la información suficiente para utilizar la autenticación Kerberos.
Para habilitar el proceso de negociación para que seleccione el protocolo Kerberos para la autenticación, la aplicación cliente debe proporcionar un SPN, un nombre principal de usuario (UPN) o un nombre de cuenta de NetBIOS como el nombre de destino. Si la aplicación cliente no proporciona un nombre de destino, el proceso de negociación no puede utilizar el protocolo Kerberos. Si el proceso de negociación no puede utilizar el protocolo Kerberos, el proceso de negociación selecciona el protocolo NTLM.
Más información

Conceptos

Definición de un SPN

Un SPN es el nombre mediante el cual un cliente identifica de manera única una instancia de un servicio. Si instala varias instancias de un servicio en los equipos de un bosque, cada instancia de servicio debe tener su propio SPN. Una instancia de un servicio determinado puede tener varios SPN si hay varios nombres que los clientes pueden utilizar para la autenticación. Por ejemplo, un SPN siempre incluye el nombre del equipo host en el que se ejecuta la instancia de servicio. Por lo tanto, una instancia de servicio puede registrar un SPN para cada nombre o alias de su host.

La clase de servicio HTTP

La clase de servicio HTTP difiere del protocolo HTTP. El protocolo HTTP y el protocolo HTTPS utilizan la clase de servicio HTTP. La clase de servicio es la cadena que identifica la clase general del servicio. Nombres de clase de servicio conocido incluyen "www" para un servicio Web y "ldap" para un servicio de directorio. Por lo general, el nombre de la clase de servicio puede ser cualquier cadena que sea única para la clase de servicio. Tenga en cuenta que la sintaxis SPN utiliza un carácter de barra diagonal (/) para separar los elementos. Por lo tanto, no puede aparecer el carácter de barra diagonal (/) en un nombre de clase de servicio.

El servicio HOST y la clase de servicio HTTP

El servicio HOST representa el equipo host. El protocolo Kerberos utiliza el SPN de HOST para tener acceso al equipo host. El protocolo Kerberos utiliza la "llave" de largo plazo que se encuentra en el equipo host para crear un vale de servicio.

La clase de servicio HTTP es uno de los servicios integrados que actúan como un alias para el SPN de HOST. El SPN de HOST se asigna a la cuenta del equipo host. Por lo tanto, cuando se utiliza la clase de servicio HTTP predeterminada, el protocolo Kerberos utiliza la cuenta del equipo como cuenta de servicio para solicitar un vale de servicio.

Escenarios comunes

En esta sección se describe escenarios que pueden requerir un SPN. Además, en esta sección se muestra cómo determinar qué SPN se debe establecer para cada escenario. En estos casos, se utilizan los siguientes términos:
IIS6server1El nombre de host del equipo que está ejecutando IIS
miDominioEl dominio al que está unido el equipo IIS6server1
appPool1La cuenta de usuario en el dominio de MiDominio que se utiliza para la identidad del grupo de aplicaciones
appPool2La cuenta de usuario en el dominio de MiDominio que se utiliza para la identidad del segundo grupo
www.Test.comEl primer encabezado de host para un sitio Web
www.Test2.comEl segundo encabezado de host para un sitio Web
www.test3.comEl tercer encabezado de host para un sitio Web
www.myIIScluster.comEl nombre de dominio completo de un clúster de equipos que ejecutan IIS
www.myEXCHcluster.comEl nombre de dominio completo de un clúster de equipos que ejecutan Microsoft Exchange en IIS

La herramienta Setspn.exe

La herramienta Setspn.exe permite leer, modificar y eliminar la propiedad de directorio SPN para una cuenta de servicio de Active Directory. Los SPN se utilizan para localizar un nombre principal de destino para ejecutar un servicio. La herramienta SetSpn.exe también permite ver los SPN actuales, restablecer los SPN predeterminados de la cuenta y agregar o eliminar SPN complementarios.

Para obtener la herramienta Setspn.exe para Microsoft Windows Server 2003, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
970536 Actualización de herramienta de soporte técnico de Setspn.exe para Windows Server 2003

Escenario 1: Acceso a una aplicación de IIS cuando se ha modificado la identidad del grupo de aplicaciones

Cuando una aplicación de IIS se ejecuta en una cuenta de usuario de dominio en lugar de en la cuenta de servicio de red predeterminada, debe establecer el SPN del servicio HTTP en la cuenta de dominio. En este escenario, se accede a la aplicación de IIS utilizando, ya sea el nombre NetBIOS del servidor que ejecuta el IIS o el FQDN del servidor que está ejecutando el IIS.

Para acceder a la aplicación de IIS mediante el nombre NetBIOS, utilice el comando siguiente, donde NETBIOS_NAME_OF_IIS_SERVER es el nombre NetBIOS del servidor que está ejecutando IIS:
Setspn – S HTTP /NETBIOS_NAME_OF_IIS_SERVER dominio\nombre de usuario
Por ejemplo, el comando puede ser similar a lo siguiente:
Setspn – S HTTP/iis6server1 mydomain\appPool1
Para acceder a la aplicación de IIS utilizando el nombre completo, utilice el comando siguiente, donde FQDN_OF_IIS_SERVER es el FQDN del servidor que está ejecutando IIS:
Setspn – S HTTP /FQDN_OF_IIS_SERVER dominio\nombre de usuario
Por ejemplo, el comando puede ser similar a lo siguiente:
Setspn – S HTTP/iis6server1.mydomain.com mydomain\appPool1

Escenario 2: Acceso a una aplicación Web utilizando un encabezado de host

Cuando tiene acceso a una aplicación Web utilizando un encabezado de host, debe establecer un SPN para el servicio HTTP.

Al ejecutar la aplicación Web sometida a una cuenta predeterminada como la cuenta de servicio de red, la cuenta servicio local o la cuenta de sistema local, puede utilizar el siguiente comando:
Setspn-A HTTP /HOST_HEADER NETBIOS_NAME_OF_IIS_SERVER
En este comando, HOST_HEADER es el encabezado de host que se escribe en un explorador ventana para tener acceso a la aplicación, y NETBIOS_NAME_OF_IIS_SERVER es el nombre NetBIOS del servidor que está ejecutando IIS.

Por ejemplo, el comando de la aplicación puede ser similar a lo siguiente:
Setspn – A iis6server1 HTTP/www.test.com
Si ejecuta la aplicación bajo una cuenta de dominio, puede utilizar el siguiente comando:
Setspn-A HTTP /HOSTHEADER_OR_DNS_ALIAS dominio\nombre de usuario
En este comando, HOSTHEADER_OR_DNS_ALIAS es el encabezado de host o alias DNS que se utiliza para tener acceso a la aplicación Web.

Por ejemplo, el comando de la aplicación puede ser similar a uno de los siguientes comandos:
  • Setspn – A mydomain\appPool1 HTTP/www.test.com
  • Setspn – A mydomain\appPool2 HTTP/www.test3.com

Escenario 3: Tener acceso a una aplicación de IIS en un entorno de clúster o equilibrio de carga

Al ejecutar IIS en un entorno agrupado o en un entorno con equilibrio de carga, acceso a aplicaciones mediante el nombre del clúster en lugar de utilizando un nombre de nodo. Este escenario incluye el equilibrio de la carga en la red. En la tecnología de clúster, un nodo se refiere a un equipo que es miembro del clúster. Para utilizar Kerberos como protocolo de autenticación en este escenario, la identidad del grupo de aplicación en cada nodo IIS debe configurarse para utilizar la misma cuenta de usuario de dominio. Para configurar cada nodo IIS para utilizar la misma cuenta de usuario de dominio, utilice el comando siguiente:
Setspn-A HTTP /NOMBREDECLÚSTER dominio\nombre de usuario
Por ejemplo, el comando puede ser similar a uno de los siguientes comandos:
  • Setspn – A mydomain\appPool1 HTTP/www.myIISCluster.com
  • Setspn – A mydomain\appPool2 HTTP/www.myEXCHCluster.com

Escenario 4: Usar SQL Server para tener acceso a una aplicación

El SPN en el servidor back-end que tenga que comprobar si la aplicación Web de IIS requiere acceso a un equipo de back-end que está ejecutando SQL Server. La aplicación Web no funcionen correctamente si los SPN necesarios están configurados incorrectamente.

Si el equipo back-end que está ejecutando SQL Server se ejecuta bajo la cuenta sistema local, el MSSQLSvc /FQDN_OF_SQL_SERVER:Port número de puerto debe estar disponible para el nombre del equipo. Para determinar los SPN para el equipo que está ejecutando SQL Server, utilice el comando siguiente:
Setspn – L SQL_SERVER_COMPUTER_NAME
Utilice el siguiente comando para establecer el SPN para el nombre del equipo que está ejecutando SQL Server:
Setspn – A MSSQLSvc /FQDN_OF_SQLSERVER:Port SQLSERVER_COMPUTER_NAME
Si el equipo back-end que está ejecutando SQL Server se ejecuta bajo una cuenta de dominio, el MSSQLSvc /FQDN_OF_SQL_SERVER:Port número de puerto debe estar disponible para la cuenta de dominio. Utilice el comando siguiente para determinar el SPN para la cuenta de dominio:
Setspn – L dominio\nombreDeUsuario
Utilice uno de los siguientes comandos para establecer el SPN para el nombre del equipo que está ejecutando SQL Server:
  • Setspn – A MSSQLSvc /FQDN_OF_SQLSERVER:PortFQDN_OF_SQLSERVER
  • Setspn – A MSSQLSvc /FQDN_OF_SQLSERVER:Portdominio\nombre de usuario

La secuencia de comandos SPN auxiliar

Puede utilizar la siguiente secuencia de comandos de ejemplo para buscar el SPN de una aplicación de IIS. También puede utilizar esta secuencia de comandos para buscar los SPN duplicados. Para utilizar esta secuencia de comandos, siga estos pasos:
  1. Haga clic en Inicio, haga clic en Ejecutar, tipo Bloc de notasy, a continuación, haga clic en Aceptar.
  2. En el archivo de Bloc de notas, pegue el siguiente script:
    Dim argSPN, argUser, argComputer, spnToSearch, objCategory, strFilter, searchCategory, domainInputFunction Help()Dim strMessagestrMessage = strMessage & "Usage:" & chr(13)strMessage = strMessage & "For accurate results run this script from the IIS server or a member server in the same domain as IIS server." & chr(13)strMessage = strMessage & "Check the article's failure scenarios and make sure no duplicate SPNs exist." & chr(13)strMessage = strMessage & "cscript spnHelper.vbs /f:spn /spn:HTTP/www.test.com /user:mydomain\apppool1" & chr(13)strMessage = strMessage & "cscript spnHelper.vbs /f:spn /spn:HTTP/www.test.com /computer:iis6server1" & chr(13)strMessage = strMessage & "cscript spnHelper.vbs /f:user /user:mydomain\apppool1" & chr(13)strMessage = strMessage & "cscript spnHelper.vbs /f:computer /computer:iis6server1" & chr(13)strMessage = strMessage & "cscript spnHelper.vbs /f:duplicatespn /spn:HTTP/www.test.com" & chr(13)strMessage = strMessage & "cscript spnHelper.vbs /f:requiredspn" & chr(13)	MsgBox strMessage,,"SPN Helper"	WScript.QuitEnd FunctionFunction setArguments()	argSPN = lcase(WScript.Arguments.Named("spn"))	argUser =  lcase(WScript.Arguments.Named("user"))	argComputer = lcase(WScript.Arguments.Named("computer"))	searchCategory = lcase(WScript.Arguments.Named("f"))	if instr(argUser,"\")>0 then		domainInput = ",DC=" & split(argUser,"\")(0)		argUser = split(argUser,"\")(1)	end ifEnd FunctionFunction resetValues()	spnToSearch = ""	objCategory = ""	strFilter = ""End FunctionFunction getGCPath()	Dim tempGCPath, objGC, tempGC, tempStr	Set objGC = GetObject("GC:")	for each tempGC in objGC		tempGCPath = tempGC.ADsPath	next	if tempGCPath <> "" then		getGCPath = tempGCPath	else		WScript.Echo "Unable to find active directory"		WScript.Quit	end if	For tempCounter=0 to UBound(split(lcase(split(getGCPath,"//")(1)),"."))		If tempCounter = UBound(split(lcase(split(getGCPath,"//")(1)),".")) Then tempSeperator="" else tempSeperator = ","		tempStr = tempStr & "DC=" & split(lcase(split(getGCPath,"//")(1)),".")(tempCounter) & tempSeperator	Next	getGCPath = tempGCPath & "/" & tempStrEnd FunctionFunction getSPNClass()	Dim tempSPNClass	If trim(argSPN)="" Then getSPNClass = "*": Exit Function	If instr(argSPN,"/")=0 Then getSPNClass = "*": Exit Function	If instr(split(argSPN,"/")(0),"*")>0 Then getSPNClass = "*": Exit Function	getSPNClass = split(argSPN,"/")(0)End FunctionFunction isSPNInputValid(spnIN)	isSPNInputValid = ""	If instr(spnIN,"/")=0 Then Exit Function	If instr(spnIN,"*")>0 Then Exit Function	isSPNInputValid = spnINEnd FunctionFunction Main()	Dim paramSPN	paramSPN = ""	call  resetValues()	call setArguments()	Select Case searchCategory		Case "spn"			if (argUser = "" and argComputer = "") or (argUser <> "" and argComputer <> "") then WScript.Echo "You must use /spn along with /computer or /user": WScript.Quit			if argSPN = "" then argSPN = "*"			spnToSearch = "(servicePrincipalName=" & argSPN & ")"			if argUser <> "" then objCategory = "(objectCategory=person)(sAMAccountName=" & argUser & ")"			if argComputer <> "" then 				objCategory = "(objectCategory=computer)(cn=" & argComputer & ")"			End If			strFilter = "(&" & spnToSearch & objCategory & ")"		Case "duplicatespn"			If isSPNInputValid(argSPN)="" Then WScript.Echo "Invalid SPN input. Please verify and try again.": WScript.Quit			spnToSearch = "(servicePrincipalName=" & argSPN & ")"			strFilter = spnToSearch			paramSPN = argSPN		Case "requiredspn"			call showRequiredSPNs("IIS")			WScript.Quit		Case "computer"			objCategory = "(&(objectCategory=computer)(cn=" & argComputer & "))"			strFilter = objCategory		Case "user"			objCategory = "(&(objectCategory=person)(sAMAccountName=" & argUser & "))"			strFilter = objCategory		Case else			call Help()			WScript.Quit	End Select	call getSPNs(paramSPN)End FunctionFunction getPingResult(hostName,errorMessage)'On Error Resume NextgetPingResult = ""	If instr(hostName,".")=0 Then		Dim tempGCPath, objGC, tempGC		Set objGC = GetObject("GC:")		for each tempGC in objGC			tempGCPath = tempGC.ADsPath		next		if tempGCPath <> "" then			gcPath = tempGCPath		else			WScript.Echo "Unable to find active directory"			WScript.Quit		end if		Set adConn = CreateObject("ADODB.Connection")		Set adCmd = CReateObject("ADODB.Command")		adConn.Provider = "ADsDSOObject"		adConn.Open "ADs Provider"		Set adCmd.ActiveConnection = adConn		adQuery = "<" + gcPath + ">;" & "(&(objectCategory=computer)(cn=" & hostName & "))" & ";dnsHostName;subtree"		'WScript.Echo adQuery		'WScript.Quit		adCmd.CommandText = adQuery		Set adRecordSet = adCmd.Execute		if adRecordSet.RecordCount>0 Then 			If IsNull(adRecordSet.Fields("dnsHostName"))=0 Then 				getPingResult = adRecordSet.Fields("dnsHostName") 				hostName = getPingResult 			Else 				getPingResult = hostName			End If		else 			errorMessage = "Could not find " & hostname & " in the active directory"		end if		Exit Function	End If	getPingResult = hostNameExit Function'If Err Then getPingResult = hostNameEnd FunctionFunction getSPNs(spn)	Dim spnClass, duplicateSPNArray	spnClass = getSPNClass()	duplicateSPNArray = ""	gcPath = getGCPath()	Set adConn = CreateObject("ADODB.Connection")	Set adCmd = CreateObject("ADODB.Command")	adConn.Provider = "ADsDSOObject"	adConn.Open "ADs Provider"	Set adCmd.ActiveConnection = adConn	adQuery = "<" + gcPath + domainInput + ">;" & strFilter & ";distinguishedName,objectCategory,dnsHostName,servicePrincipalName,sAMAccountName;subtree"	'WScript.Echo adQuery	'WScript.Quit	adCmd.CommandText = adQuery	Set adRecordSet = adCmd.Execute	if adRecordSet.EOF and adRecordSet.Bof Then		WScript.echo "No " & searchCategory & " found with the given criteria."	else		If adRecordSet.RecordCount>10 Then			If msgbox(adRecordSet.RecordCount & " Records are returned with the given criteria. Printing all of them might take a long time" & chr(13) & " Do you want to print all of them?",vbYesNo,"Kerberos")=vbNo Then Exit Function		End If		Do While not adRecordset.Eof			If Err Then Exit Do			WScript.echo "Class: " & split(split(adRecordSet.Fields("objectCategory"),",")(0),"=")(1)			WScript.Echo adRecordSet.Fields("distinguishedName")			if UCase(adRecordSet.Fields("objectCategory")) = "COMPUTER" Then				WScript.echo "Computer Name" & adRecordSet.Fields("dnsHostName")			else				WScript.echo "User Name: " & adRecordSet.Fields("samAccountName")			end if			if instr(searchCategory,"spn")>0 Then				spnCollection = adRecordSet.Fields("servicePrincipalName")				for each individualSPN in spnCollection					if spnClass="*" Then					WScript.Echo Chr(9) + individualSPN					else						Select Case searchCategory							Case "spn"								if Lcase(split(individualSPN,"/")(0)) = lcase(spnClass) Then									WScript.Echo Chr(9) + individualSPN								end if							Case "duplicatespn"								if Lcase(individualSPN) = lcase(spn) Then									duplicateSPNArray = duplicateSPNArray & Lcase(individualSPN) & " for " & split(split(adRecordSet.Fields("objectCategory"),",")(0),"=")(1) & ":" & adRecordSet.Fields("samAccountName") & Chr(29)								end if							Case "requiredspn"						End Select					End if				next			end if			WScript.Echo			adRecordSet.MoveNext		Loop		If searchCategory = "duplicatespn" Then			If UBound(Split(duplicateSPNArray,Chr(29)))>1 Then				WScript.Echo "Duplicate SPNs found"				For tempDuplicateCount=0 to UBound(Split(duplicateSPNArray,Chr(29)))-1					WScript.Echo Split(duplicateSPNArray,Chr(29))(tempDuplicateCount)				Next			End If		End If		WScript.Echo ""		If adRecordset.RecordCount>1 Then WScript.Echo "Found " & adRecordset.RecordCount & " accounts" Else WScript.Echo "Found " & adRecordset.RecordCount & " account"	end if	adRecordset.Close	adConn.Close	If Err Then MsgBox Err.MessageEnd FunctionFunction getCategoryCount(myFilterValue, myFilterCategory)'This function accepts 2 parameters. First paramenter is the filter value and second param is filter category.'If you want to pass in your own filter string with various categories, you can pass "" as the second param.	gcPath = getGCPath()	searchCategory = myFilterCategory	Select Case lcase(searchCategory)		Case "spn"			tempFilter = "(servicePrincipalName=" & myFilterValue & ")"		Case "user"			tempFilter = "(&(objectCategory=person)(sAMAccountName=" & myFilterValue & "))"		Case "computer"			tempFilter = "(&(objectCategory=computer)(cn=" & myFilterValue & "))"		Case else			tempFilter = myFilterValue	End Select	Dim tempCategoryCount	tempCategoryCount = 0	Set adConn = CreateObject("ADODB.Connection")	Set adCmd = CReateObject("ADODB.Command")	adConn.Provider = "ADsDSOObject"	adConn.Open "ADs Provider"	Set adCmd.ActiveConnection = adConn	adQuery = "<" + gcPath + domainInput + ">;" & tempFilter & ";objectCategory,dnsHostName,servicePrincipalName,sAMAccountName;subtree"	'WScript.Echo adQuery	'WScript.Quit	adCmd.CommandText = adQuery	Set adRecordSet = adCmd.Execute	if adRecordSet.EOF and adRecordSet.Bof Then	else		Do While not adRecordset.Eof			If Err Then Exit Do			if searchCategory = "spn" Then				spnCollection = adRecordSet.Fields("servicePrincipalName")				for each individualSPN in spnCollection					If lcase(individualSPN) = lcase(myFilterValue) Then						tempCategoryCount  = tempCategoryCount  + 1					End If				next			else				tempCategoryCount = tempCategoryCount + 1			end if   			adRecordSet.MoveNext		Loop	end if	getCategoryCount = tempCategoryCount	adRecordset.Close	adConn.CloseEnd FunctionFunction showRequiredSPNs(Product)	Select Case Product		Case "IIS"			If MsgBox("Is IIS running in a Cluster or NLB",vbYesNo)=vbYes Then 'Running in Cluster or NLB is true				strClusterName = InputBox("Enter the Cluster Name")				If strClusterName = "" Then WScript.Quit				If getPingResult(strClusterName,errorMessage)="" Then					If MsgBox(errorMessage & ". Do you want to continue?",vbYesNo)<>vbYes Then WScript.Quit				End If				strDomainAccount = InputBox("Enter the Domain Account that the application pool is running under")				If strDomainAccount = "" Then WScript.Quit				strRequiredSPN = "HTTP/" & strClusterName				If instr(strDomainAccount,"\") > 0 then					If getCategoryCount(split(strDomainAccount,"\")(1), "user")=0 Then						WScript.Echo "Domain account " & strDomainAccount & " does not exist"						WScript.Quit					End If				Else					If getCategoryCount(strDomainAccount, "user")=0 Then						WScript.Echo "Domain account " & strDomainAccount & " does not exist"						WScript.Quit					End If				End If				If getCategoryCount(strRequiredSPN, "spn")>0 Then					WScript.Echo "SPN " & " is already set. Use search option for finding the account that it is set for"					WScript.Quit				End If				WScript.Echo "You need to set the SPN " & strRequiredSPN & " for domain account " & strDomainAccount			Else				If MsgBox("Is IIS application pool running under domain account",vbYesNo)=vbYes Then 					strHostName = InputBox("Enter the hostname or host header or FQDN that you use to access the application")					If strHostName = "" Then WScript.Quit					If getPingResult(strHostName,errorMessage)="" Then						If MsgBox(errorMessage & ". Do you want to continue?",vbYesNo)<>vbYes Then WScript.Quit					End If					strDomainAccount = InputBox("Enter the Domain Account that the application pool is running under")					If strDomainAccount = "" Then WScript.Quit					If instr(strDomainAccount,"\") > 0 then						If getCategoryCount(split(strDomainAccount,"\")(1), "user")=0 Then							WScript.Echo "Domain account " & strDomainAccount & " does not exist"							WScript.Quit						End If					Else						If getCategoryCount(strDomainAccount, "user")=0 Then							WScript.Echo "Domain account " & strDomainAccount & " does not exist"							WScript.Quit						End If					End If					strRequiredSPN = "HTTP/" & strHostName					If getCategoryCount(strRequiredSPN, "spn")>0 Then						WScript.Echo "SPN " & strSPNRequired & " is already set. Use search option for finding the account that it is set for"						WScript.Quit					Else						WScript.Echo "You need to set SPN " & strRequiredSPN & " for domain account " & strDomainAccount						WScript.Quit					End If				Else					strHostName = InputBox("Enter the host header or FQDN that you use to access the application")					If strHostName = "" Then WScript.Quit					If getPingResult(strHostName,errorMessage)="" Then						If MsgBox(errorMessage & ". Do you want to continue?",vbYesNo)<>vbYes Then WScript.Quit					End If					If MsgBox("Are you accessing the application with netbios name or FQDN or CNAME alias of IIS server?",vbYesNo)=vbYes Then						strRequiredSPN = "host/" & strHostName						If getCategoryCount(strRequiredSPN, "spn")>0 Then							WScript.Echo "Required SPN " & strRequiredSPN & " is already set. Use search option for finding the account that it is set for"							WScript.Quit						Else							WScript.Echo "You need to set SPN " & strRequiredSPN & " for IIS server's netbios name"							WScript.Quit						End If					End If					strHostHeader = InputBox("Enter the host header that you use to access the application")					If strHostHeader = "" Then WScript.Quit					strRequiredSPN = "http/" & strHostHeader					If getCategoryCount(strSPNRequired, "spn")>0 Then						WScript.Echo "A required SPN " & strSPNRequired & " is already set. Use search option to find the account the SPN is set to. If the required SPN is found under a different account, remove and add it to the IIS server's machine account."						WScript.Quit					Else						WScript.Echo "You need to set SPN " & strRequiredSPN & " for IIS server's netbios name"						WScript.Quit					End If				End If							End If		Case Else			call Help()	End SelectEnd Functioncall Main()'
  3. Guarde el archivo como Spnhelper.vbs.
  4. En el símbolo del sistema, ejecute el archivo Spnhelper.vbs mediante la opción de línea de comandos apropiada.

    Nota: Para ver las opciones de línea de comandos para el archivo Spnhelper.vbs, escriba Spnhelper.vbs/Help en un símbolo del sistema y presione ENTRAR.

Consideraciones adicionales

La autenticación Kerberos puede fallar cuando se configuren los SPN necesarios para las cuentas de equipo o para las cuentas de dominio. Si la autenticación Kerberos produce un error imprevisto, haga lo siguiente:
  • Compruebe que ningún SPN duplicados existe en el catálogo global para un SPN.

    Por ejemplo, si se establece el SPN HTTP/www.test.com para la cuenta myDomain\appPool1 y para la cuenta de myDomain\appPool2, un SPN duplicado existe aunque se configuren los SPN para diferentes cuentas. Además, si el SPN HTTP/iis6server1.mydomain.com está configurado para la cuenta myDomain\appPool1 y el SPN HTTP/iis6server1.mydomain.com también está asociado con la cuenta de equipo para el servidor, también tiene un SPN duplicado. Puede tener un SPN de HOST y un SPN de HTTP. El SPN de HTTP explícito anula una implícita que cubre la entrada de HOST. Sin embargo, si la dirección URL que los tipos de usuario está asociado con más de una cuenta de usuario o con más de una cuenta de equipo, tiene un SPN duplicado.
  • Compruebe que el SPN se han replicado en otros controladores de dominio.

    Problemas de replicación entre los controladores de dominio pueden impedir que los SPN replicar en otros controladores de dominio. Cuando los SPN no se replican en otros controladores de dominio, la aplicación no funcionen en algunos equipos cliente. Por ejemplo, si se establece el SPN HTTP/www.test.com para la cuenta myDomain\appPool1 en un controlador de dominio, el SPN HTTP/www.test.com puede no encontrarse para la cuenta myDomain\appPool1 en un segundo controlador de dominio si el SPN no se ha replicado en el segundo controlador de dominio.

    Nota: De forma predeterminada, la replicación tarda 15 minutos.
  • Compruebe que el servidor Web está configurado para admitir la autenticación de Kerberos. Para ello, compruebe que la configuración de la clave NTAuthenticationProviders en la metabase de IIS no se cambió a NTLM. El valor predeterminado es Negotiate, NTLM.
  • Compruebe que el servidor o el servicio que está delegando las credenciales es de confianza para la delegación.
  • Compruebe que la cuenta que se ejecuta el servicio es de confianza para la delegación.
  • En Active Directory, compruebe que está desactivada la casilla de verificación de la cuenta es importante y no se puede delegar para los usuarios que accedan a la aplicación.
  • Si tiene acceso a la aplicación directamente desde el servidor, compruebe que está desactivada la casilla de verificación Comprobación de seguridad de bucle invertido .Para obtener más información acerca de cómo comprobar que se deshabilita la comprobación de bucle invertido, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
    896861 Recibe un error 401.1 cuando explora un sitio Web que usa autenticación integrada y está alojado en IIS 5.1 o IIS 6
  • Compruebe que el cliente es un cliente habilitado para Kerberos. Además, compruebe que la opción Habilitar autenticación integrada de Windows está habilitada en Internet Explorer. Para ello, haga clic en Opciones de Internet en el menú Herramientas , haga clic en la ficha Opciones avanzadas y asegúrese de que está activada la casilla de verificación Habilitar autenticación integrada de Windows .
  • Compruebe que todos los equipos que forman parte del proceso de Kerberos tienen la resolución de nombres coherente y están conectados por la relación de confianza Kerberos. Por ejemplo, compruebe que los equipos que intervienen en el proceso de Kerberos están en el mismo bosque o que forman parte de una confianza de Kerberos entre bosques.
  • Compruebe que el tamaño del símbolo (token) no supera el valor establecido para la MaxTokenSize propiedad. Asimismo, compruebe que el tamaño de la solicitud no supera el valor establecido para la MaxFieldLength propiedad. Estos valores pueden superarse si los usuarios que forman parte del proceso de Kerberos son miembros de muchos grupos.
    920862 Mensaje de error cuando un usuario de Outlook Web Access intenta acceder a un buzón en Exchange Server 2003: "HTTP 400 Solicitud incorrecta (encabezado de solicitud demasiado larga)"
  • Compruebe que las directivas de seguridad necesarias están habilitadas al configurar cuentas de dominio para los grupos de aplicaciones. Para ello, compruebe que la cuenta de dominio es un miembro de las siguientes directivas de seguridad local en el equipo que está ejecutando IIS:
    • Ajustar cuotas de memoria para un proceso
    • Iniciar sesión como un servicio
    • Reemplazar un token de nivel de proceso
  • Compruebe que la autenticación Kerberos está funcionando correctamente sobre UDP. De forma predeterminada, la autenticación Kerberos utiliza UDP. Sin embargo, la pérdida de paquetes UDP puede producir un error en la autenticación de Kerberos. Cuando se produce este problema, puede forzar la autenticación Kerberos use TCP. Para obtener más información acerca de cómo forzar la autenticación Kerberos use TCP, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
    244474 Cómo hacer que Kerberos use TCP en lugar de UDP en Windows Server 2003, en Windows XP y en Windows 2000
  • Compruebe que la marca de tiempo en el autenticador no difiera en más de cinco minutos desde la marca de tiempo del servidor. Para obtener más información acerca de cómo resolver las diferencias de marca de hora, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
    232386 No puede iniciar sesión si no se sincronizan la hora y fecha
  • Compruebe que el puerto TCP/UDP 88 no esté bloqueado por un firewall o un enrutador. De forma predeterminada, la autenticación Kerberos utiliza el puerto TCP/UDP 88.
  • Compruebe que el entorno de modo de dominio es al menos un entorno de modo nativo de Microsoft Windows 2000. Para obtener más información acerca de cómo determinar el modo de dominio, visite el siguiente sitio Web de Microsoft:
  • En el cliente, compruebe que la dirección URL de la aplicación Web se agrega a los sitios de intranet local. Para obtener más información acerca de cómo agregar una dirección URL a la intranet local, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
    303650 Sitio de intranet se identifica como un sitio de Internet cuando utiliza un FQDN o una dirección IP
  • Compruebe que cada dispositivo de gigabit ethernet está utilizando la versión más reciente del controlador. Para obtener más información acerca de los problemas que pueden producirse cuando los controladores de dispositivos de gigabit Ethernet están actualizados, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
    326152 No se puede conectar al controlador de dominio y no se puede aplicar la directiva de grupo con dispositivos Gigabit Ethernet
Referencias
Para obtener más información acerca de cómo utilizar la autenticación Kerberos con equilibrio de carga de sitios Web, visite el siguiente sitio Web de Microsoft:Para obtener más información acerca de los problemas que pueden producirse al utilizar la autenticación Kerberos con servidores proxy, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
321728 Internet Explorer no admite la autenticación Kerberos con servidores proxy
Para obtener más información acerca de cómo configurar IIS para admitir el protocolo Kerberos y el protocolo NTLM para la autenticación de red, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
215383 Cómo configurar IIS para admitir el protocolo Kerberos y el protocolo NTLM para la autenticación de red
Para obtener más información acerca de cómo configurar un servidor virtual de Windows SharePoint Services para utilizar autenticación Kerberos y cómo volver desde la autenticación Kerberos a la autenticación NTLM, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
832769 Cómo configurar un servidor virtual de Windows SharePoint Services para utilizar autenticación Kerberos y cómo volver desde la autenticación Kerberos a la autenticación NTLM
Para obtener más información acerca de los problemas que pueden producirse cuando utiliza el protocolo de autenticación Kerberos para conectarse a un servidor Web que utiliza un puerto no estándar en Windows XP o Windows Server 2003, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
908209 Internet Explorer 6 no puede utilizar el protocolo de autenticación Kerberos para conectarse a un servidor Web que utiliza un puerto no estándar en Windows XP o Windows Server 2003

Propiedades

Id. de artículo: 929650 - Última revisión: 03/20/2016 08:05:00 - Revisión: 6.0

Microsoft Internet Information Services 7.5, Microsoft Internet Information Services 7.0, Servicios de Microsoft Internet Information Server 6.0

  • kbinfo kbhowto kbmt KB929650 KbMtes
Comentarios
rosoft.com/ms.js'><\/script>");