Você está offline; aguardando reconexão

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

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

Aviso: este artigo foi traduzido automaticamente

Propriedades

ID do Artigo: 929650 - Última Revisão: 05/12/2010 22:02:25 - Revisão: 5.0

Microsoft Internet Information Services 7.5, Microsoft Internet Information Services 7.0, Microsoft Internet Information Services 6.0

  • kbmt kbinfo kbhowto KB929650 KbMtpt
Comentários