Как использовать имена участников-служб при настройке веб-приложений, размещенных в службах IIS

Переводы статьи Переводы статьи
Код статьи: 929650 - Vizualiza?i produsele pentru care se aplic? acest articol.
Развернуть все | Свернуть все

В этой статье

Аннотация

Данная статья содержит имена участников службы (SPN). В этой статье также описывается использование имен SPN при настройке веб-приложений, размещенных на Microsoft IIS (IIS). В этой статье также описывается процесс согласования в встроенную проверку подлинности Windows. Согласование безопасности заголовка позволяет клиентам Выбор между проверкой подлинности Kerberos и проверка подлинности NTLM.

Кроме того в этой статье описаны распространенные сценарии, в которых требуется имя SPN для включения проверки подлинности Kerberos. Последний раздел описываются ситуации, в которых может произойти сбой проверки подлинности Kerberos. Последний раздел также шаги по устранению неполадок.

ВВЕДЕНИЕ

Важно Темы, обсуждаемые в этой статье относятся к служб (IIS) 6.0. Темы также относятся к IIS 7.0 и 7.5 при отключении проверки подлинности в режиме ядра, задав параметр конфигурации useKernelMode для ЛОЖЬ.
В данной статье описывается, как использовать имена участников службы (SPN), при настройке веб-приложений, размещенных на сервере IIS.Службы IIS передают заголовок безопасности Negotiate, при использовании встроенной проверки подлинности Windows для проверки подлинности запросов клиентов. Согласование безопасности заголовка позволяет клиентам Выбор между проверкой подлинности Kerberos и проверка подлинности NTLM. Процесс согласования выбирает проверку подлинности Kerberos, если справедливо одно из следующих условий:
  • Одна из систем, которые участвуют в проверке подлинности нельзя использовать проверку подлинности Kerberos.
  • Вызывающее приложение не предоставляет достаточно сведений для проверки подлинности Kerberos.
Чтобы включить процесс Negotiate Выбор протокола Kerberos для проверки подлинности в сети, клиентское приложение должно передавать имя SPN, имя участника-пользователя (UPN) или NetBIOS-имя учетной записи как целевое имя. Если клиентское приложение не предоставляет имя конечного, согласование процесса нельзя использовать протокол Kerberos. Если процесс согласования не удается использовать протокол Kerberos, процесс Negotiate выбирает протокол NTLM.

Дополнительная информация

Основные понятия

Определение имени SPN

Имя участника-службы — это имя, по которому клиент однозначно идентифицирует экземпляр службы. При установке нескольких экземпляров службы на компьютерах по всему лесу, каждый экземпляр службы должен иметь собственное SPN. Экземпляр данной службы может иметь несколько имен SPN, если несколько имен, которые клиенты могут использовать для проверки подлинности. Например имя участника службы всегда содержит имя компьютера, на котором выполняется экземпляр службы. Таким образом экземпляр службы может зарегистрировать имя SPN для каждого имени или псевдонима его хоста.

Класс службы HTTP

Класс службы HTTP отличается от протокола HTTP. Как протокол HTTP, так и протокол HTTPS используют класс службы HTTP. Класс службы является строка, которая определяет общий класс службы. Имена классов известной службы включают «www» для веб-службы и «ldap» для службы каталогов. Как правило имя класса службы может быть любая строка, являющаяся уникальным для класса службы. Имейте в виду, что синтаксис имени участника-службы используется косая черта (/) для разделения элементов. Таким образом знак косой черты (/) нельзя указывать имя класса службы.

Службы РАЗМЕЩЕНИЯ и HTTP класса службы

Служба узла представляет главный компьютер. Протокол Kerberos использует HOST SPN для доступа к компьютеру ведущего приложения. Протокол Kerberos использует долгосрочные ключ на главном компьютере создавать билет службы.

Класс службы HTTP является одним из встроенных служб, выступающих в качестве псевдонима для HOST SPN. HOST SPN сопоставляется с учетной записью компьютера узла. Таким образом при использовании класса службы HTTP по умолчанию протокол Kerberos использует учетную запись компьютера как учетная запись службы для запроса билет службы.

Общие сценарии

В этом разделе описаны сценарии, которые могут потребовать SPN. Кроме того в этом разделе показано, как определить, какое имя участника-службы для каждого сценария. В этих случаях используются следующие термины:
Свернуть эту таблицуРазвернуть эту таблицу
IIS6server1Имя узла компьютера, на котором работает IIS-сервер
mydomainДомен, к которому присоединен компьютер IIS6server1
appPool1Учетная запись пользователя домена mydomain, который используется для удостоверения пула приложений
appPool2Учетная запись пользователя домена mydomain, используемый для второго удостоверения пула приложений
www.Test.comПервый заголовок узла для веб-узла
www.test2.comВторой заголовок узла для веб-узла
www.test3.comТретий заголовок узла для веб-узла
www.myIIScluster.comПолное доменное имя кластера компьютеров под управлением служб IIS
www.myEXCHcluster.comПолное доменное имя кластера компьютеров, работающих под управлением Microsoft Exchange на сервере IIS

С помощью программы Setspn.exe

С помощью программы Setspn.exe можно читать, изменять и удалять свойство directory SPN для учетной записи службы каталогов Active Directory. Имена участников-служб используются для обнаружения имени целевого участника для запуска службы. С помощью программы SetSpn.exe дает возможность просматривать текущие имена SPN, сброс SPN по умолчанию учетной записи пользователя и добавить или удалить дополнительные имена участников-служб.

Чтобы получить с помощью программы Setspn.exe для Microsoft Windows Server 2003, щелкните следующий номер статьи базы знаний Майкрософт:
970536 Обновление средства Setspn.exe поддержки для Windows Server 2003

Сценарий 1: Доступ к IIS-приложения при изменении удостоверения пула приложений

Когда приложение IIS работает под учетной записью домена, а не под учетной записью сетевой службы по умолчанию, необходимо задать имена SPN для учетной записи домена службы HTTP. В этом случае доступ к IIS-приложения с помощью NetBIOS-имя сервера, на котором работает IIS-сервер либо полное доменное имя сервера, на котором выполняется IIS.

Доступ к IIS-приложения с помощью имени NetBIOS, используйте следующую команду, где NETBIOS_NAME_OF_IIS_SERVER — имя NetBIOS сервера, на котором работает IIS-сервер:
Setspn –S HTTP /NETBIOS_NAME_OF_IIS_SERVER домен\имя пользователя
Например команда может напоминать следующую команду:
Setspn –S HTTP/iis6server1 mydomain\appPool1
Доступ к IIS-приложения с использованием полного доменного ИМЕНИ, введите следующую команду, где FQDN_OF_IIS_SERVER Это полное доменное имя сервера, на котором работает IIS-сервер:
Setspn –S HTTP /FQDN_OF_IIS_SERVER домен\имя пользователя
Например команда может напоминать следующую команду:
Setspn –S HTTP/iis6server1.mydomain.com mydomain\appPool1

Сценарий 2: Доступ к веб-приложения, используя заголовок узла

При доступе к веб-приложения, используя заголовок узла, необходимо задать имя участника службы для службы HTTP.

При запуске веб-приложения под учетной записью по умолчанию учетная запись сетевой службы, учетной записи локальной службы или учетной записи локальной системы, можно использовать следующую команду:
Setspn –A HTTP /HOST_HEADER NETBIOS_NAME_OF_IIS_SERVER
В этой команде HOST_HEADER заголовок узла, введите в обозревателе окно доступа к приложению, и NETBIOS_NAME_OF_IIS_SERVER это NetBIOS-имя сервера, на котором выполняется IIS.

Например команды для приложения может напоминать следующую команду:
Setspn –A HTTP/www.test.com iis6server1
При запуске приложения под учетной записью домена, можно использовать следующую команду:
Setspn –A HTTP /HOSTHEADER_OR_DNS_ALIAS домен\имя пользователя
В этой команде HOSTHEADER_OR_DNS_ALIAS Это заголовок узла или DNS-псевдоним, который используется для доступа к веб-приложения.

Например команда для приложения может соответствовать одному из следующих команд:
  • Setspn –A HTTP/www.test.com mydomain\appPool1
  • Setspn –A HTTP/www.test3.com mydomain\appPool2

Сценарий 3: Доступ к IIS-приложения в среде кластеризованного или с балансировкой нагрузки

При работе IIS в кластерной среде или в среде с балансировкой нагрузки, доступ к приложениям с помощью имени кластера, а не с помощью имени узла. Этот сценарий включает балансировки нагрузки сети. В технологии кластеров узел относится к одному компьютеру, который является членом кластера. В этом случае протоколов проверки подлинности используется Kerberos, удостоверение пула приложений на каждом узле IIS должен быть настроен для одной и той же учетной записью пользователя домена. Чтобы настроить каждый узел IIS для одной и той же учетной записью пользователя домена, используйте следующую команду:
Setspn –A HTTP /ИМЯ_КЛАСТЕРА домен\имя пользователя
Например команда может соответствовать одному из следующих команд:
  • Setspn –A HTTP/www.myIISCluster.com mydomain\appPool1
  • Setspn –A HTTP/www.myEXCHCluster.com mydomain\appPool2

Сценарий 4: Использование SQL Server для доступа к приложению

Имена участников-служб на внутреннем сервере может потребоваться проверить, если веб-приложение IIS требует доступа к серверным компьютеру, на котором выполняется SQL Server. Если запрашиваемых имен SPN при неправильной настройке веб-приложения могут работать неправильно.

Если фонового компьютера, на котором выполняется SQL Server выполняется под локальной системной учетной записью, служба MSSQLSvc /FQDN_OF_SQL_SERVER:Port номер порта должен быть доступен для имени компьютера. Определить имена SPN для компьютера, на котором выполняется SQL Server, используйте следующую команду:
Setspn –L SQL_SERVER_COMPUTER_NAME
Для задания имени SPN для имени компьютера, на котором выполняется SQL Server, используйте следующую команду:
Служба MSSQLSvc Setspn –A /FQDN_OF_SQLSERVER:Port SQLSERVER_COMPUTER_NAME
При внутреннем компьютера, на котором выполняется SQL Server выполняется под учетной записью домена, служба MSSQLSvc /FQDN_OF_SQL_SERVER:Port номер порта должен быть доступен для учетной записи домена. Определить имена SPN для учетной записи домена, используйте следующую команду:
Setspn –L домен\имя_пользователя
Для задания имени SPN для имени компьютера, на котором выполняется SQL Server, используйте один из следующих команд:
  • Служба MSSQLSvc Setspn –A /FQDN_OF_SQLSERVER:PortFQDN_OF_SQLSERVER
  • Служба MSSQLSvc Setspn –A /FQDN_OF_SQLSERVER:Portдомен\имя пользователя

Сценарий вспомогательной SPN

Чтобы найти имена SPN для IIS-приложения можно использовать приведенный ниже сценарий. Этот сценарий также можно использовать для поиска повторяющихся имен SPN. Чтобы использовать этот сценарий, выполните следующие действия.
  1. Нажмите кнопку Пуск, нажмите кнопку Запуск, тип Блокнот, а затем нажмите кнопку ОК.
  2. В файл Блокнота вставьте следующий сценарий:
    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. Сохраните файл с именем Spnhelper.vbs.
  4. В командной строке запустите файл Spnhelper.vbs с помощью соответствующего параметра командной строки.

    Примечание Чтобы просмотреть параметры командной строки для файла Spnhelper.vbs, введите: Spnhelper.vbs/Help в командной строке и нажмите клавишу ВВОД.

Дополнительные вопросы

Сбой проверки подлинности Kerberos при задании запрашиваемых имен SPN для учетных записей компьютеров и учетных записей домена. Если неожиданно сбой проверки подлинности Kerberos, выполните следующее:
  • Убедитесь, что нет повторяющихся имен SPN существуют в глобальном каталоге для SPN.

    Например если HTTP/www.test.com SPN для учетной записи myDomain\appPool1 и для учетной записи myDomain\appPool2, повторяющееся имя участника-службы существует, несмотря на то, что имена SPN заданы для разных учетных записей. Кроме того Если имеет значение HTTP/iis6server1.mydomain.com SPN для учетной записи myDomain\appPool1 и HTTP/iis6server1.mydomain.com SPN также связан с учетной записью компьютера для сервера, также имеется повторяющееся имя участника-службы. Имеется один HOST SPN и одно имя SPN HTTP. Явное имя SPN HTTP переопределяет неявно, который осуществляется запись узла. Тем не менее если URL-адрес, что пользователь вводит связан с более чем одной учетной записи пользователя или с более чем одной учетной записи компьютера, имеются повторяющиеся SPN.
  • Убедитесь, что имена SPN реплицированы на другие контроллеры домена.

    Проблемы репликации между контроллерами домена может препятствовать репликации на контроллерах домена имена SPN. Когда имена SPN не реплицируются на другие контроллеры домена, приложение может не работать из некоторых клиентских компьютеров. Например если HTTP/www.test.com SPN для учетной записи myDomain\appPool1 на контроллере домена, HTTP/www.test.com SPN может быть не найдена на втором контроллере домена учетной записи myDomain\appPool1 Если имя SPN не были реплицированы на второй контроллер домена.

    Примечание По умолчанию репликация занимает 15 минут.
  • Убедитесь, что веб-сервер настроен для поддержки проверки подлинности Kerberos. Для этого параметра NTAuthenticationProviders ключ в метабазе IIS не были изменены для проверки NTLM. Значение по умолчанию — Согласование NTLM.
  • Убедитесь, что сервер или служба, которая делегирование учетных данных является доверенным для делегирования.
  • Убедитесь, что учетной записи, в которой работает служба является доверенным для делегирования.
  • В Active Directory, убедитесь, что Учетная запись важна и не может быть делегирована флажок снят, пользователям доступ к приложению.
  • Если вы обращаетесь приложения непосредственно с сервера, убедитесь, что Проверка безопасности замыкания на себя флажок снят.Дополнительные сведения о проверке, об отключении проверки замыкания на себя щелкните следующий номер статьи базы знаний Майкрософт:
    896861При просмотре веб-сайта, использующего встроенную проверку подлинности и размещенного на сервере IIS 5.1 или более поздней версии, появляется сообщение об ошибке 401.1
  • Убедитесь, что клиент Kerberos с поддержкой клиента. Кроме того, убедитесь, что Включение встроенной проверки подлинности Windows она включена в обозревателе Internet Explorer. Для этого нажмите кнопку Параметры Интернета на Tools меню, нажмите кнопку Дополнительно вкладки, а затем убедитесь, что Включение встроенной проверки подлинности Windows флажок установлен.
  • Убедитесь, что все компьютеры, являющиеся частью процесса Kerberos имеют разрешение имен согласованный и соединенных доверия Kerberos. Например убедитесь, что компьютеры, которые участвуют в процессе Kerberos находятся в одном лесу или являются частью Kerberos отношения доверия между лесами.
  • Убедитесь, что размер маркера не превышает значение, заданное для MaxTokenSize свойство. Кроме того, убедитесь, что размер запроса превышает значение, заданное для MaxFieldLength свойство. Эти значения может быть превышено, если пользователи, которые являются частью процесса Kerberos являются членами многих групп.
    920862 Сообщение об ошибке при попытке доступа к почтовому ящику в Exchange Server 2003 пользователь Outlook Web Access: "HTTP 400 Ошибочный запрос (слишком длинный заголовок запроса)"
  • Убедитесь, что политики безопасности включены при настройке учетных записей домена для пулов приложений. Чтобы сделать это, убедитесь, что учетная запись домена является членом следующих локальные политики безопасности на компьютере, на котором выполняется IIS:
    • Настройка квот памяти для процесса
    • Вход в качестве службы
    • Замена маркера уровня процесса
  • Проверьте правильность работы проверки подлинности Kerberos через UDP. По умолчанию проверка подлинности Kerberos использует протокол UDP. Однако потерю пакетов UDP может вызвать сбой проверки подлинности Kerberos. При возникновении этой проблемы, можно настроить проверку подлинности Kerberos на использование протокола TCP. Дополнительные сведения о принудительном проверки подлинности Kerberos для использования TCP щелкните следующий номер статьи базы знаний Майкрософт:
    244474Как заставить Kerberos использование протокола TCP UDP в Windows Server 2003, Windows XP и Windows 2000
  • Убедитесь, что отметка времени для проверки подлинности не отличаются более чем на пять минут от сервера штампа времени. Дополнительные сведения о способах устранения различий в штамп времени, щелкните следующий номер статьи базы знаний Майкрософт:
    232386Невозможно войти в систему, если дата и время не синхронизированы
  • Убедитесь, что порт TCP/UDP 88 не блокируются брандмауэром или маршрутизатором. По умолчанию проверка подлинности Kerberos использует порт TCP/UDP 88.
  • Убедитесь, что среда режима домена по крайней мере в среде Microsoft Windows 2000 основной режим. Дополнительные сведения о способах определения режима работы домена посетите следующий веб-узел корпорации Майкрософт:
    http://technet2.Microsoft.com/WindowsServer/en/Library/11b2d3d3-980c-4b64-9ed3-51778f1fe5771033.mspx?mfr=true
  • На клиентском компьютере убедитесь, что добавлена URL-адрес для веб-приложения для сайтов локальной сети. Дополнительные сведения о добавлении URL-адреса для локальной сети щелкните следующий номер статьи базы знаний Майкрософт:
    303650Внутрисетевой узел воспринимается как узел Интернета при использовании полного доменного ИМЕНИ или IP-адрес
  • Убедитесь, что каждое устройство gigabit ethernet использует последнюю версию драйвера. Дополнительные сведения о проблемах, которые могут возникнуть при устарели драйверы устройств gigabit Ethernet щелкните следующий номер статьи базы знаний Майкрософт:
    326152Не удается подключиться к контроллеру домена и применить групповую политику с устройством Gigabit Ethernet

Ссылки

Дополнительные сведения о том, как использовать проверку подлинности Kerberos с веб-узлов с балансировкой нагрузки посетите следующий веб-узел корпорации Майкрософт:
http://TechNet.Microsoft.com/en-us/library/cc757299.aspx
Дополнительные сведения о проблемах, которые могут возникнуть при использовании проверки подлинности Kerberos с прокси-серверами щелкните следующий номер статьи базы знаний Майкрософт:
321728Internet Explorer не поддерживает проверку подлинности Kerberos с прокси-серверами
Дополнительные сведения о настройке служб IIS для поддержки протокола Kerberos и протокол NTLM для проверки подлинности в сети щелкните следующий номер статьи базы знаний Майкрософт:
215383Настройка служб IIS для поддержки протокола Kerberos и протокол NTLM для проверки подлинности в сети
Дополнительные сведения о настройке виртуального сервера Windows SharePoint Services для использования проверки подлинности Kerberos и как переключиться с проверки подлинности Kerberos на проверку подлинности NTLM, щелкните следующий номер статьи базы знаний Майкрософт:
832769Настройка виртуального сервера Windows SharePoint Services для использования проверки подлинности Kerberos и как переключиться с проверки подлинности Kerberos на проверку подлинности NTLM
Дополнительные сведения о проблемах, возникающих при использовании протокола проверки подлинности Kerberos для подключения к веб-сервера, использующего нестандартный порт в Windows XP или Windows Server 2003 щелкните следующий номер статьи базы знаний Майкрософт:
908209Internet Explorer 6 нельзя использовать протокол проверки подлинности Kerberos для подключения к веб-сервера, использующего нестандартный порт в Windows XP или Windows Server 2003

Свойства

Код статьи: 929650 - Последний отзыв: 20 мая 2013 г. - Revision: 4.0
Информация в данной статье относится к следующим продуктам.
  • Microsoft Internet Information Services 7.5
  • Microsoft Internet Information Services 7.0
  • Microsoft Internet Information Services 6.0
Ключевые слова: 
kbinfo kbhowto kbmt KB929650 KbMtru
Переведено с помощью машинного перевода
ВНИМАНИЕ! Перевод данной статьи был выполнен не человеком, а с помощью программы машинного перевода, разработанной корпорацией Майкрософт. Корпорация Майкрософт предлагает вам статьи, переведенные как людьми, так и средствами машинного перевода, чтобы у вас была возможность ознакомиться со статьями базы знаний KB на родном языке. Однако машинный перевод не всегда идеален. Он может содержать смысловые, синтаксические и грамматические ошибки, подобно тому как иностранец делает ошибки, пытаясь говорить на вашем языке. Корпорация Майкрософт не несет ответственности за неточности, ошибки и возможный ущерб, причиненный в результате неправильного перевода или его использования. Корпорация Майкрософт также часто обновляет средства машинного перевода.
Эта статья на английском языке: 929650

Отправить отзыв

 

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