Como usar os SPNs ao configurar aplicativos da Web que são hospedados no IIS

Traduções deste artigo Traduções deste artigo
ID do artigo: 929650 - Exibir os produtos aos quais esse artigo se aplica.
Expandir tudo | Recolher tudo

Neste artigo

Sumário

Este artigo descreve os nomes principais de serviço (SPNs). Este artigo também descreve como usar os SPNs quando você configurar os aplicativos da Web que são hospedados 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 Selecione entre a autenticação Kerberos e a autenticação NTLM.

Além disso, este artigo descreve cenários comuns que requerem um SPN habilitar a autenticação Kerberos. A última seção descreve as situações em que a autenticação Kerberos pode falhar. A última seção também fornece as etapas de solução de problemas.

INTRODUÇÃO

Importante Os tópicos descritos neste artigo se aplicam ao Internet Information Services (IIS) 6.0. Os tópicos também se aplicam ao IIS 7.0 e 7.5 se Kernel-Mode Authentication for desativado, definindo a configuração configuração useKernelMode para false.
Este artigo passo a passo descreve como usar nomes principais de serviço (SPNs) ao configurar aplicativos da Web que são hospedados no IIS.IIS passa do cabeçalho de segurança Negotiate durante a autenticação integrada do Windows é usada para autenticar as solicitações do cliente. Negociar segurança cabeçalho permite que clientes Selecione entre a autenticação Kerberos e a autenticação NTLM. O processo de negociação seleciona a autenticação Kerberos, a menos que uma das seguintes condições seja verdadeira:
  • Um dos sistemas envolvidos na autenticação não é possível usar a autenticação Kerberos.
  • O aplicativo de chamada não fornece informações suficientes para usar a autenticação Kerberos.
Para ativar o processo de negociação selecionar o protocolo Kerberos para autenticação de rede, o aplicativo cliente deve fornecer um SPN, um nome de usuário principal (UPN) ou um nome de conta de NetBIOS como o nome de destino. Se o aplicativo cliente não fornecer um nome de destino, o processo de negociação não poderá usar o protocolo Kerberos. Se o processo de negociação não é possível usar o protocolo Kerberos, o processo de negociação seleciona o protocolo NTLM.

Mais Informações

Conceitos

Definição de um SPN

Um SPN é o nome pelo qual um cliente identifica exclusivamente uma instância de um serviço. Se você instalar várias instâncias de um serviço em computadores em uma floresta, cada instância de serviço deve ter seu próprio SPN. Uma instância de serviço específico pode ter vários SPNs se houver vários nomes que os clientes podem usar para autenticação. Por exemplo, um SPN sempre inclui o nome do computador host no qual a instância do serviço está sendo executado. Portanto, uma instância de serviço pode registrar um SPN para cada nome ou alias do seu host.

A classe de serviço HTTP

A classe de serviço HTTP é diferente do protocolo HTTP. Tanto o protocolo HTTP e o protocolo HTTPS usam a classe de serviço HTTP. A classe de serviço é a seqüência de caracteres que identifica a classe geral de serviço. Nomes de classe de serviço conhecido incluem "www" para um serviço da Web e "ldap" de um serviço de diretório. Em geral, o nome da classe de serviço pode ser qualquer seqüência que seja único para a classe de serviço. Esteja ciente de que a sintaxe do SPN usa um caractere de barra (/) para separar elementos. Portanto, o caractere de barra (/) não pode aparecer em um nome de classe de serviço.

O serviço HOST e o HTTP classe de serviço

O serviço HOST representa o computador host. O protocolo Kerberos usa o HOST SPN para acessar o computador host. O protocolo Kerberos usa a chave de longo prazo no computador host para criar um tíquete de serviço.

A classe de serviço HTTP é um dos serviços internos que atuam como um alias para o HOST SPN. O HOST SPN é mapeado para a conta do computador host. Portanto, quando você usa a classe de serviço HTTP padrão, o protocolo Kerberos usa a conta de computador como a conta de serviço para solicitar uma permissão de serviço.

Cenários comuns

Esta seção descreve cenários que podem exigir um SPN. Além disso, esta seção demonstra como determinar qual SPN definir para cada cenário. Os seguintes termos são usados nesses cenários:
Recolher esta tabelaExpandir esta tabela
IIS6server1O nome de host do computador que está executando o IIS
MyDomainO domínio ao qual o computador IIS6server1 está associado
appPool1A conta de usuário no domínio mydomain que é usado para a identidade do pool de aplicativos
appPool2A conta de usuário no domínio mydomain que é usado para a segunda identidade do pool de aplicativos
www.teste.comO primeiro cabeçalho de host para um site da Web
www.test2.comO segundo cabeçalho de host para um site da Web
www.test3.comO terceiro cabeçalho do host para um site da Web
www.myIIScluster.comO nome de domínio totalmente qualificado de um cluster de computadores que estão executando o IIS
www.myEXCHcluster.comO nome de domínio totalmente qualificado de um cluster de computadores que estejam executando o Microsoft Exchange no IIS

A ferramenta Setspn.exe

A ferramenta Setspn.exe permite ler, modificar e excluir a propriedade de diretório do SPN para uma conta de serviço do Active Directory. Os SPNs são usados para localizar um nome principal de destino para executar um serviço. A ferramenta SetSpn.exe também permite que você exiba os SPNs atuais, redefinir SPNs do padrão da conta e adicionar ou excluir SPNs complementares.

Para obter a ferramenta Setspn.exe para Microsoft Windows Server 2003, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
970536Setspn.exe suporte a ferramenta de actualização do Windows Server 2003

Cenário 1: Acessar um aplicativo do IIS quando tiverem sido modificada a identidade do pool de aplicativos

Quando um aplicativo do IIS é executado sob uma conta de usuário de domínio em vez de na conta de serviço de rede padrão, você deve definir o SPN para o serviço HTTP sob a conta de domínio. Nesse cenário, você pode acessar o aplicativo IIS usando o nome NetBIOS do servidor que está executando o IIS ou o FQDN do servidor que está executando o IIS.

Para acessar o aplicativo IIS usando o nome NetBIOS, use o comando a seguir, onde NETBIOS_NAME_OF_IIS_SERVER é o nome NetBIOS do servidor que está executando o IIS:
Setspn s HTTP / NETBIOS_NAME_OF_IIS_SERVER domain\username
Por exemplo, o comando pode ser semelhante o seguinte comando:
Setspn s HTTP/iis6server1 mydomain\appPool1
Para acessar o aplicativo IIS usando o FQDN, use o comando a seguir, onde FQDN_OF_IIS_SERVER é o FQDN do servidor que está executando o IIS:
Setspn s HTTP / FQDN_OF_IIS_SERVER domain\username
Por exemplo, o comando pode ser semelhante o seguinte comando:
Setspn s HTTP/iis6server1.mydomain.com mydomain\appPool1

Cenário 2: Acessar um aplicativo da Web por meio de um cabeçalho de host

Quando você acessa um aplicativo da Web por meio de um cabeçalho de host, você deve definir um SPN para o serviço HTTP.

Quando você executa o aplicativo Web sob uma conta padrão, como a conta do serviço de rede, a conta de serviço local ou a conta sistema local, você pode usar o comando a seguir:
Setspn ?A HTTP / HOST_HEADER NETBIOS_NAME_OF_IIS_SERVER
Neste comando, HOST_HEADER é o cabeçalho de host que você digitar em uma janela do navegador para acessar o aplicativo e NETBIOS_NAME_OF_IIS_SERVER é o nome NetBIOS do servidor que está executando o IIS.

Por exemplo, o comando para o aplicativo pode ser semelhante o seguinte comando:
Setspn ?A HTTP/www.test.com iis6server1
Se você executar o aplicativo em uma conta de domínio, você pode usar o seguinte comando:
Setspn ?A HTTP / HOSTHEADER_OR_DNS_ALIAS domain\username
Neste comando, HOSTHEADER_OR_DNS_ALIAS é o cabeçalho de host ou o alias de DNS que usam para acessar o aplicativo da Web.

Por exemplo, o comando para o aplicativo pode 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: Acessar um aplicativo do IIS em um ambiente em cluster ou balanceamento de carga

Quando você executa o IIS em um ambiente de cluster ou em um ambiente com balanceamento de carga, você acessa aplicativos usando o nome do cluster, em vez de usando um nome de nó. Este cenário inclui balanceamento de carga de rede. Na tecnologia de cluster, um nó se refere a um computador que seja membro do cluster. Para usar o Kerberos como protocolo de autenticação neste cenário, a identidade do pool de aplicativos em cada nó do IIS deve ser configurada para usar a mesma conta de usuário de domínio. Para configurar cada nó do IIS para usar a mesma conta de usuário de domínio, use o seguinte comando:
Setspn ?A HTTP / CLUSTER_NAME DOMÍNIO\nome_de_usuário
Por exemplo, o comando pode 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: Usar SQL Server para acessar um aplicativo

Os SPNs no servidor back-end talvez tenha que ser verificado se o aplicativo Web do IIS requer acesso a um computador de back-end está executando o SQL Server. O aplicativo da Web pode não funcionar corretamente se os SPNs necessários forem configurados incorretamente.

Se o computador de back-end está executando o SQL Server está executando na conta sistema local, o MSSQLSvc FQDN_OF_SQL_SERVER:port número da porta deve estar disponível para o nome do computador. Use o comando a seguir para determinar os SPNs do computador que está executando o SQL Server:
Setspn l SQL_SERVER_COMPUTER_NAME
Use o comando a seguir para definir o SPN para o nome do computador que esteja executando o SQL Server:
Setspn ?A MSSQLSvc / FQDN_OF_SQLSERVER:port SQLSERVER_COMPUTER_NAME
Se o computador de back-end está executando o SQL Server está executando sob uma conta de domínio, o MSSQLSvc FQDN_OF_SQL_SERVER:port número da porta deve estar disponível para a conta de domínio. Use o comando a seguir para determinar os SPNs para a conta de domínio:
Setspn l DOMÍNIO\nome_de_usuário
Use um dos seguintes comandos para definir o SPN para o nome do computador que esteja executando o SQL Server:
  • Setspn ?A MSSQLSvc / FQDN_OF_SQLSERVER:portFQDN_OF_SQLSERVER
  • Setspn ?A MSSQLSvc / FQDN_OF_SQLSERVER:portdomain\username

O script de auxiliar SPN

Você pode usar o script de exemplo a seguir para localizar os SPNs de um aplicativo do IIS. Você também pode usar esse script para localizar os SPNs duplicados. Para usar esse script, execute as seguintes etapas:
  1. Clique em Iniciar, clique em Executar, digite Notepad 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. Salve o arquivo como Spnhelper.vbs.
  4. Em um prompt de comando, execute o arquivo Spnhelper.vbs usando a opção de linha de comando apropriada.

    Observação: Para exibir as opções de linha de comando para o arquivo Spnhelper.vbs, digite Spnhelper.vbs/help em um prompt de comando e pressione ENTER.

Considerações adicionais

A autenticação Kerberos pode falhar quando os SPNs necessários são definidos para as contas de computador ou para as contas de domínio. Se a autenticação Kerberos falha inesperadamente, faça o seguinte:
  • Verifique se nenhum SPNs duplicados existem no catálogo global para um SPN.

    Por exemplo, se o SPN HTTP/www.test.com estiver definido para a conta myDomain\appPool1 e para a conta myDomain\appPool2, existe um SPN duplicado, embora os SPNs são definidos para diferentes contas. Além disso, se o SPN HTTP/iis6server1.mydomain.com é definido para a conta myDomain\appPool1 e o SPN HTTP/iis6server1.mydomain.com também é associado à conta de computador para o servidor, você também terá um SPN duplicado. Você pode ter um HOST SPN e um SPN HTTP. O SPN HTTP explícita substituirá aquele implícita que é abordado na entrada do HOST. No entanto, se a URL que o usuário digita está associada com mais de uma conta de usuário ou com mais de uma conta de computador, você terá um SPN duplicado.
  • Verifique se os SPNs tem duplicadas para outros controladores de domínio.

    Problemas de replicação entre os controladores de domínio podem impedir que os SPNs duplicando para outros controladores de domínio. Quando os SPNs não replica para outros controladores de domínio, o aplicativo pode não funcionar de alguns computadores cliente. Por exemplo, se o SPN HTTP/www.test.com estiver definido para a conta myDomain\appPool1 em um controlador de domínio, o SPN HTTP/www.test.com pode não ser localizado para a conta myDomain\appPool1 em um segundo controlador de domínio se o SPN não foi replicado para o segundo controlador de domínio.

    Observação: Por padrão, a replicação leva 15 minutos.
  • Verifique se o servidor Web está configurado para oferecer suporte à autenticação Kerberos. Para fazer isso, verifique se a configuração para a chave de NTAuthenticationProviders na metabase do IIS não foi alterada para NTLM. A configuração padrão é Negociar, NTLM.
  • Verifique se o servidor ou serviço que está delegando as credenciais é confiável para delegação.
  • Verifique se o serviço está sendo executado sob a conta é confiável para delegação.
  • No Active Directory, verifique se a caixa de seleção conta maiúsculas de minúsculas e não pode ser delegada é desmarcada para os usuários que acessam o aplicativo.
  • Se você estiver acessando o aplicativo diretamente do servidor, verifique se que a Verificação de segurança de auto-retorno está desmarcada.Para obter mais informações sobre como verificar se a verificação de auto-retorno está desativada, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
    896861Receber mensagem de erro 401.1 ao navegar um site que usa a autenticação integrada e está hospedado no IIS 5.1 ou IIS 6
  • Verifique se o cliente é um cliente habilitado para Kerberos. Além disso, verifique se a configuração Ativar autenticação integrada do Windows está ativada no Internet Explorer. Para fazer isso, clique em Opções da Internet no menu Ferramentas, clique na guia Avançado e verifique se a caixa de seleção Ativar autenticação integrada do Windows é selecionada.
  • Verifique se todos os computadores que fazem parte do processo de Kerberos tem resolução de nomes consistente e estão conectados por confiança Kerberos. Por exemplo, verifique se os computadores envolvidos no processo de Kerberos estão na mesma floresta ou fazem parte de uma relação de confiança entre florestas Kerberos.
  • Verifique se o tamanho de token não excede o valor definido para a propriedade MaxTokenSize. Além disso, verifique se que o tamanho da solicitação não exceda o valor definido para a propriedade MaxFieldLength. Esses valores podem ser excedidos se usuários que fazem parte do processo de Kerberos forem membros de vários grupos.
    920862Mensagem de erro quando um usuário do Outlook Web Access tenta acessar uma caixa de correio no Exchange Server 2003: ? HTTP 400 Solicitação incorreta (cabeçalho de solicitação muito longo) ?
  • Verifique se as diretivas de segurança necessários estão ativadas quando você configura contas de domínio para pools de aplicativos. Para fazer isso, verifique se a conta de domínio é um membro das seguintes diretivas de segurança local no computador que está executando o IIS:
    • Ajustar cotas de memória para um processo
    • Logon como um serviço
    • Substituir um token no nível de processo
  • Verifique se a autenticação Kerberos está funcionando corretamente via UDP. Por padrão, A autenticação Kerberos usa UDP. No entanto, a perda de pacotes UDP pode causar falha na autenticação Kerberos. Quando esse problema ocorre, você pode forçar a autenticação Kerberos para usar TCP. Para obter mais informações sobre como forçar a autenticação Kerberos para usar TCP, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
    244474Como forçar Kerberos para usar TCP em vez de UDP no Windows Server 2003, no Windows XP e no Windows 2000
  • Verifique se o carimbo de data / hora no autenticador não difere por mais de cinco minutos do carimbo de data / hora do servidor. Para obter mais informações sobre como resolver diferenças de carimbo de data/hora, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
    232386Não é possível fazer logon se data e hora não estiverem sincronizados
  • Verifique se que o TCP/UDP porta 88 não será bloqueada por um firewall ou um roteador. Por padrão, A autenticação Kerberos usa TCP/UDP porta 88.
  • Verifique se o ambiente do modo de domínio é pelo menos um ambiente de modo nativo do Microsoft Windows 2000. Para obter mais informações sobre como determinar o modo de domínio, visite o seguinte site da Microsoft:
    http://technet2.microsoft.com/windowsserver/en/library/11b2d3d3-980c-4b64-9ed3-51778f1fe5771033.mspx?mfr=true
  • No cliente, verifique se a URL para o aplicativo da Web foi adicionada à lista de sites da intranet local. Para obter mais informações sobre como adicionar uma URL à intranet local, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
    303650Site da intranet é identificado como um site da Internet quando você usa um FQDN ou um endereço IP
  • Verifique se cada dispositivo de ethernet gigabit usando a versão mais recente do driver. Para obter mais informações sobre problemas que podem ocorrer quando os drivers para dispositivos de Ethernet gigabit estão desatualizados, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
    326152Não pode se conectar ao controlador de domínio e não é possível aplicar a diretiva de grupo com os dispositivos Gigabit Ethernet

Referências

Para obter mais informações sobre como usar a autenticação Kerberos com carga balanceada sites da Web, visite o seguinte site da Microsoft:
http://technet.microsoft.com/en-us/library/cc757299.aspx
Para obter mais informações sobre problemas que podem ocorrer ao usar a autenticação Kerberos com servidores proxy, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
321728Internet Explorer não oferece suporte à autenticação Kerberos com servidores proxy
Para obter mais informações sobre como configurar o IIS para oferecer suporte o protocolo Kerberos e o protocolo NTLM para autenticação de rede, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
215383Como configurar o IIS para oferecer suporte 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 usar a autenticação Kerberos e como alternar entre a autenticação Kerberos para autenticação NTLM, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
832769Como configurar um servidor virtual do Windows SharePoint Services para usar a autenticação Kerberos e como alternar entre a autenticação Kerberos para autenticação NTLM
Para obter mais informações sobre problemas que podem ocorrer ao usar o protocolo de autenticação Kerberos para se conectar a um servidor Web que usa uma porta não padrão no Windows XP ou Windows Server 2003, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
908209Internet Explorer 6 não pode usar o protocolo de autenticação Kerberos para se conectar a um servidor Web que usa uma porta não padrão no Windows XP ou Windows Server 2003

Propriedades

ID do artigo: 929650 - Última revisão: quarta-feira, 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 traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes 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