В настоящее время вы работаете в автономном режиме; ожидается повторное подключение к Интернету
Войти

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

ВНИМАНИЕ! Перевод данной статьи был выполнен не человеком, а с помощью программы машинного перевода, разработанной корпорацией Майкрософт. Корпорация Майкрософт предлагает вам статьи, переведенные как людьми, так и средствами машинного перевода, чтобы у вас была возможность ознакомиться со статьями базы знаний KB на родном языке. Однако машинный перевод не всегда идеален. Он может содержать смысловые, синтаксические и грамматические ошибки, подобно тому как иностранец делает ошибки, пытаясь говорить на вашем языке. Корпорация Майкрософт не несет ответственности за неточности, ошибки и возможный ущерб, причиненный в результате неправильного перевода или его использования. Корпорация Майкрософт также часто обновляет средства машинного перевода.

929650
Аннотация
Данная статья содержит имена участников службы (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, 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. Сохраните файл с именем 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 основной режим. Дополнительные сведения о способах определения режима работы домена посетите следующий веб-узел корпорации Майкрософт:
  • На клиентском компьютере убедитесь, что добавлена URL-адрес для веб-приложения для сайтов локальной сети. Дополнительные сведения о добавлении URL-адреса для локальной сети щелкните следующий номер статьи базы знаний Майкрософт:
    303650Внутрисетевой узел воспринимается как узел Интернета при использовании полного доменного ИМЕНИ или IP-адрес
  • Убедитесь, что каждое устройство gigabit ethernet использует последнюю версию драйвера. Дополнительные сведения о проблемах, которые могут возникнуть при устарели драйверы устройств gigabit Ethernet щелкните следующий номер статьи базы знаний Майкрософт:
    326152Не удается подключиться к контроллеру домена и применить групповую политику с устройством Gigabit Ethernet
Ссылки
Дополнительные сведения о том, как использовать проверку подлинности Kerberos с веб-узлов с балансировкой нагрузки посетите следующий веб-узел корпорации Майкрософт:Дополнительные сведения о проблемах, которые могут возникнуть при использовании проверки подлинности 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 — последний просмотр: 05/20/2013 05:11:00 — редакция: 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
Отзывы и предложения
apper" role="contentinfo">