Sie sind zurzeit offline. Es wird auf die erneute Herstellung einer Internetverbindung gewartet.

Gewusst wie: SPNs zu verwenden, wenn Sie Webanwendungen gehostet werden, die auf Internet-Informationsdienste konfigurieren

Wichtig: Dieser Artikel wurde maschinell und nicht von einem Menschen übersetzt. Die Microsoft Knowledge Base ist sehr umfangreich und ihre Inhalte werden ständig ergänzt beziehungsweise überarbeitet. Um Ihnen dennoch alle Inhalte auf Deutsch anbieten zu können, werden viele Artikel nicht von Menschen, sondern von Übersetzungsprogrammen übersetzt, die kontinuierlich optimiert werden. Doch noch sind maschinell übersetzte Texte in der Regel nicht perfekt, insbesondere hinsichtlich Grammatik und des Einsatzes von Fremdwörtern sowie Fachbegriffen. Microsoft übernimmt keine Gewähr für die sprachliche Qualität oder die technische Richtigkeit der Übersetzungen und ist nicht für Probleme haftbar, die direkt oder indirekt durch Übersetzungsfehler oder die Verwendung der übersetzten Inhalte durch Kunden entstehen könnten.

Den englischen Originalartikel können Sie über folgenden Link abrufen: 929650
Zusammenfassung
Dieser Artikel beschreibt die Dienstprinzipalnamen (SPNs). Dieser Artikel beschreibt außerdem, wie SPNs zu verwenden, wenn Sie Webanwendungen gehostet werden, die auf Microsoft Internet Information Services (IIS) konfigurieren. Dieser Artikel beschreibt außerdem den Negotiate-Prozess in die integrierte Windows-Authentifizierung. Die Negotiate Security Header können Clients wählen zwischen Kerberos-Authentifizierung und NTLM-Authentifizierung.

Dieser Artikel beschreibt außerdem allgemeine Szenarien, die einen SPN Aktivierung der Kerberos-Authentifizierung erfordern. Der letzte Abschnitt beschreibt die Situationen, in denen Kerberos-Authentifizierung fehlschlagen. Der letzte Abschnitt enthält außerdem Schritte zur Problembehandlung.
EINFÜHRUNG
Wichtig Die Themen, die in diesem Artikel beschriebenen gelten, Internet-Informationsdienste (IIS) 6.0. Die Themen gelten auch für IIS 7.0 und 7.5, wenn der Kernel-Mode-Authentifizierung deaktiviert ist, indem Sie die Konfiguration Einstellung UseKernelMode auf false festlegen.
Dieser in einzelne Schritte gegliederte Artikel beschreibt die Dienstprinzipalnamen (SPNs) beim Konfigurieren von Webanwendungen, die gehostet werden auf verwenden IIS.IIS übergibt den Negotiate-Sicherheitsheader, wenn die integrierte Windows-Authentifizierung zum Authentifizieren von Clientanforderungen verwendet wird. Die Negotiate Security Header können Clients wählen zwischen Kerberos-Authentifizierung und NTLM-Authentifizierung. Der Negotiate-Prozess wählt Kerberos-Authentifizierung, es sei denn, eine der folgenden Bedingungen erfüllt ist:
  • Eines der Systeme, die mit der Authentifizierung zusammenhängen kann Kerberos-Authentifizierung nicht verwenden.
  • Die aufrufende Anwendung bietet keine ausreichende Informationen zur Kerberos-Authentifizierung verwenden.
Damit den Negotiate-Prozess für das Kerberos-Protokoll für Netzwerkauthentifizierung zu wählen, muss die Clientanwendung einen DIENSTPRINZIPALNAMEN, ein Benutzerprinzipalname (UPN) oder einen NetBIOS-Kontonamen als den Zielnamen angeben. Wenn die Clientanwendung einen Zielnamen nicht bereitstellt, kann der Negotiate-Prozess nicht das Kerberos-Protokoll verwenden. Wenn der Negotiate-Prozess das Kerberos-Protokoll nicht verwenden kann, wählt der Negotiate-Prozess das NTLM-Protokoll.
Weitere Informationen

Konzepte

Definition des SPN

Ein SPN ist der Name mit dem ein Client eine Instanz eines Dienstes eindeutig identifiziert. Wenn Sie mehrere Instanzen eines Diensts auf Computern in einer Gesamtstruktur installieren, muss jede Dienstinstanz Ihren eigenen SPN haben. Eine bestimmte Dienstinstanz kann mehrere SPNs verfügen, wenn mehrere Namen, die Clients für die Authentifizierung verwenden können. Ein SPN enthält z. B. immer den Namen des Computers Host auf dem die Instanz für den Dienst ausgeführt wird. Aus diesem Grund könnte eine Dienstinstanz einen SPN für jeden Namen bzw. Aliasnamen des seinen Host registrieren.

Die HTTP-Dienst-Klasse

Die HTTP-Dienst-Klasse unterscheidet sich von der HTTP-Protokoll. Sowohl das HTTP-Protokoll HTTPS-Protokoll verwenden Sie die HTTP-Dienst-Klasse. Die Dienstklasse ist die Zeichenfolge, die die allgemeine Klasse von Dienst identifiziert. Bekannter Dienst Klassennamen gehören "Www" für einen Webdienst und "Ldap" für einen Verzeichnisdienst. Im Allgemeinen kann der Dienstname für die Klasse jede beliebige Zeichenfolge sein, die für die Dienstklasse eindeutig ist. Denken Sie daran, dass die SPN-Syntax einen Schrägstrich (/), verwendet um Elemente zu trennen. Daher kann der Schrägstrich (/) in einen Klassennamen Dienst nicht angezeigt werden.

Der HOST-Dienst und der HTTP-Dienst-Klasse

Der HOST-Dienst stellt den Host-Computer dar. Das Kerberos-Protokoll nutzt die HOST-SPN für den Zugriff auf den Computer Host. Das Kerberos-Protokoll verwendet die langfristigen Schlüssels auf dem Computer Host, um ein Dienstticket zu erstellen.

Die HTTP-Dienst-Klasse ist einer der integrierten Dienste, die als Alias für die HOST-SPN fungieren. Der HOST-SPN wird das Host-Computerkonto zugeordnet. Daher, wenn Sie die Standardklasse für HTTP-Dienst verwenden, verwendet das Kerberos-Protokoll das Computerkonto als Dienstkonto, um ein Dienstticket anzufordern.

Häufig vorkommende Szenarios

Dieser Abschnitt beschreibt Szenarios, in denen ein DIENSTPRINZIPALNAME erfordern. Außerdem veranschaulicht dieses Abschnitts bestimmen, welche DIENSTPRINZIPALNAMEN für jedes Szenario festgelegt. Die folgenden Begriffe werden in diesen Szenarien verwendet:
IIS6server1Die Host-Namen des Computers, auf dem IIS ausgeführt wird
MeineDomäneDie Domäne, die mit der IIS6server1-Computer verbunden ist
appPool1Das Benutzerkonto in der Domäne MeineDomäne, die für die Identität des Anwendungspools verwendet wird
appPool2Das Benutzerkonto in der Domäne MeineDomäne, die für die zweite Anwendungspoolidentität verwendet wird
www.Test.comDie Kopfzeile der ersten Host für eine Website
www.test2.comDie Kopfzeile des zweiten Host für eine Website
www.test3.comDer dritte Host-Kopfzeile für eine Website
www.myIIScluster.comDer vollqualifizierte Domänenname eines Clusters von Computern, auf denen IIS ausgeführt wird
www.myEXCHcluster.comDen vollqualifizierten Domänennamen eines Clusters von Computern, auf denen Microsoft Exchange auf dem IIS ausgeführt wird

Das Programm "Setspn.exe"

Das Programm "Setspn.exe" können Sie zu lesen, ändern und löschen Sie die SPN-Verzeichnis-Eigenschaft für ein Active Directory-Dienstkonto. Dienstprinzipalnamen werden verwendet, um einen Ziel-principal Name für die Ausführung eines Dienstes suchen. Das SetSpn.exe-Tool können Sie auch die aktuelle SPNs anzeigen, die Konto-Standard-SPNs zurücksetzen und hinzufügen oder ergänzende SPNs zu löschen.

Klicken Sie auf die folgende KB-Artikelnummer, um das Programm "Setspn.exe" für Microsoft Windows Server 2003 zu beziehen:
970536"Setspn.exe" Support Tools Update für Windows Server 2003

Szenario 1: Greifen Sie IIS-Anwendung , wenn die Anwendungspoolidentität geändert wurde

Wenn eine IIS-Anwendung unter einem Domänenbenutzerkonto statt unter dem Standard-Netzwerkdienstkonto ausgeführt wird, müssen Sie den SPN für den HTTP-Dienst unter dem Domänenkonto festlegen. In diesem Szenario greifen Sie die IIS-Anwendung, indem Sie entweder den NetBIOS-Namen des Servers, auf dem IIS ausgeführt wird oder den vollqualifizierten Domänennamen des Servers, auf dem IIS ausgeführt wird.

Die IIS-Anwendung zugreifen, indem Sie den NetBIOS-Namen, verwenden Sie den folgenden Befehl ein, wobei ist NETBIOS_NAME_OF_IIS_SERVER den NetBIOS-Namen des Servers, auf dem IIS ausgeführt wird:
Setspn – HTTP-s / NETBIOS_NAME_OF_IIS_SERVER domain\username
Der Befehl kann beispielsweise den folgenden Befehl ähneln:
Setspn – s-HTTP-iis6server1-mydomain\appPool1
Die IIS-Anwendung zugreifen, indem Sie den FQDN zu verwenden, verwenden Sie den folgenden Befehl ein, wobei ist FQDN_OF_IIS_SERVER den vollqualifizierten Domänennamen des Servers, auf dem IIS ausgeführt wird:
Setspn – HTTP-s / FQDN_OF_IIS_SERVER domain\username
Der Befehl kann beispielsweise den folgenden Befehl ähneln:
Setspn – s HTTP/iis6server1.mydomain.com mydomain\appPool1

Szenario 2: Zugriff auf eine Webanwendung mithilfe eine Host-Kopfzeile

Wenn Sie eine Webanwendung mit einen Host-Header zugreifen, müssen Sie einen SPN für den HTTP-Dienst festlegen.

Wenn Sie die Webanwendung unter ein Standardkonto, z. B. das Netzwerkdienstkonto, das lokale Dienstkonto oder das lokale Systemkonto ausführen, können Sie den folgenden Befehl verwenden:
Setspn – a HTTP / HOST_HEADER NETBIOS_NAME_OF_IIS_SERVER
In diesem Befehl ist HOST_HEADER die Host-Header, geben Sie in einem Browserfenster für den Zugriff auf die Anwendung und NETBIOS_NAME_OF_IIS_SERVER ist der NetBIOS-Name des Servers, auf dem IIS ausgeführt wird.

Der Befehl für die Anwendung kann z. B. den folgenden Befehl ähneln:
Setspn – a HTTP/www.test.com iis6server1
Wenn die Anwendung unter einem Domänenkonto ausgeführt wird, können Sie den folgenden Befehl verwenden:
Setspn – a HTTP / HOSTHEADER_OR_DNS_ALIAS domain\username
In diesem Befehl wird die HOSTHEADER_OR_DNS_ALIAS die Host-Header oder DNS-Alias, mit denen Sie die Webanwendung zugreifen.

Beispielsweise kann der Befehl für die Anwendung eine der folgenden Befehle ähneln:
  • Setspn – a HTTP/www.test.com mydomain\appPool1
  • Setspn – a HTTP/www.test3.com mydomain\appPool2

Szenario 3: Zugreifen auf eine IIS-Anwendung in einer Umgebung mit gruppierten oder mit Lastenausgleich

Wenn Sie IIS in einer Clusterumgebung oder in einer Umgebung mit Lastenausgleich ausführen, greifen Sie mithilfe der Clustername anstelle der Knotennamen Anwendungen. Dieses Szenario umfasst Netzwerk Lastenausgleich. In Clustertechnologie bezieht sich auf einem Computer, der Mitglied des Clusters ist ein Knoten. Für die Verwendung von Kerberos als Authentifizierungsprotokoll in diesem Szenario muss die Identität des Anwendungspools auf jedem Knoten IIS so konfiguriert werden, dass dasselbe Domänenbenutzerkonto verwenden. Verwenden Sie zum Konfigurieren der einzelnen IIS-Knoten dasselbe Domänenbenutzerkonto verwenden den folgenden Befehl ein:
Setspn – a HTTP / CLUSTER_NAME Domäne\Benutzername
Der Befehl kann beispielsweise einen der folgenden Befehle ähneln:
  • Setspn – a HTTP/www.myIISCluster.com mydomain\appPool1
  • Setspn – a HTTP/www.myEXCHCluster.com mydomain\appPool2

Szenario 4: Verwenden von SQL Server Zugriff auf eine Anwendung

Der SPNs auf dem Back-End-Server eventuell überprüft werden, wenn die IIS-Webanwendung Zugriff auf einen Back-End-Computer erfordert, auf dem SQL Server ausgeführt wird. Die Webanwendung funktioniert möglicherweise nicht korrekt, wenn die erforderlichen SPNs falsch konfiguriert sind.

Wenn der Back-End-Computer mit SQL Server, unter dem lokalen Systemkonto, das MSSQLSvc ausgeführt wird / Portnummer FQDN_OF_SQL_SERVER:port die Computername verfügbar sein muss. Verwenden Sie den folgenden Befehl, um die SPNs für den Computer zu bestimmen, die SQL Server ausgeführt wird:
Setspn –L SQL_SERVER_COMPUTER_NAME
Verwenden Sie den folgenden Befehl, um den SPN für den Namen des Computers festgelegt, auf dem SQL Server ausgeführt wird:
Setspn – a MSSQLSvc / FQDN_OF_SQLSERVER:port SQLSERVER_COMPUTER_NAME
Wenn der Back-End-Computer mit SQL Server unter einem Domänenkonto die MSSQLSvc läuft / FQDN_OF_SQL_SERVER:port-Portnummer für das Domänenkonto verfügbar sein muss. Verwenden Sie den folgenden Befehl, um die SPNs für das Domänenkonto zu bestimmen:
Setspn –L Domäne\Benutzername
Verwenden Sie eine der folgenden Befehle, um den SPN für den Namen des Computers festgelegt, auf dem SQL Server ausgeführt wird:
  • Setspn – a MSSQLSvc / FQDN_OF_SQLSERVER:portFQDN_OF_SQLSERVER
  • Setspn – a MSSQLSvc / FQDN_OF_SQLSERVER:portdomain\username

Der SPN-Helfer-Skript

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

    Hinweis: Zum Anzeigen der Befehlszeilenoptionen für die Datei Spnhelper.vbs Spnhelper.vbs/help an einer Eingabeaufforderung eingeben, und drücken Sie anschließend die [EINGABETASTE].

Weitere Überlegungen

Kerberos-Authentifizierung kann fehlschlagen, wenn die erforderlichen SPNs für die Computerkonten oder für Konten der Domäne festgelegt sind. Wenn die Kerberos-Authentifizierung unerwartet fehlschlägt, gehen Sie folgendermaßen vor:
  • Stellen Sie sicher, dass keine doppelte SPNs für einen SPN im globalen Katalog vorhanden sind.

    Z. B. wenn der HTTP/www.test.com-SPN für das myDomain\appPool1-Konto und für das myDomain\appPool2-Konto festgelegt ist, gibt es ein doppelter SPN, obwohl die SPNs für unterschiedliche Konten festgelegt werden. Darüber hinaus haben Wenn der HTTP/iis6server1.mydomain.com-SPN für das myDomain\appPool1-Konto festgelegt ist und der HTTP/iis6server1.mydomain.com-SPN auch das Computerkonto für den Server zugeordnet ist, Sie auch einen doppelten SPN. Sie können eine HOST-SPN und einen HTTP-SPN haben. Die explizite HTTP-SPN überschreibt implizite diejenige, die unter dem HOST-Eintrag abgedeckt wird. Jedoch, wenn der URL, dass die Benutzereingabe mit mehr als ein Benutzerkonto oder mit mehr als ein Computerkonto verknüpft ist, Sie haben einen doppelten SPN.
  • Stellen Sie sicher, dass der SPNs auf andere Domänencontroller repliziert wurden.

    Probleme bei der Replikation zwischen Domänencontrollern können verhindern, dass der SPNs auf andere Domänencontroller replizieren. Wenn die SPNs nicht auf andere Domänencontroller replizieren, die Anwendung funktioniert möglicherweise nicht aus einige Clientcomputer. Beispielsweise kann HTTP/www.test.com-SPN für das myDomain\appPool1-Konto auf einem Domänencontroller festgelegt ist, der HTTP/www.test.com-SPN nicht gefunden werden für das myDomain\appPool1-Konto auf einem zweiten Domänencontroller Wenn Sie der SPN nicht auf den zweiten Domänencontroller repliziert wurde.

    Hinweis: In der Standardeinstellung nimmt die Replikation 15 Minuten.
  • Stellen Sie sicher, dass der Webserver für die Unterstützung der Kerberos-Authentifizierung konfiguriert ist. Dazu stellen Sie sicher, dass die Einstellung für die Eigenschaft "NTAuthenticationProviders" Schlüssel in der IIS-Metabasis auf NTLM nicht geändert wurde. Die Standardeinstellung ist die Negotiate, NTLM.
  • Stellen Sie sicher, dass der Server oder Dienst, der die Anmeldeinformationen zu delegieren, wird für Delegierungszwecke vertraut wird.
  • Stellen Sie sicher, dass das Konto, unter der Dienst ausgeführt wird, für Delegierungszwecke vertraut wird.
  • In Active Directory stellen Sie sicher, dass das Kontrollkästchen Konto ist vertraulich und kann nicht delegiert werden für Benutzer deaktiviert ist, die die Anwendung zugreifen.
  • Wenn Sie die Anwendung direkt vom Server zugreifen, stellen Sie sicher, dass das Kontrollkästchen <a0>Loopback-Sicherheitsüberprüfung deaktiviert ist.Weitere Informationen dazu, wie Sie sicherstellen, dass die Loopback-Kontrollkästchen deaktiviert ist, klicken Sie auf die folgende KB-Artikelnummer:
    896861Fehlermeldung 401.1 beim Browsen einer Website, die integrierte Authentifizierung verwendet und IIS 5.1 oder IIS 6 gehostet wird
  • Stellen Sie sicher, dass der Client ein Kerberos-fähigen Client ist. Stellen Sie außerdem sicher, dass die Integrierte Windows-Authentifizierung aktivieren in Internet Explorer aktiviert ist. Dazu klicken Sie im Menü Extras auf Internetoptionen, klicken Sie auf die Registerkarte Erweitert, und stellen Sie sicher, dass das Kontrollkästchen Integrierte Windows-Authentifizierung aktivieren aktiviert ist.
  • Stellen Sie sicher, dass alle Computer, die Bestandteil des Kerberos-Prozesses sind konsistent Namensauflösung haben und vom Kerberos-Vertrauensstellung verbunden sind. Beispielsweise stellen Sie sicher, dass die Computer, die an den Kerberos-Prozess beteiligt sind in derselben Gesamtstruktur oder sind Teil einer gesamtstrukturübergreifenden Kerberos-Vertrauensstellung.
  • Stellen Sie sicher, dass die token-Größe nicht den Wert übersteigt, der für die <a0>MaxTokenSize</a0>-Eigenschaft festgelegt ist. Stellen Sie außerdem sicher, dass die Größe der Anforderung nicht den Wert übersteigt, der für die Eigenschaft "MaxFieldLength" festgelegt ist. Diese Werte möglicherweise überschritten werden, wenn der Benutzer, die Bestandteil des Kerberos-Prozesses sind vielen Gruppen angehören.
    920862Fehlermeldung, wenn ein Benutzer von Outlook Web Access, versucht Zugriff auf ein Postfach in Exchange Server 2003: “ HTTP 400 Bad Request (Anforderung Header zu lang) ”
  • Stellen Sie sicher, dass die erforderlichen Sicherheitsrichtlinien aktiviert werden, wenn Sie Domänenkonten für Anwendungspools konfigurieren. Dazu stellen Sie sicher, dass das Domänenkonto eine der folgenden lokalen Sicherheitsrichtlinien auf dem Computer angehört, auf dem IIS ausgeführt wird:
    • Anpassen von Speicherkontingenten für einen Prozess
    • Anmelden als Dienst
    • Ersetzen ein Tokens auf Prozessebene
  • Überprüfen Sie, dass Kerberos-Authentifizierung über UDP funktionsfähig ist. Standardmäßig wird Kerberos-Authentifizierung UDP verwendet. Verlust der UDP-Pakete kann jedoch Kerberos-Authentifizierung zu einem Ausfall führen. Wenn dieses Problem auftritt, können Sie erzwingen, dass Kerberos-Authentifizierung zur Verwendung von TCP. Weitere Informationen dazu, wie die Kerberos-Authentifizierung zur Verwendung von TCP zu erzwingen klicken Sie auf die folgende KB-Artikelnummer:
    244474So erzwingen Sie, dass Kerberos zur Verwendung von TCP anstatt UDP in Windows Server 2003, Windows XP und Windows 2000
  • Stellen Sie sicher, dass der Zeitstempel der Echtheitsbestätigung nicht durch mehr als fünf Minuten von der Zeitstempel des Servers unterscheiden. Weitere Informationen zum Timestamp Unterschiede zu beheben klicken Sie auf die folgende KB-Artikelnummer:
    232386Anmeldung nicht möglich, wenn Uhrzeit oder Datum nicht synchronisiert sind
  • Stellen Sie sicher, dass TCP/UDP-Port 88 nicht durch eine Firewall oder einen Router gesperrt wird. Kerberos-Authentifizierung verwendet standardmäßig die TCP/UDP-Port 88.
  • Stellen Sie sicher, dass die Domänenumgebung Modus mindestens einer Umgebung mit Microsoft Windows 2000 im einheitlichen Modus ist. Weitere Informationen darüber, wie Sie den Domänenmodus feststellen können, finden Sie auf folgender Website von Microsoft:
  • Überprüfen Sie, dass der URL für die Webanwendung der lokalen Intranetsites hinzugefügt wird, auf dem Client. Weitere Informationen dazu, wie Sie einen URL mit dem lokalen Intranet hinzuzufügen klicken Sie auf die folgende KB-Artikelnummer:
    303650Intranetsite wird bei Verwendung einer FQDN- oder IP-Adresse als eine Internetsite identifiziert
  • Stellen Sie sicher, dass jedes Gigabit-Ethernet-Gerät die neueste Version des Treibers. Weitere Informationen zu Problemen, die auftreten können, wenn die Treiber für Gigabit-Ethernet-Geräte veraltet sind, klicken Sie auf die folgende KB-Artikelnummer:
    326152Kann keine Verbindung mit Domänencontroller herstellen und kann nicht anwenden von Gruppenrichtlinien mit Gigabit-Ethernet-Geräten
Informationsquellen
Weitere Informationen zur Verwendung von Kerberos-Authentifizierung bei Websites mit Lastenausgleich die folgende Microsoft-Website:Weitere Informationen zu Problemen, die auftreten können, wenn Sie die Kerberos-Authentifizierung mit Proxyserver verwenden, klicken Sie auf die folgende KB-Artikelnummer:
321728Internet Explorer unterstützt keine Kerberos-Authentifizierung mit Proxyservern
Weitere Informationen zum Konfigurieren von IIS sowohl das Kerberos-Protokoll als auch das NTLM-Protokoll für Netzwerkauthentifizierung zu unterstützen klicken Sie auf die folgende KB-Artikelnummer:
215383Gewusst wie: Konfigurieren von IIS sowohl das Kerberos-Protokoll als auch das NTLM-Protokoll für Netzwerkauthentifizierung zu unterstützen.
Weitere Informationen zum Konfigurieren ein virtueller Windows SharePoint Services-Server Kerberos-Authentifizierung und Wechseln von Kerberos-Authentifizierung zurück zur NTLM-Authentifizierung verwenden klicken Sie auf die folgende KB-Artikelnummer:
832769So konfigurieren Sie einen virtuellen Windows SharePoint Services-Server für die Kerberos-Authentifizierung und Wechseln von Kerberos-Authentifizierung zurück zur NTLM-Authentifizierung
Weitere Informationen zu Problemen, die auftreten können, wenn Sie Kerberos-Authentifizierungsprotokoll, verwenden um eine Verbindung zu einem Webserver, der einen nicht standardmäßigen Port auf Windows XP verwendet oder Windows Server 2003 herstellen, klicken Sie auf die folgende KB-Artikelnummer:
908209Internet Explorer 6 kann nicht das Kerberos-Authentifizierungsprotokoll verwenden, Herstellen einer Verbindung mit einem Webserver, der einen nicht standardmäßigen Port auf Windows XP verwendet oder Windows Server 2003

Warnung: Dieser Artikel wurde automatisch übersetzt.

Eigenschaften

Artikelnummer: 929650 – Letzte Überarbeitung: 05/12/2010 22:02:25 – Revision: 5.0

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

  • kbmt kbinfo kbhowto KB929650 KbMtde
Feedback