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

Seleccione idioma Seleccione idioma
Id. de artículo: 929650 - Ver los productos a los que se aplica este artículo
Expandir todo | Contraer todo

En esta página

Resumen

En este artículo se describen los nombres principales de servicio (SPN). En este artículo también describe cómo utilizar los SPN cuando configura las aplicaciones Web que se alojan en servicios de Internet Information Server (IIS). En este artículo también describe el proceso de negociación en la autenticación integrada de Windows. El Negociar seguridad encabezado permite clientes seleccione entre la autenticación Kerberos y la autenticación NTLM.

Además, en este artículo se describe escenarios comunes que requieren un SPN 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 los pasos de solución de problemas.

INTRODUCCIÓN

Importante Los temas que se tratan en este artículo se aplican a Internet Information Services (IIS) 6.0. Los temas también se aplican a IIS 7.0 y 7.5 si está deshabilitada la autenticación de modo de núcleo estableciendo el valor de configuración useKernelMode en false.
En este artículo paso a paso describe cómo utilizar nombres principales de servicio (SPN) al configurar aplicaciones Web que se alojan en pasadas IIS.IIS el encabezado de seguridad Negotiate cuando se utiliza la autenticación integrada de Windows para autenticar las solicitudes de cliente. El Negociar seguridad encabezado permite clientes seleccione entre la autenticación Kerberos y la autenticación NTLM. El proceso de negociación selecciona la autenticación Kerberos a menos que se cumpla una de las condiciones siguientes:
  • Uno de los sistemas implicados en la autenticación no puede utilizar la autenticación Kerberos.
  • La aplicación que realiza la llamada no proporciona suficiente información para utilizar la autenticación Kerberos.
Para habilitar el proceso de negociación seleccionar el protocolo Kerberos para la autenticación de red, 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 por el cual un cliente identifica una instancia de un servicio. Si instala varias instancias de un servicio en equipos en todo un bosque, cada instancia de servicio debe tener su propio SPN. Una instancia de 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 está ejecutando la instancia de servicio. Por lo tanto, una instancia de servicio podría registrar un SPN para cada nombre o alias de su host.

La clase de servicio HTTP

La clase de servicio HTTP difiere el 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 de servicio. Los nombres de clase de servicio conocido incluyen "www" de un servicio Web y "ldap" para un servicio de directorio. Generalmente, el nombre de la clase de servicio puede ser cualquier cadena que es único para la clase de servicio. Tenga en cuenta que la sintaxis SPN utiliza un carácter de barra diagonal (/) para separar elementos. Por lo tanto, no puede aparecer el carácter de barra diagonal (/) en un nombre de clase de servicio.

El servicio HOST y el HTTP clase de servicio

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 clave a largo plazo 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 predeterminado, el protocolo Kerberos utiliza la cuenta de equipo como cuenta de servicio para solicitar un vale de servicio.

Escenarios comunes

En esta sección se describen escenarios que pueden requerir un SPN. Además, esta sección muestra cómo determinar qué SPN para establecer para cada escenario. Los siguientes términos se utilizan en estos escenarios:
Contraer esta tablaAmpliar esta tabla
IIS6server1El nombre de host del equipo que ejecuta IIS
midominioEl dominio al que está unido el equipo IIS6server1
appPool1La cuenta de usuario en el dominio de midominio que utiliza para la identidad del grupo de aplicaciones
appPool2La cuenta de usuario en el dominio de midominio que utiliza para la segunda identidad del grupo de aplicaciones
www.prueba.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 buscar un nombre principal de destino para ejecutar un servicio. La herramienta SetSpn.exe también permite ver los SPN actuales, restablecer predeterminada SPN 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:
970536Setspn.exe compatibilidad con la herramienta de actualización para Windows Server 2003

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

Cuando una aplicación IIS se ejecuta bajo 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, tener acceso a la aplicación de IIS utilizando el nombre NetBIOS del servidor que ejecuta IIS o el nombre de dominio completo (FQDN) del servidor que ejecuta IIS.

Para obtener acceso 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 ejecuta IIS:
Setspn ? s HTTP / NETBIOS_NAME_OF_IIS_SERVER domain\username
Por ejemplo, el comando puede ser similar al comando siguiente:
Setspn ? s HTTP/iis6server1 mydomain\appPool1
Para obtener acceso a la aplicación de IIS mediante el nombre de dominio completo (FQDN), utilice el comando siguiente, donde FQDN_OF_IIS_SERVER es el nombre de dominio completo (FQDN) del servidor que ejecuta IIS:
Setspn ? s HTTP / FQDN_OF_IIS_SERVER domain\username
Por ejemplo, el comando puede ser similar al comando siguiente:
Setspn ? s HTTP/iis6server1.mydomain.com mydomain\appPool1

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

Al tener 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 de servicio local o la cuenta sistema local, puede utilizar el comando siguiente:
Setspn ?A HTTP / HOST_HEADER NETBIOS_NAME_OF_IIS_SERVER
En este comando HOST_HEADER es el encabezado de host que escriba en una ventana del explorador para tener acceso a la aplicación y NETBIOS_NAME_OF_IIS_SERVER es el nombre NetBIOS del servidor que ejecuta IIS.

Por ejemplo, el comando para la aplicación puede ser similar al comando siguiente:
Setspn ?A HTTP/www.test.com iis6server1
Si ejecuta la aplicación sometida a una cuenta de dominio, puede utilizar el comando siguiente:
Setspn ?A HTTP / HOSTHEADER_OR_DNS_ALIAS domain\username
En este comando HOSTHEADER_OR_DNS_ALIAS es el encabezado de host o alias DNS que utiliza para tener acceso a la aplicación Web.

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

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

Cuando ejecute IIS en un entorno con clústeres o en un entorno con equilibrio de carga, se obtiene acceso las aplicaciones utilizando el nombre del clúster en lugar de utilizando un nombre de nodo. Este escenario incluye equilibrio de carga de red. En la tecnología de clúster, un nodo hace referencia 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 aplicaciones 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 / CLUSTER_NAME dominio\nombre de usuario
Por ejemplo, el comando puede ser similar a uno de los siguientes comandos:
  • Setspn ?A HTTP/www.myIISCluster.com mydomain\appPool1
  • Setspn ?A HTTP/www.myEXCHCluster.com mydomain\appPool2

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

Los SPN en el servidor back-end que tenga que se comprobará si la aplicación Web de IIS requiere acceso a un equipo 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 está ejecutando bajo la cuenta sistema local, el MSSQLSvc / número de puerto FQDN_OF_SQL_SERVER:port debe estar disponible para el nombre de equipo. Utilice el comando siguiente para determinar los SPN del equipo que ejecuta SQL Server:
Setspn ? l SQL_SERVER_COMPUTER_NAME
Utilice el siguiente comando para establecer el SPN para el nombre del equipo que ejecuta SQL Server:
Setspn ?A MSSQLSvc / FQDN_OF_SQLSERVER:port SQLSERVER_COMPUTER_NAME
Si el equipo back-end que está ejecutando SQL Server está ejecutando bajo una cuenta de dominio, el MSSQLSvc / número de puerto FQDN_OF_SQL_SERVER:port debe estar disponible para la cuenta de dominio. Utilice el comando siguiente para determinar los SPN para la cuenta de dominio:
Dominio\nombre de usuario de Setspn ? l
Para establecer el SPN para el nombre del equipo que ejecuta SQL Server, utilice uno de los siguientes comandos:
  • Setspn ?A MSSQLSvc / FQDN_OF_SQLSERVER:portFQDN_OF_SQLSERVER
  • Setspn ?A MSSQLSvc / FQDN_OF_SQLSERVER:portdomain\username

La secuencia de comandos SPN auxiliar

Puede utilizar la siguiente secuencia de comandos de ejemplo para encontrar los SPN para una aplicación 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, escriba Notepad y, a continuación, haga clic en Aceptar.
  2. In the Notepad file, paste the following script:
    Dim argSPN, argUser, argComputer, spnToSearch, objCategory, strFilter, searchCategory, domainInput
    
    Function Help()
    Dim strMessage
    strMessage = 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.Quit
    End Function
    
    Function 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 if
    End Function
    
    Function resetValues()
    	spnToSearch = ""
    	objCategory = ""
    	strFilter = ""
    End Function
    
    Function 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 & "/" & tempStr
    End Function
    
    Function 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 Function
    
    Function isSPNInputValid(spnIN)
    	isSPNInputValid = ""
    	If instr(spnIN,"/")=0 Then Exit Function
    	If instr(spnIN,"*")>0 Then Exit Function
    	isSPNInputValid = spnIN
    End Function
    
    Function 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 Function
    
    Function getPingResult(hostName,errorMessage)
    'On Error Resume Next
    getPingResult = ""
    	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 = hostName
    Exit Function
    'If Err Then getPingResult = hostName
    End Function
    
    Function 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.Message
    End Function
    
    Function 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.Close
    End Function
    
    Function 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 Select
    End Function
    
    call 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, a continuación, presione ENTRAR.

Consideraciones adicionales

La autenticación Kerberos puede fallar al SPN requeridos se ha establecido para las cuentas de equipo o para las cuentas de dominio. Si la autenticación Kerberos no tiene éxito inesperadamente, haga lo siguiente:
  • Compruebe que ningún SPN duplicados existen en el catálogo global para un SPN.

    Por ejemplo, si el SPN HTTP/www.test.com está configurado para la cuenta myDomain\appPool1 y para la cuenta myDomain\appPool2, un SPN duplicado existe incluso aunque los SPN se establecen para diferentes cuentas. Además, si el SPN HTTP/iis6server1.mydomain.com está configurado para la cuenta myDomain\appPool1 y 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ícita anulará una implícita que está cubierta bajo la entrada 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, tendrá 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 replica en otros controladores de dominio, es posible que la aplicación no funcione de 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 no podrá 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 el valor de la clave NTAuthenticationProviders en la metabase de IIS no ha cambiado a NTLM. El valor predeterminado es Negotiate, NTLM.
  • Compruebe que el servidor o servicio que delega las credenciales es de confianza para delegación.
  • Compruebe que la cuenta que el servicio se ejecuta bajo es de confianza para la delegación.
  • En Active Directory, compruebe que está desactivada la casilla de verificación de cuenta es confidencial y no se puede delegar a los usuarios que tienen acceso a la aplicación.
  • Si intenta obtener acceso a la aplicación directamente desde el servidor, compruebe que está desactivada la casilla de verificación Comprobar la seguridad de bucle invertido.Para obtener más información acerca de cómo comprobar que la comprobación de bucle invertido está deshabilitada, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
    896861Recibe el 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 configuración de Habilitar la 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 resolución de nombres coherente y están conectados mediante confianza Kerberos. Por ejemplo, compruebe que los equipos que participan en el proceso de Kerberos están en el mismo bosque o forman parte de una relación de confianza de Kerberos entre bosques.
  • Compruebe que el tamaño de símbolo (token) no supere el valor establecido para la propiedad MaxTokenSize. Además, compruebe que el tamaño de la solicitud no supere el valor establecido para la propiedad MaxFieldLength. Estos valores pueden superarse si los usuarios que formen parte del proceso de Kerberos son miembros de muchos grupos.
    920862Mensaje de error cuando un usuario de Outlook Web Access intenta obtener acceso a un buzón en Exchange Server 2003: ? HTTP 400 Solicitud incorrecta (encabezado de solicitud demasiado largo) ?
  • Compruebe que las directivas de seguridad necesarias están habilitadas cuando configura grupos de aplicaciones en las cuentas de dominio. Para ello, compruebe que la cuenta de dominio es un miembro de las siguientes directivas de seguridad local en el equipo que ejecuta IIS:
    • Ajustar cuotas de memoria para un proceso
    • Inicio de sesión como servicio
    • Reemplazar un testigo de proceso
  • Compruebe que la autenticación Kerberos funciona correctamente a través de UDP. De forma predeterminada, la autenticación Kerberos utiliza UDP. Sin embargo, la pérdida de paquetes UDP puede provocar la autenticación Kerberos para producir un error. 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:
    244474Cómo hacer que Kerberos use TCP en lugar de UDP en Windows Server 2003, Windows XP y 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:
    232386No puede iniciar sesión si la fecha y hora no están sincronizados
  • Comprobar que el puerto TCP o UDP 88 no está bloqueado por un servidor de seguridad o un enrutador. De forma predeterminada, la autenticación Kerberos utiliza el puerto TCP o 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:
    http://technet2.microsoft.com/windowsserver/en/library/11b2d3d3-980c-4b64-9ed3-51778f1fe5771033.mspx?mfr=true
  • En el cliente, compruebe que la dirección URL de la aplicación Web se ha agregado 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:
    303650Sitio de intranet se identifica como un sitio de Internet cuando se utiliza un nombre de dominio completo (FQDN) o una dirección IP
  • Compruebe que cada dispositivo de ethernet gigabit es 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 obsoletos, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
    326152No se puede conectar a 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 carga equilibrada sitios Web, visite el siguiente sitio Web de Microsoft:
http://technet.microsoft.com/en-us/library/cc757299.aspx
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:
321728Internet Explorer no es compatible con la autenticación Kerberos con servidores proxy
Para obtener más información acerca de cómo configurar IIS para que admita 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:
215383Cómo configurar IIS para que admita 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 la autenticación de Kerberos y cómo cambiar desde la autenticación Kerberos volver a la autenticación NTLM, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
832769Cómo configurar un servidor virtual de Windows SharePoint Services para utilizar la autenticación Kerberos y cómo cambiar 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 conectar 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:
908209Internet 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: miércoles, 12 de mayo de 2010 - Versión: 5.0
La información de este artículo se refiere a:
  • Microsoft Internet Information Services 7.5
  • Microsoft Internet Information Services 7.0
  • Servicios de Microsoft Internet Information Server 6.0
Palabras clave: 
kbmt kbinfo kbhowto KB929650 KbMtes
Traducción automática
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

Enviar comentarios

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com