Como utilizar o SPN quando configurar aplicações da Web hospedados no IIS

Traduções de Artigos Traduções de Artigos
Artigo: 929650 - Ver produtos para os quais este artigo se aplica.
Expandir tudo | Reduzir tudo

Nesta página

Sumário

Este artigo descreve os nomes principais de serviço (SPN). Este artigo também descreve como utilizar o SPN quando configurar aplicações Web hospedadas no Microsoft Internet Information Services (IIS). Este artigo também descreve o processo de negociar a autenticação integrada do Windows. Negociar segurança cabeçalho permite que clientes seleccione entre a autenticação Kerberos e a autenticação NTLM.

Além disso, este artigo descreve cenários comuns que requerem um SPN activar a autenticação Kerberos. A última secção descreve situações nas quais poderá falhar a autenticação Kerberos. A última secção também fornece passos de resolução de problemas.

INTRODUÇÃO

Importante Os tópicos abordados neste artigo se aplicam a Internet Information Services (IIS) 6.0. Os tópicos também se aplicam aos IIS 7.0 e 7.5 se a autenticação de modo kernel está desactivada por definição a definição de configuração useKernelMode como false.
Este artigo passo a passo descreve como utilizar nomes principais de serviço (SPN) quando configurar aplicações Web hospedadas em passagens IIS.IIS cabeçalho de negociar segurança quando é utilizada a autenticação integrada do Windows para autenticar pedidos de cliente. Negociar segurança cabeçalho permite que clientes seleccione entre a autenticação Kerberos e a autenticação NTLM. O processo de Negotiate selecciona a autenticação Kerberos, a menos que se verifique uma das seguintes condições verdadeira:
  • Um dos sistemas que esteja envolvido na autenticação não é possível utilizar a autenticação Kerberos.
  • A aplicação de chamada não fornece informações suficientes para utilizar a autenticação Kerberos.
Para permitir que o processo de Negotiate seleccionar o protocolo Kerberos para autenticação de rede, a aplicação cliente deve fornecer um SPN, um nome principal de utilizador (UPN) ou um nome de conta de NetBIOS como o nome de destino. Se a aplicação cliente não fornecer um nome de destino, o processo de negociar não pode utilizar o protocolo Kerberos. Se o processo de negociar não pode utilizar o protocolo Kerberos, o processo de Negotiate selecciona o protocolo NTLM.

Mais Informação

Conceitos

Definição de um SPN

Um SPN é o nome pelo qual um cliente identifica uma instância de um serviço. Se instalar várias instâncias de um serviço nos computadores através de uma floresta, cada instância de serviço deve ter própria SPN. Uma instância do serviço em particular pode ter vários SPN se existirem vários nomes que os clientes podem utilizar para autenticação. Por exemplo, um SPN sempre inclui o nome do computador anfitrião no qual a instância de serviço está a ser executado. Por conseguinte, uma instância do serviço pode registar um SPN para cada nome ou alias do anfitrião.

A classe do serviço HTTP

A classe do serviço HTTP difere do protocolo HTTP. O protocolo HTTP e o protocolo HTTPS utilizam a classe de serviço HTTP. A classe de serviço é a cadeia que identifica a classe geral do serviço. Nomes de classes de serviço bem conhecido incluem "www" para um serviço Web e "ldap" para um serviço de directório. Geralmente, o nome da classe de serviço pode ser qualquer cadeia que é exclusiva para a classe de serviço. Tenha em atenção que a sintaxe SPN utiliza um carácter de barra diagonal (/) para separar elementos. Por conseguinte, o carácter de barra diagonal (/) não pode aparecer num nome de classe de serviço.

Classe de serviço o serviço do HOST e o HTTP

O serviço do HOST representa o computador anfitrião. O protocolo Kerberos utiliza o SPN HOST para aceder ao computador anfitrião. O protocolo Kerberos utiliza a chave a longo prazo no computador anfitrião para criar uma permissão de serviço.

A classe de serviço HTTP é um dos serviços incorporados que funcionam como um alias para o SPN do HOST. O SPN HOST é mapeado para a conta do computador anfitrião. Por conseguinte, quando utiliza a classe predefinida do serviço HTTP, o protocolo Kerberos utiliza a conta de computador com a conta de serviço para pedir uma permissão de serviço.

Cenários comuns

Esta secção descreve cenários que podem requerer um SPN. Além disso, esta secção demonstra como determinar qual SPN definir para cada cenário. Nestes cenários, são utilizados os seguintes termos:
Reduzir esta tabelaExpandir esta tabela
IIS6server1O nome de anfitrião do computador que está a executar o IIS
mydomainO domínio ao qual o computador IIS6server1 está associado
appPool1A conta de utilizador no domínio mydomain que é utilizado para a identidade do agrupamento de aplicações
appPool2A conta de utilizador no domínio mydomain que é utilizado para a segunda identidade do agrupamento de aplicações
www.test.comNo primeiro cabeçalho de anfitrião para um Web site
www.TEST2.comO segundo cabeçalho de anfitrião para um Web site
www.test3.comO terceiro cabeçalho de anfitrião para um Web site
www.myIIScluster.comO nome de domínio totalmente qualificado de um cluster de computadores que executem o IIS
www.myEXCHcluster.comO nome de domínio totalmente qualificado de um cluster de computadores que executem o Microsoft Exchange no IIS

A ferramenta Setspn.exe

A ferramenta Setspn.exe permite-lhe ler, modificar e eliminar a propriedade de directório SPN para uma conta de serviço do Active Directory. SPN é utilizado para localizar um nome principal do destino para executar um serviço. A ferramenta SetSpn.exe também permite-lhe ver o SPN actual, repor predefinida SPN a conta e adicionar ou eliminar SPN suplementar.

Para obter a ferramenta Setspn.exe para o Microsoft Windows Server 2003, clique no número de artigo que se segue para visualizar o artigo na base de dados de conhecimento da Microsoft:
970536Setspn.exe suporte ferramenta de actualização para o Windows Server 2003

Cenário 1: Aceder a uma aplicação do IIS quando tiver sido modificada a identidade do agrupamento de aplicações

Quando uma aplicação do IIS é executado sob uma conta de utilizador de domínio em vez de sob a conta de serviço de rede predefinida, tem de definir o SPN do serviço HTTP na conta de domínio. Neste cenário, pode aceder a aplicação IIS utilizando o nome de NetBIOS do servidor que está a executar o IIS ou o nome de domínio completamente QUALIFICADO do servidor que está a executar o IIS.

Para aceder à aplicação do IIS utilizando o nome de NetBIOS, utilize o comando seguinte, onde NETBIOS_NAME_OF_IIS_SERVER é o nome de NetBIOS do servidor que está a executar o IIS:
Setspn ?S HTTP / NETBIOS_NAME_OF_IIS_SERVER domain\username
Por exemplo, o comando poderá ser semelhante o seguinte comando:
Setspn ?S HTTP/iis6server1 mydomain\appPool1
Para aceder à aplicação do IIS utilizando o FQDN, utilize o comando seguinte, onde FQDN_OF_IIS_SERVER é o FQDN do servidor que está a executar o IIS:
Setspn ?S HTTP / FQDN_OF_IIS_SERVER domain\username
Por exemplo, o comando poderá ser semelhante o seguinte comando:
Setspn ?S HTTP/iis6server1.mydomain.com mydomain\appPool1

Cenário 2: Aceder a uma aplicação Web utilizando um cabeçalho de anfitrião

Quando acede a uma aplicação Web utilizando um cabeçalho de anfitrião, terá de definir um SPN do serviço HTTP.

Quando executa a aplicação Web sob uma conta predefinida como a conta do serviço de rede, a conta serviço local ou a conta de sistema local, pode utilizar o seguinte comando:
Setspn ?A HTTP / HOST_HEADER NETBIOS_NAME_OF_IIS_SERVER
Neste comando, HOST_HEADER é o cabeçalho de anfitrião que escreve uma janela do browser para aceder à aplicação e NETBIOS_NAME_OF_IIS_SERVER é o nome de NetBIOS do servidor que está a executar o IIS.

Por exemplo, o comando para a aplicação poderá ser semelhante o seguinte comando:
Setspn ?A HTTP/www.test.com iis6server1
Se executar a aplicação numa conta de domínio, pode utilizar o seguinte comando:
Setspn ?A HTTP / HOSTHEADER_OR_DNS_ALIAS domain\username
Neste comando, HOSTHEADER_OR_DNS_ALIAS é o cabeçalho de anfitrião ou o alias de DNS utiliza para aceder à aplicação Web.

Por exemplo, o comando para a aplicação poderá ser semelhante um dos seguintes comandos:
  • Setspn ?A HTTP/www.test.com mydomain\appPool1
  • Setspn ?A HTTP/www.test3.com mydomain\appPool2

Cenário 3: Aceder a uma aplicação do IIS num ambiente em cluster ou com balanceamento de carga

Quando executa o IIS num ambiente de cluster ou num ambiente com balanceamento de carga, pode aceder a aplicações utilizando o nome do cluster em vez de utilizando um nome de nó. Este cenário inclui balanceamento de carga em rede. Na tecnologia de cluster, um nó refere-se a um computador que seja membro do cluster. Para utilizar Kerberos como o protocolo de autenticação neste cenário, a identidade do agrupamento de aplicações em cada nó IIS tem de ser configurada para utilizar a mesma conta de utilizador de domínio. Para configurar cada nó IIS para utilizar a mesma conta de utilizador de domínio, utilize o seguinte comando:
Setspn ?A HTTP / CLUSTER_NAME domínio\utilizador
Por exemplo, o comando poderá ser semelhante um dos seguintes comandos:
  • Setspn ?A HTTP/www.myIISCluster.com mydomain\appPool1
  • Setspn ?A HTTP/www.myEXCHCluster.com mydomain\appPool2

Cenário 4: Utilizar SQL Server para aceder a uma aplicação

O SPN no servidor back-end poderá ter de verificar se a aplicação Web do IIS requer acesso a um computador de back-end que esteja a executar o SQL Server. A aplicação da Web poderão não funcionar correctamente se o SPN necessário está configurado incorrectamente.

Se o computador de back-end que esteja a executar o SQL Server estiver a executar sob a conta sistema local, o MSSQLSvc / FQDN_OF_SQL_SERVER:port número da porta tem de estar disponível para o nome do computador. Utilize o seguinte comando para determinar o SPN do computador que está a executar o SQL Server:
Setspn ?L SQL_SERVER_COMPUTER_NAME
Utilize o seguinte comando para definir o SPN para o nome do computador que esteja a executar o SQL Server:
Setspn ?A MSSQLSvc / FQDN_OF_SQLSERVER:port SQLSERVER_COMPUTER_NAME
Se o computador back-end com o SQL Server está a ser executado numa conta de domínio, o MSSQLSvc / FQDN_OF_SQL_SERVER:port número da porta tem de estar disponível para a conta de domínio. Utilize o seguinte comando para determinar o SPN para a conta de domínio:
Setspn ?L domínio\utilizador
Utilize um dos seguintes comandos para definir o SPN para o nome do computador que esteja a executar o SQL Server:
  • Setspn ?A MSSQLSvc / FQDN_OF_SQLSERVER:portFQDN_OF_SQLSERVER
  • Setspn ?A MSSQLSvc / FQDN_OF_SQLSERVER:portdomain\username

O script de programa auxiliar SPN

Pode utilizar o seguinte script de exemplo para encontrar o SPN para uma aplicação do IIS. Também pode utilizar este script para localizar duplicado SPN. Para utilizar este script, siga estes passos:
  1. Clique em Iniciar, clique em Executar, escreva o Bloco de notas e, em seguida, clique em OK.
  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 o ficheiro como Spnhelper.vbs.
  4. Numa linha de comandos, execute o ficheiro Spnhelper.vbs utilizando a opção da linha de comandos adequada.

    Nota Para ver as opções da linha de comandos para o ficheiro Spnhelper.vbs, escreva Spnhelper.vbs/help numa linha de comandos e prima ENTER.

Considerações adicionais

A autenticação Kerberos poderá falhar quando o SPN necessário está definida para as contas de computador ou para as contas de domínio. Se a autenticação Kerberos falhar inesperadamente, proceda do seguinte modo:
  • Verifique se nenhuma SPN duplicado existe no catálogo global para um SPN.

    Por exemplo, se o SPN HTTP/www.test.com estiver definido para a conta myDomain\appPool1 e por conta myDomain\appPool2, um SPN duplicado existe apesar do SPN está definido para contas diferentes. Além disso, se o SPN HTTP/iis6server1.mydomain.com estiver definido para a conta myDomain\appPool1 e o SPN HTTP/iis6server1.mydomain.com também está associado com a conta de computador para o servidor, tem também um SPN duplicado. Pode ter um HOST SPN e um SPN de HTTP. O SPN de HTTP explícita substituirão implícito aquele que é abrangido na entrada de HOST. No entanto, se o URL que o utilizador escreve está associado com mais do que uma conta de utilizador ou com mais do que uma conta de computador, tem um duplicado SPN.
  • Certifique-se de que o SPN foram replicados para outros controladores de domínio.

    Problemas de replicação entre os controladores de domínio podem impedir que o SPN replicadas para outros controladores de domínio. Quando o SPN não é replicadas para outros controladores de domínio, a aplicação poderá não funcionar de alguns computadores cliente. Por exemplo, se o SPN HTTP/www.test.com estiver definido para a conta myDomain\appPool1 num controlador de domínio, o SPN HTTP/www.test.com pode não estar para a conta myDomain\appPool1 um segundo controlador de domínio se o SPN não foi replicado para o segundo controlador de domínio.

    Nota Por predefinição, a replicação demora 15 minutos.
  • Verifique se o servidor Web está configurado para suportar a autenticação Kerberos. Para efectuar este procedimento, certifique-se de que a definição da chave de NTAuthenticationProviders na metabase do IIS não foi alterada para NTLM. A predefinição é Negotiate, NTLM.
  • Verifique se o servidor ou serviço que está a delegar as credenciais é fidedigno para delegação.
  • Verifique se a conta qual o serviço está em execução é fidedigna para delegação.
  • No Active Directory, certifique-se de que a conta é sensível e não pode ser delegada está desmarcada para utilizadores que acedam a aplicação.
  • Se estiver a aceder a aplicação directamente através do servidor, certifique-se de que a caixa de verificação Security Check, o Loopback está desmarcada.Para obter mais informações sobre como verificar que a verificação do loopback está desactivada, clique no número de artigo que se segue para visualizar o artigo na base de dados de conhecimento da Microsoft:
    896861Recebe o erro 401.1 quando navega num Web site que utiliza autenticação integrada e é hospedado no IIS 5.1 ou IIS 6
  • Verifique se o cliente é um cliente Kerberos activado. Além disso, certifique-se de que a definição Activar autenticação integrada do Windows é activada no Internet Explorer. Para tal, clique em Opções da Internet no menu Ferramentas, clique no separador Avançadas e, em seguida, certifique-se de que a caixa de verificação Activar autenticação integrada do Windows é seleccionada.
  • Verifique se todos os computadores que fazem parte do processo de Kerberos tem resolução de nomes consistente e estão ligados por método fidedigno Kerberos. Por exemplo, verifique se os computadores envolvidos no processo de Kerberos estão na mesma floresta ou fazem parte de uma fidedignidade de Kerberos entre florestas.
  • Certifique-se de que o tamanho do token não exceda o valor é definido para a propriedade MaxTokenSize. Além disso, certifique-se de que o tamanho do pedido não exceda o valor é definido para a propriedade MaxFieldLength. Estes valores podem ser excedidos se os utilizadores que são parte do processo de Kerberos forem membros de vários grupos.
    920862Mensagem de erro quando um utilizador do Outlook Web Access tenta aceder a uma caixa de correio no Exchange Server 2003: ? HTTP 400 pedido incorrecto (cabeçalho de pedido demasiado longo) ?
  • Verifique se as políticas de segurança necessárias estão activadas quando configura contas de domínio para agrupamentos de aplicações. Para o fazer, verifique se a conta de domínio é membro das seguintes políticas de segurança local no computador que está a executar o IIS:
    • Ajustar quotas de memória para um processo
    • Início de sessão como um serviço
    • Substituir um token de nível de processo
  • Verifique se a autenticação Kerberos está a funcionar correctamente através de UDP. Por predefinição, A autenticação Kerberos utiliza o UDP. No entanto, a perda de pacotes UDP pode causar a autenticação Kerberos falhar. Quando este problema ocorre, pode forçar a autenticação Kerberos para utilizar TCP. Para obter mais informações sobre como forçar a autenticação Kerberos para utilizar TCP, clique no número de artigo que se segue para visualizar o artigo na base de dados de conhecimento da Microsoft:
    244474Como forçar o Kerberos a utilizar TCP em vez de UDP no Windows Server 2003, no Windows XP e no Windows 2000
  • Certifique-se de que o carimbo de data / hora o autenticador não difira mais de cinco minutos do carimbo de data / hora do servidor. Para obter mais informações sobre como resolver as diferenças de carimbo de data/hora, clique no número de artigo que se segue para visualizar o artigo na base de dados de conhecimento da Microsoft:
    232386Não é possível iniciar sessão se não estiverem sincronizados data e hora
  • Certifique-se de que TCP/UDP porta 88 não é bloqueada por um firewall ou router. Por predefinição, A autenticação Kerberos utiliza a porta TCP/UDP 88.
  • Verifique se o ambiente de modo do domínio é pelo menos num ambiente de modo nativo do Microsoft Windows 2000. Para mais informações sobre como determinar o modo de domínio, visite o seguinte Web site da Microsoft:
    http://technet2.microsoft.com/windowsserver/en/library/11b2d3d3-980c-4b64-9ed3-51778f1fe5771033.mspx?mfr=true
  • No cliente, certifique-se de que o URL para a aplicação Web é adicionado aos sites da intranet local. Para obter mais informações sobre como adicionar um URL à intranet local, clique no número de artigo que se segue para visualizar o artigo na base de dados de conhecimento da Microsoft:
    303650Site da intranet é identificado como um site da Internet quando utiliza um FQDN ou um endereço IP
  • Verifique se cada dispositivo de ethernet gigabit está a utilizar a versão mais recente do controlador. Para obter mais informações sobre problemas que podem ocorrer quando os controladores para dispositivos de Ethernet gigabit estão desactualizados, clique no número de artigo que se segue para visualizar o artigo na base de dados de conhecimento da Microsoft:
    326152Não é possível ligar ao controlador de domínio e não é possível aplicar a política de grupo com dispositivos Gigabit Ethernet

Referências

Para mais informações sobre como utilizar a autenticação Kerberos com Web sites com balanceamento de carga, visite o seguinte Web site da Microsoft:
http://technet.microsoft.com/en-us/library/cc757299.aspx
Para obter mais informações sobre problemas que podem ocorrer quando utiliza a autenticação Kerberos com servidores proxy, clique no número de artigo que se segue para visualizar o artigo na base de dados de conhecimento da Microsoft:
321728Internet Explorer não suporta a autenticação Kerberos com servidores proxy
Para obter mais informações sobre como configurar o IIS para suportar o protocolo Kerberos e o protocolo NTLM para autenticação de rede, clique no número de artigo que se segue para visualizar o artigo na base de dados de conhecimento da Microsoft:
215383Como configurar o IIS para suportar o protocolo Kerberos e o protocolo NTLM para autenticação de rede
Para obter mais informações sobre como configurar um servidor virtual do Windows SharePoint Services para utilizar a autenticação Kerberos e como mudar da autenticação Kerberos novamente para a autenticação NTLM, clique no número de artigo que se segue para visualizar o artigo na base de dados de conhecimento da Microsoft:
832769Como configurar um servidor virtual do Windows SharePoint Services para utilizar a autenticação Kerberos e como mudar da autenticação Kerberos novamente para a autenticação NTLM
Para obter mais informações sobre problemas que podem ocorrer quando utiliza o protocolo de autenticação Kerberos para ligar a um servidor Web que utiliza uma porta não padrão no Windows XP ou Windows Server 2003, clique no número de artigo que se segue para visualizar o artigo na base de dados de conhecimento da Microsoft:
908209Internet Explorer 6 não é possível utilizar o protocolo de autenticação Kerberos para ligar a um servidor Web que utiliza uma porta não padrão no Windows XP ou Windows Server 2003

Propriedades

Artigo: 929650 - Última revisão: 12 de maio de 2010 - Revisão: 5.0
A informação contida neste artigo aplica-se a:
  • Microsoft Internet Information Services 7.5
  • Microsoft Internet Information Services 7.0
  • Microsoft Internet Information Services 6.0
Palavras-chave: 
kbmt kbinfo kbhowto KB929650 KbMtpt
Tradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 929650

Submeter comentários

 

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