Jak používat názvy SPN při konfiguraci webové aplikace, které jsou hostovány na Internetová informační služba

Překlady článku Překlady článku
ID článku: 929650 - Produkty, které se vztahují k tomuto článku.
Rozbalit všechny záložky | Minimalizovat všechny záložky

Na této stránce

Souhrn

Tento článek popisuje hlavní názvy služeb (SPN). Tento článek také popisuje, jak používat názvy SPN při konfiguraci webové aplikace, které jsou hostovány na (IIS). Tento článek také popisuje proces Negotiate v integrované ověřování systému Windows. Vyjednat metodu zabezpečení záhlaví umožňuje klientům vybrat mezi ověřování pomocí protokolu Kerberos a NTLM ověřování.

Kromě toho tento článek popisuje běžné scénáře, které vyžadují název SPN povolit ověřování protokolem Kerberos. V poslední části popisuje situace, ve kterých může selhat ověřování pomocí protokolu Kerberos. V poslední části také poskytuje kroky pro řešení potíží.

ÚVOD

Důležité Témata, které jsou zmíněny v tomto článku se vztahují k Internetová informační služba (IIS) 6.0. Témata se rovněž vztahují na službu IIS 7.0 a 7.5, pokud ověření režimu jádra je zakázána nastavením konfigurace nastavení useKernelMode k NEPRAVDA.
Tento podrobný článek popisuje, jak použít hlavní názvy služeb (SPN) při konfiguraci webové aplikace, které jsou hostovány na serveru IIS.Služba IIS předává záhlaví Negotiate security při integrované ověřování systému Windows používá k ověřování požadavků klientů. Vyjednat metodu zabezpečení záhlaví umožňuje klientům vybrat mezi ověřování pomocí protokolu Kerberos a NTLM ověřování. Proces vyjednat ověřování pomocí protokolu Kerberos vybere, pokud je splněna jedna z následujících podmínek:
  • Jeden ze systémů účastnícího se ověřování nelze použít ověřování pomocí protokolu Kerberos.
  • Volající aplikace neposkytuje dostatek informací k ověřování pomocí protokolu Kerberos.
Chcete-li povolit procesu vyjednání protokolu Kerberos pro ověřování v síti vyberte, musí klientská aplikace poskytnout hlavní název služby, hlavního názvu uživatele (UPN) nebo název účtu NetBIOS jako cílový název. Pokud není název cílové klientské aplikace, Negotiate proces nelze použít protokol Kerberos. Pokud proces vyjednat nemůže použít protokol Kerberos, vybere procesu vyjednat protokol NTLM.

Další informace

Koncepty

Definice název SPN

Název SPN je název, kterým klient jednoznačně identifikuje instanci služby. Pokud instalujete více instancí služby v počítačích v rámci doménové struktury, každá instance služby musí mít svůj vlastní název SPN. Instance určité služby může mít více SPN, pokud existuje více názvů, které mohou klienti použít pro ověřování. Například název SPN vždy obsahuje název hostitelského počítače, na kterém je spuštěna instance služby. Proto může být instance služby zaregistrovat název SPN pro každý název nebo alias jeho hostitele.

Třída služby protokolu HTTP

Třída služby HTTP se liší od protokolu HTTP. Protokol HTTP a HTTPS protokol použít třídu služby HTTP. Třída služby je řetězec označující třídu obecné služby. Názvy tříd známé služby zahrnují služby WWW "www" a "Idap" adresářové služby. Název třídy služby obecně může být libovolný řetězec, který je jedinečný pro třídy služby. Uvědomte si, že syntaxe SPN používá k oddělení prvků znak lomítka (/). Proto lomítka (/) nemůže objevit v názvu třídy služby.

HOSTITELE služby a HTTP služby třídy

HOSTITELE služby představuje hostitelského počítače. Protokol Kerberos používá pro přístup k hostitelskému počítači SPN hostitel. Protokol Kerberos používá dlouhodobé klíče v hostitelském počítači vytvořit lístek služby.

Třída služby HTTP je jednou z předdefinovaných služeb, které se chovají jako alias SPN hostitel. Název SPN hostitel je mapována na účet počítače Hostitel. Proto při použití výchozí třída služby HTTP protokolu Kerberos používá účet počítače jako účet služby požádat o lístek služby.

Běžné scénáře

Tato část popisuje scénáře, které mohou vyžadovat název SPN. Dále v této části ukazuje, jak zjistit, které SPN nastavit pro každý scénář. V těchto případech jsou použity následující termíny:
Zmenšit tuto tabulkuRozšířit tuto tabulku
IIS6server1Hostitelský název počítače se spuštěnou službou IIS
domenaDomény, ke které je připojen počítač IIS6server1
appPool1Uživatelský účet v doméně domena, který se používá pro identitu fondu aplikací
appPool2Uživatelský účet v doméně domena, která se používá pro druhý identita fondu aplikací
www.test.comPrvní záhlaví hostitele webového serveru
www.test2.comDruhý hlavičky hostitele webového serveru
www.Test3.comTřetí hlavičky hostitele webového serveru
www.myIIScluster.comPlně kvalifikovaný název domény clusteru počítačů se službou IIS
www.myEXCHcluster.comPlně kvalifikovaný název domény clusteru z počítače se systémem Microsoft Exchange na serveru IIS

Nástroje Setspn.exe

Nástroje Setspn.exe umožňuje číst, upravit a odstranit vlastnost adresáře hlavního názvu služby pro účet služby Active Directory. SPN slouží k vyhledání cílový hlavní název pro spouštění služby. Nástroje SetSpn.exe také umožňuje zobrazit aktuální SPN, obnovit SPN výchozího účtu a přidání nebo odstranění doplňkové SPN.

Chcete-li získat nástroje Setspn.exe pro Microsoft Windows Server 2003, klepněte na následující číslo článku databáze Microsoft Knowledge Base:
970536 Setspn.exe podporu nástroje aktualizace pro systém Windows Server 2003

Scénář 1: Přístup aplikace serveru IIS, když byla změněna identita fondu aplikací

Je-li aplikace serveru IIS spuštěna pod účtem uživatele domény místo pod výchozí účet network service, musíte nastavit SPN HTTP služby pod účtem domény. V tomto scénáři přístupu aplikace služby IIS pomocí názvu NetBIOS serveru se spuštěnou službou IIS nebo úplný název domény serveru se spuštěnou službou IIS.

Chcete-li získat přístup k aplikaci IIS pomocí názvu NetBIOS, zadejte následující příkaz, kde NETBIOS_NAME_OF_IIS_SERVER je název NetBIOS serveru se spuštěnou službou IIS:
Setspn –S HTTP /NETBIOS_NAME_OF_IIS_SERVER doména\uživatelské_jméno
Příkaz může například vypadat následující příkaz:
Setspn –S HTTP/iis6server1 mydomain\appPool1
Chcete-li získat přístup k aplikaci IIS pomocí úplného názvu domény, použijte následující příkaz, kde FQDN_OF_IIS_SERVER je úplný název domény serveru, na kterém je spuštěna služba IIS:
Setspn –S HTTP /FQDN_OF_IIS_SERVER doména\uživatelské_jméno
Příkaz může například vypadat následující příkaz:
Setspn –S HTTP/iis6server1.mydomain.com mydomain\appPool1

Scénář 2: Přístup k webové aplikaci pomocí hlavičky hostitele

Při přístupu k webové aplikaci pomocí hlavičky hostitele, je nutné nastavit název SPN HTTP služby.

Při spuštění webové aplikace ve skupinovém rámečku Výchozí účet jako účet síťové služby, místní účet služby nebo místní systémový účet, můžete použít následující příkaz:
Setspn –A HTTP /HOST_HEADER NETBIOS_NAME_OF_IIS_SERVER
V tomto příkazu HOST_HEADER záhlaví hostitele, který zadáte v prohlížeči je okno přístup k aplikaci a NETBIOS_NAME_OF_IIS_SERVER je název NetBIOS serveru se spuštěnou službou IIS.

Příkaz aplikace může například vypadat následující příkaz:
Setspn –A HTTP/www.test.com iis6server1
Pokud spustíte aplikaci pod účtem domény, můžete použít následující příkaz:
Setspn –A HTTP /HOSTHEADER_OR_DNS_ALIAS doména\uživatelské_jméno
V tomto příkazu HOSTHEADER_OR_DNS_ALIAS je hlavička hostitele nebo alias DNS, který používáte pro přístup k webové aplikaci.

Příkaz aplikace může například vypadat jeden z následujících příkazů:
  • Setspn –A HTTP/www.test.com mydomain\appPool1
  • Setspn –A HTTP/www.test3.com mydomain\appPool2

Scénář 3: Přístup aplikace služby IIS v prostředí clusteru nebo Vyrovnávání zatížení

Při spuštění služby IIS v prostředí clusteru nebo v prostředí s vyrovnáváním zatížení, přístupu aplikací pomocí názvu clusteru, nikoli pomocí názvu uzlu. V tomto scénáři zahrnuje služby Vyrovnávání zatížení sítě. Uzel v clusteru technologie, odkazuje jeden počítač, který je členem clusteru. Ověřovací protokol v tomto scénáři použití protokolu Kerberos, musí být identita fondu aplikací v každém uzlu IIS nakonfigurován pomocí stejného uživatelského účtu domény. Chcete-li konfigurovat každý uzel služby IIS pomocí stejného uživatelského účtu domény, použijte následující příkaz:
Setspn –A HTTP /NÁZEV_CLUSTERU doména\uživatelské_jméno
Například příkaz může být jeden z následujících příkazů:
  • Setspn –A HTTP/www.myIISCluster.com mydomain\appPool1
  • Setspn –A HTTP/www.myEXCHCluster.com mydomain\appPool2

Scénář 4: Použití SQL Server pro přístup k aplikaci

Ověřit, pokud služba IIS webové aplikace vyžaduje přístup k počítači back-end se serverem SQL Server může mít SPN na serveru back-end. Webová aplikace nepracují správně, pokud je požadované názvy SPN jsou nesprávně nakonfigurovány.

Pokud počítač back-end se serverem SQL Server je spuštěn pod účtem místního systému MSSQLSvc /FQDN_OF_SQL_SERVER:port číslo portu musí být k dispozici pro název počítače. Určit SPN pro počítač se serverem SQL Server, použijte následující příkaz:
Setspn –L SQL_SERVER_COMPUTER_NAME
Nastavit hlavní název služby název počítače, který je spuštěn SQL Server, použijte následující příkaz:
Setspn –A MSSQLSvc /FQDN_OF_SQLSERVER:port SQLSERVER_COMPUTER_NAME
Pokud je počítač back-end se serverem SQL Server spuštěn pod účtem domény MSSQLSvc /FQDN_OF_SQL_SERVER:port číslo portu musí být k dispozici pro účet domény. Určit SPN účtu domény, použijte následující příkaz:
Setspn –L doména\uživatelské_jméno
Nastavit hlavní název služby název počítače, který je spuštěn SQL Server, použijte jeden z následujících příkazů:
  • Setspn –A MSSQLSvc /FQDN_OF_SQLSERVER:portFQDN_OF_SQLSERVER
  • Setspn –A MSSQLSvc /FQDN_OF_SQLSERVER:portdoména\uživatelské_jméno

Skript helper SPN

Následující ukázkový skript můžete najít SPN pro aplikace služby IIS. Tento skript lze také nalézt duplicitní názvy SPN. Chcete-li tento skript použít, postupujte takto:
  1. Klepněte na tlačítko Spustit, klepněte na tlačítko Spustit, typ Poznámkový bloka klepněte na tlačítko OK.
  2. V souboru programu Poznámkový blok vložte následující skript:
    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. Uložte soubor jako Spnhelper.vbs.
  4. Na příkazovém řádku spusťte soubor Spnhelper.vbs pomocí vhodné možnosti příkazového řádku.

    Poznámka: Chcete-li zobrazit možnosti příkazového řádku u souboru Spnhelper.vbs, zadejte následující příkaz: Spnhelper.vbs/Help na příkazovém řádku a stiskněte klávesu ENTER.

Další informace

Ověřování pomocí protokolu Kerberos může selhat při požadované názvy SPN jsou nastaveny pro účty počítačů nebo účtů domény. Je-li ověřování pomocí protokolu Kerberos se nezdaří neočekávaně, postupujte takto:
  • Ověřte, že neexistují žádné duplicitní názvy SPN pro hlavní název služby v globálním katalogu.

    Například pokud HTTP/www.test.com SPN je nastavena na myDomain\appPool1 účet a na účet myDomain\appPool2, duplicitní název SPN existuje i přesto, že názvy SPN jsou nastaveny pro různé účty. Navíc pokud HTTP/iis6server1.mydomain.com SPN je nastaven pro účet myDomain\appPool1 a HTTP/iis6server1.mydomain.com SPN souvisí také s účet počítače pro server, můžete také duplicitní název SPN. Můžete mít jeden SPN hostitel a jeden název SPN HTTP. Explicitní název SPN HTTP přepíše implicitní, který spadá pod položkou hostitele. Avšak pokud URL, že uživatel zadá souvisí s více než jeden uživatelský účet nebo s více než jeden účet počítače, máte duplicitní název SPN.
  • Ověřte, zda SPN byly replikovány do ostatních řadičů domény.

    Problémy s replikací mezi řadiči domény můžete zabránit SPN replikovány do ostatních řadičů domény. Pokud názvy SPN nejsou replikovány do ostatních řadičů domény, aplikace nemusí pracovat z některých klientských počítačů. Například pokud HTTP/www.test.com SPN je nastaven pro účet myDomain\appPool1 v řadiči domény, HTTP/www.test.com SPN nemusí být nalezen na účet myDomain\appPool1 na druhý řadič domény v případě, že hlavní název služby nebyla replikována na druhý řadič domény.

    Poznámka: Ve výchozím nastavení replikace trvá 15 minut.
  • Ověřte, zda je webový server nakonfigurován pro podporu ověřování pomocí protokolu Kerberos. Provedete to tak, ověřte, že nastavení klíče NTAuthenticationProviders v metabázi IIS nebyla změněna na NTLM. Ve výchozím nastavení je Negotiate, NTLM.
  • Ověřte, zda server nebo služba, která je delegování pověření je důvěryhodný pro delegování.
  • Ověřte, zda je účet, který je služba spuštěna v rámci důvěryhodný pro delegování.
  • Ve službě Active Directory, ověřte, zda Účet je citlivý a nelze jej delegovat zaškrtnutí políčka pro uživatele, kteří přístup k aplikaci.
  • Pokud přistupujete k aplikaci přímo ze serveru, zkontrolujte, zda Kontrola zabezpečení zpětné smyčky je-li zrušeno zaškrtnutí políčka.Další informace o tom, jak ověřit, že je zakázána kontrola zpětné smyčky klepnutím na následující číslo článku databáze Microsoft Knowledge Base:
    896861Při procházení webu, který používá integrované ověřování a jehož hostitelem je služba IIS 5.1 nebo IIS 6, se zobrazí chyba 401.1
  • Ověřte, zda je klient klienta s podporou protokolu Kerberos. Také zkontrolujte, zda Povolit Integrované ověření systémem Windows v aplikaci Internet Explorer je povoleno nastavení. Chcete-li to provést, klepněte na tlačítko Možnosti Internetu v Nástroje nabídky, klepněte Upřesnit kartu a potom zkontrolujte, zda Povolit Integrované ověření systémem Windows je-li zaškrtnuto políčko.
  • Ověřte, zda všechny počítače, které jsou součástí procesu pomocí protokolu Kerberos, mají konzistentní překlad a připojení pomocí protokolu Kerberos vztahu důvěryhodnosti. Například ověřte, zda počítače, které se účastní procesu pomocí protokolu Kerberos ve stejné doménové struktuře, nebo jsou součástí vztahu důvěryhodnosti mezi doménovými strukturami pomocí protokolu Kerberos.
  • Ověřte, že velikost tokenu nepřekročí hodnotu, která je nastavena MaxTokenSize Vlastnost. Ověřte také, velikost požadavku nesmí překročit hodnotu, která je nastavena MaxFieldLength Vlastnost. Tyto hodnoty mohou být překročeny, pokud jsou uživatelé, kteří jsou součástí procesu Kerberos členy mnoho skupin.
    920862 Chybová zpráva při pokusu uživatele Outlook Web Access pro přístup k poštovní schránce v Exchange Server 2003: "HTTP 400 Chybný požadavek (záhlaví požadavku příliš dlouho)"
  • Ověřte, zda jsou povolena požadované bezpečnostní zásady, při konfiguraci účtů domény pro fondy aplikací. Chcete-li to provést, ověřte, zda účet domény členem následující místních zásadách zabezpečení v počítači se spuštěnou službou IIS:
    • Upravit kvóty paměti pro proces
    • Přihlášení se jako služba
    • Nahradit token úrovně procesu
  • Ověřte, zda správně pracuje ověřování Kerberos přes protokol UDP. Ve výchozím nastavení používá ověřování pomocí protokolu Kerberos UDP. Však způsobit ztrátu paketů UDP ověřování pomocí protokolu Kerberos se nezdaří. Když nastane tento problém, můžete vynutit ověřování pomocí protokolu Kerberos použití protokolu TCP. Další informace o vynucení ověřování pomocí protokolu Kerberos použití protokolu TCP naleznete klepnutím na následující číslo článku databáze Microsoft Knowledge Base:
    244474Vynucení protokolu Kerberos použití protokolu TCP místo protokolu UDP v systému Windows Server 2003, Windows XP a Windows 2000
  • Ověřte, že se časové razítko u ověřovatele neliší o více než pět minut od časové razítko serveru. Další informace o tom, jak vyřešit rozdíly časové razítko klepněte na následující číslo článku databáze Microsoft Knowledge Base:
    232386Nelze se přihlásit, pokud datum a čas není synchronizován.
  • Ověřte, zda port TCP/UDP 88 nejsou blokovány bránou firewall nebo směrovač. Ověřování pomocí protokolu Kerberos používá ve výchozím nastavení port TCP/UDP 88.
  • Ověřte, zda je prostředí režimu domény alespoň prostředí nativního režimu systému Microsoft Windows 2000. Další informace o zjištění režimu domény navštivte následující Web společnosti Microsoft:
    http://technet2.microsoft.com/windowsserver/en/library/11b2d3d3-980c-4b64-9ed3-51778f1fe5771033.mspx?mfr=true
  • V klientském počítači zkontrolujte, zda adresa URL webové aplikace přidána pro servery, Místní intranet. Další informace o tom, jak přidat adresu URL do místní intranet klepněte na následující číslo článku databáze Microsoft Knowledge Base:
    303650Intranetový server je identifikován jako serveru v síti Internet, při použití FQDN nebo adresy IP
  • Ověřte, že každé zařízení gigabit ethernet používá nejnovější verzi ovladače. Další informace o problémech, k nimž může dojít v případě, že jsou zastaralé ovladače zařízení gigabit Ethernet klepnutím na následující číslo článku databáze Microsoft Knowledge Base:
    326152Nelze se připojit k řadiči domény a nelze použít Zásady skupiny zařízeními Gigabit Ethernet

Odkazy

Další informace o použití ověřování pomocí protokolu Kerberos s vyrovnávaným zatížením weby navštivte následující Web společnosti Microsoft:
http://technet.microsoft.com/en-us/library/cc757299.aspx
Další informace o problémech, které se mohou vyskytnout při použití ověřování pomocí protokolu Kerberos se servery proxy klepněte na následující číslo článku databáze Microsoft Knowledge Base:
321728Aplikace Internet Explorer nepodporuje ověřování pomocí protokolu Kerberos se servery proxy
Další informace o konfiguraci služby IIS pro podporu protokolu Kerberos a protokolu NTLM pro ověřování v síti klepněte na následující číslo článku databáze Microsoft Knowledge Base:
215383Jak konfigurovat službu IIS na podporu protokolu Kerberos a protokolu NTLM pro ověřování v síti
Další informace o konfiguraci virtuálního serveru služby Windows SharePoint Services na používání ověřování pomocí protokolu Kerberos a jak přepnout z ověřování pomocí protokolu Kerberos zpět na ověřování protokolem NTLM, klepnutím na následující číslo článku databáze Microsoft Knowledge Base:
832769Konfigurace virtuálního serveru služby Windows SharePoint Services na používání ověřování pomocí protokolu Kerberos a jak přepnout z ověřování pomocí protokolu Kerberos zpět na ověřování protokolem NTLM
Další informace o problémech, které se mohou vyskytnout při použití protokolu Kerberos pro ověřování připojení k webovém serveru, který používá nestandardní port v systému Windows XP nebo Windows Server 2003 klepněte na následující číslo článku databáze Microsoft Knowledge Base:
908209Aplikace Internet Explorer 6 nelze použít ověřování protokolem Kerberos pro připojení k webovém serveru, který používá nestandardní port v systému Windows XP nebo Windows Server 2003

Vlastnosti

ID článku: 929650 - Poslední aktualizace: 22. května 2011 - Revize: 7.0
Informace v tomto článku jsou určeny pro produkt:
  • Microsoft Internet Information Services 7.5
  • Microsoft Internet Information Services 7.0
  • Microsoft Internet Information Services 6.0
Klíčová slova: 
kbinfo kbhowto kbmt KB929650 KbMtcs
Strojově přeložený článek
Důležité: Tento článek byl přeložen pomocí software společnosti Microsoft na strojový překlad, ne profesionálním překladatelem. Společnost Microsoft nabízí jak články přeložené překladatelem, tak články přeložené pomocí software na strojový překlad, takže všechny články ve Znalostní databázi (Knowledge Base) jsou dostupné v češtině. Překlad pomocí software na strojový překlad ale není bohužel vždy dokonalý. Obsahuje chyby ve skloňování slov, skladbě vět, nebo gramatice, podobně jako když cizinci dělají chyby při mluvení v češtině. Společnost Microsoft není právně zodpovědná za nepřesnosti, chyby nebo škody vzniklé chybami v překladu, nebo při použití nepřesně přeložených instrukcí v článku zákazníkem. Společnost Microsoft aktualizuje software na strojový překlad, aby byl počet chyb omezen na minimum.
Projděte si také anglickou verzi článku:929650

Dejte nám zpětnou vazbu

 

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