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.
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.
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:
Tabelle minimierenTabelle vergrößern
IIS6server1
Die Host-Namen des Computers, auf dem IIS ausgeführt wird
MeineDomäne
Die Domäne, die mit der IIS6server1-Computer verbunden ist
appPool1
Das Benutzerkonto in der Domäne MeineDomäne, die für die Identität des Anwendungspools verwendet wird
appPool2
Das Benutzerkonto in der Domäne MeineDomäne, die für die zweite Anwendungspoolidentität verwendet wird
www.Test.com
Die Kopfzeile der ersten Host für eine Website
www.test2.com
Die Kopfzeile des zweiten Host für eine Website
www.test3.com
Der dritte Host-Kopfzeile für eine Website
www.myIIScluster.com
Der vollqualifizierte Domänenname eines Clusters von Computern, auf denen IIS ausgeführt wird
www.myEXCHcluster.com
Den 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:
"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:
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:
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:
Klicken Sie auf Start, klicken Sie auf Ausführen, geben Sie Notepad, und klicken Sie dann auf OK.
In the Notepad file, paste the following script:
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()
'
Speichern Sie die Datei unter Spnhelper.vbs.
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:
Fehlermeldung 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.
Fehlermeldung, 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:
So 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:
Anmeldung 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:
Intranetsite 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:
Weitere Informationen zu Problemen, die auftreten können, wenn Sie die Kerberos-Authentifizierung mit Proxyserver verwenden, klicken Sie auf die folgende KB-Artikelnummer:
Internet 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:
Gewusst 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:
So 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:
Internet 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
Die Informationen in diesem Artikel beziehen sich auf:
Microsoft Internet Information Services 7.5
Microsoft Internet Information Services 7.0
Microsoft Internet Information Services 6.0
Keywords:
kbmt kbinfo kbhowto KB929650 KbMtde
Maschinell übersetzter Artikel
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
(http://support.microsoft.com/kb/929650/en-us/
)
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.
Danke! Dieses Feedback hilft uns dabei, die Supportartikel weiter zu verbessern. Weitere Informationen finden Sie auf der Hilfe und Support-Startseite.