Jak používat názvy SPN při konfiguraci webové aplikace, jejichž hostitelem je na Internetová informační služba

Souhrn

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

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

ÚVOD

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

Další informace

Koncepty

Definice název SPN

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

Třída služby HTTP

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

Třída služby hostitele služby a HTTP

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

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

Běžné scénáře

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

Nástroje Setspn.exe

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

Získání nástroje Setspn.exe pro Microsoft Windows Server 2003, získáte v následujícím článku znalostní báze Microsoft Knowledge Base:
970536 Setspn.exe podporu nástroje aktualizace pro systém Windows Server 2003

Scénář 1: Přístup k aplikaci služby IIS při identity fondu aplikací byl změněn.

Pokud je aplikace serveru IIS spuštěna pod účtem uživatele domény namísto ve skupinovém rámečku Výchozí účet network service, je nutné nastavit název SPN HTTP služby pod účtem domény. V tomto scénáři přístup k aplikaci služby IIS pomocí buď název NetBIOS serveru, na kterém je spuštěna služba IIS, nebo plně kvalifikovaný název domény serveru se spuštěnou službou IIS.

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

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

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

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

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

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

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

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

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

Názvy SPN na serveru back-end může být nutné ověřit, zda IIS webové aplikace vyžaduje přístup k počítači se serverem SQL Server back-end. Webová aplikace nemusí pracovat správně, pokud požadované názvy SPN jsou nesprávně nakonfigurovány.

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

SPN helper script

Následující ukázkový skript můžete použít k vyhledání názvu SPN pro aplikaci služby IIS. Tento skript lze také nalézt duplicitní názvy SPN. Chcete-li tento skript použít, postupujte takto:
  1. Klepněte na tlačítko Start, klepněte na příkaz Spustit, zadejte Poznámkový bloka potom klepněte na tlačítko OK.
  2. V souboru programu Poznámkový blok vložte následující skript:
    Dim argSPN, argUser, argComputer, spnToSearch, objCategory, strFilter, searchCategory, domainInput
    Function Help()
    Dim strMessage
    strMessage = strMessage & "Usage:" & chr(13)
    strMessage = strMessage & "For accurate results run this script from the IIS server or a member server in the same domain as IIS server." & chr(13)
    strMessage = strMessage & "Check the article's failure scenarios and make sure no duplicate SPNs exist." & chr(13)
    strMessage = strMessage & "cscript spnHelper.vbs /f:spn /spn:HTTP/www.test.com /user:mydomain\apppool1" & chr(13)
    strMessage = strMessage & "cscript spnHelper.vbs /f:spn /spn:HTTP/www.test.com /computer:iis6server1" & chr(13)
    strMessage = strMessage & "cscript spnHelper.vbs /f:user /user:mydomain\apppool1" & chr(13)
    strMessage = strMessage & "cscript spnHelper.vbs /f:computer /computer:iis6server1" & chr(13)
    strMessage = strMessage & "cscript spnHelper.vbs /f:duplicatespn /spn:HTTP/www.test.com" & chr(13)
    strMessage = strMessage & "cscript spnHelper.vbs /f:requiredspn" & chr(13)
    MsgBox strMessage,,"SPN Helper"
    WScript.Quit
    End Function

    Function setArguments()
    argSPN = lcase(WScript.Arguments.Named("spn"))
    argUser = lcase(WScript.Arguments.Named("user"))
    argComputer = lcase(WScript.Arguments.Named("computer"))
    searchCategory = lcase(WScript.Arguments.Named("f"))
    if instr(argUser,"\")>0 then
    domainInput = ",DC=" & split(argUser,"\")(0)
    argUser = split(argUser,"\")(1)
    end if
    End Function

    Function resetValues()
    spnToSearch = ""
    objCategory = ""
    strFilter = ""
    End Function

    Function getGCPath()
    Dim tempGCPath, objGC, tempGC, tempStr
    Set objGC = GetObject("GC:")
    for each tempGC in objGC
    tempGCPath = tempGC.ADsPath
    next
    if tempGCPath <> "" then
    getGCPath = tempGCPath
    else
    WScript.Echo "Unable to find active directory"
    WScript.Quit
    end if
    For tempCounter=0 to UBound(split(lcase(split(getGCPath,"//")(1)),"."))
    If tempCounter = UBound(split(lcase(split(getGCPath,"//")(1)),".")) Then tempSeperator="" else tempSeperator = ","
    tempStr = tempStr & "DC=" & split(lcase(split(getGCPath,"//")(1)),".")(tempCounter) & tempSeperator
    Next
    getGCPath = tempGCPath & "/" & tempStr
    End Function

    Function getSPNClass()
    Dim tempSPNClass
    If trim(argSPN)="" Then getSPNClass = "*": Exit Function
    If instr(argSPN,"/")=0 Then getSPNClass = "*": Exit Function
    If instr(split(argSPN,"/")(0),"*")>0 Then getSPNClass = "*": Exit Function
    getSPNClass = split(argSPN,"/")(0)
    End Function

    Function isSPNInputValid(spnIN)
    isSPNInputValid = ""
    If instr(spnIN,"/")=0 Then Exit Function
    If instr(spnIN,"*")>0 Then Exit Function
    isSPNInputValid = spnIN
    End Function

    Function Main()
    Dim paramSPN
    paramSPN = ""
    call resetValues()
    call setArguments()
    Select Case searchCategory
    Case "spn"
    if (argUser = "" and argComputer = "") or (argUser <> "" and argComputer <> "") then WScript.Echo "You must use /spn along with /computer or /user": WScript.Quit
    if argSPN = "" then argSPN = "*"
    spnToSearch = "(servicePrincipalName=" & argSPN & ")"
    if argUser <> "" then objCategory = "(objectCategory=person)(sAMAccountName=" & argUser & ")"
    if argComputer <> "" then
    objCategory = "(objectCategory=computer)(cn=" & argComputer & ")"
    End If
    strFilter = "(&" & spnToSearch & objCategory & ")"
    Case "duplicatespn"
    If isSPNInputValid(argSPN)="" Then WScript.Echo "Invalid SPN input. Please verify and try again.": WScript.Quit
    spnToSearch = "(servicePrincipalName=" & argSPN & ")"
    strFilter = spnToSearch
    paramSPN = argSPN
    Case "requiredspn"
    call showRequiredSPNs("IIS")
    WScript.Quit
    Case "computer"
    objCategory = "(&(objectCategory=computer)(cn=" & argComputer & "))"
    strFilter = objCategory
    Case "user"
    objCategory = "(&(objectCategory=person)(sAMAccountName=" & argUser & "))"
    strFilter = objCategory
    Case else
    call Help()
    WScript.Quit
    End Select
    call getSPNs(paramSPN)
    End Function

    Function getPingResult(hostName,errorMessage)
    'On Error Resume Next
    getPingResult = ""
    If instr(hostName,".")=0 Then
    Dim tempGCPath, objGC, tempGC
    Set objGC = GetObject("GC:")
    for each tempGC in objGC
    tempGCPath = tempGC.ADsPath
    next
    if tempGCPath <> "" then
    gcPath = tempGCPath
    else
    WScript.Echo "Unable to find active directory"
    WScript.Quit
    end if
    Set adConn = CreateObject("ADODB.Connection")
    Set adCmd = CReateObject("ADODB.Command")
    adConn.Provider = "ADsDSOObject"
    adConn.Open "ADs Provider"
    Set adCmd.ActiveConnection = adConn
    adQuery = "<" + gcPath + ">;" & "(&(objectCategory=computer)(cn=" & hostName & "))" & ";dnsHostName;subtree"
    'WScript.Echo adQuery
    'WScript.Quit
    adCmd.CommandText = adQuery
    Set adRecordSet = adCmd.Execute
    if adRecordSet.RecordCount>0 Then
    If IsNull(adRecordSet.Fields("dnsHostName"))=0 Then
    getPingResult = adRecordSet.Fields("dnsHostName")
    hostName = getPingResult
    Else
    getPingResult = hostName
    End If
    else
    errorMessage = "Could not find " & hostname & " in the active directory"
    end if

    Exit Function
    End If
    getPingResult = hostName
    Exit Function
    'If Err Then getPingResult = hostName
    End Function

    Function getSPNs(spn)
    Dim spnClass, duplicateSPNArray
    spnClass = getSPNClass()
    duplicateSPNArray = ""
    gcPath = getGCPath()
    Set adConn = CreateObject("ADODB.Connection")
    Set adCmd = CreateObject("ADODB.Command")
    adConn.Provider = "ADsDSOObject"
    adConn.Open "ADs Provider"
    Set adCmd.ActiveConnection = adConn
    adQuery = "<" + gcPath + domainInput + ">;" & strFilter & ";distinguishedName,objectCategory,dnsHostName,servicePrincipalName,sAMAccountName;subtree"
    'WScript.Echo adQuery
    'WScript.Quit
    adCmd.CommandText = adQuery
    Set adRecordSet = adCmd.Execute
    if adRecordSet.EOF and adRecordSet.Bof Then
    WScript.echo "No " & searchCategory & " found with the given criteria."
    else
    If adRecordSet.RecordCount>10 Then
    If msgbox(adRecordSet.RecordCount & " Records are returned with the given criteria. Printing all of them might take a long time" & chr(13) & " Do you want to print all of them?",vbYesNo,"Kerberos")=vbNo Then Exit Function
    End If
    Do While not adRecordset.Eof
    If Err Then Exit Do
    WScript.echo "Class: " & split(split(adRecordSet.Fields("objectCategory"),",")(0),"=")(1)
    WScript.Echo adRecordSet.Fields("distinguishedName")
    if UCase(adRecordSet.Fields("objectCategory")) = "COMPUTER" Then
    WScript.echo "Computer Name" & adRecordSet.Fields("dnsHostName")
    else
    WScript.echo "User Name: " & adRecordSet.Fields("samAccountName")
    end if
    if instr(searchCategory,"spn")>0 Then
    spnCollection = adRecordSet.Fields("servicePrincipalName")
    for each individualSPN in spnCollection
    if spnClass="*" Then
    WScript.Echo Chr(9) + individualSPN
    else
    Select Case searchCategory
    Case "spn"
    if Lcase(split(individualSPN,"/")(0)) = lcase(spnClass) Then
    WScript.Echo Chr(9) + individualSPN
    end if
    Case "duplicatespn"
    if Lcase(individualSPN) = lcase(spn) Then
    duplicateSPNArray = duplicateSPNArray & Lcase(individualSPN) & " for " & split(split(adRecordSet.Fields("objectCategory"),",")(0),"=")(1) & ":" & adRecordSet.Fields("samAccountName") & Chr(29)
    end if
    Case "requiredspn"
    End Select
    End if
    next
    end if
    WScript.Echo
    adRecordSet.MoveNext
    Loop
    If searchCategory = "duplicatespn" Then
    If UBound(Split(duplicateSPNArray,Chr(29)))>1 Then
    WScript.Echo "Duplicate SPNs found"
    For tempDuplicateCount=0 to UBound(Split(duplicateSPNArray,Chr(29)))-1
    WScript.Echo Split(duplicateSPNArray,Chr(29))(tempDuplicateCount)
    Next
    End If
    End If
    WScript.Echo ""
    If adRecordset.RecordCount>1 Then WScript.Echo "Found " & adRecordset.RecordCount & " accounts" Else WScript.Echo "Found " & adRecordset.RecordCount & " account"
    end if
    adRecordset.Close
    adConn.Close
    If Err Then MsgBox Err.Message
    End Function

    Function getCategoryCount(myFilterValue, myFilterCategory)
    'This function accepts 2 parameters. First paramenter is the filter value and second param is filter category.
    'If you want to pass in your own filter string with various categories, you can pass "" as the second param.
    gcPath = getGCPath()
    searchCategory = myFilterCategory
    Select Case lcase(searchCategory)
    Case "spn"
    tempFilter = "(servicePrincipalName=" & myFilterValue & ")"
    Case "user"
    tempFilter = "(&(objectCategory=person)(sAMAccountName=" & myFilterValue & "))"
    Case "computer"
    tempFilter = "(&(objectCategory=computer)(cn=" & myFilterValue & "))"
    Case else
    tempFilter = myFilterValue
    End Select
    Dim tempCategoryCount
    tempCategoryCount = 0
    Set adConn = CreateObject("ADODB.Connection")
    Set adCmd = CReateObject("ADODB.Command")
    adConn.Provider = "ADsDSOObject"
    adConn.Open "ADs Provider"
    Set adCmd.ActiveConnection = adConn
    adQuery = "<" + gcPath + domainInput + ">;" & tempFilter & ";objectCategory,dnsHostName,servicePrincipalName,sAMAccountName;subtree"
    'WScript.Echo adQuery
    'WScript.Quit
    adCmd.CommandText = adQuery
    Set adRecordSet = adCmd.Execute
    if adRecordSet.EOF and adRecordSet.Bof Then
    else
    Do While not adRecordset.Eof
    If Err Then Exit Do
    if searchCategory = "spn" Then
    spnCollection = adRecordSet.Fields("servicePrincipalName")
    for each individualSPN in spnCollection
    If lcase(individualSPN) = lcase(myFilterValue) Then
    tempCategoryCount = tempCategoryCount + 1
    End If
    next
    else
    tempCategoryCount = tempCategoryCount + 1
    end if
    adRecordSet.MoveNext
    Loop
    end if
    getCategoryCount = tempCategoryCount
    adRecordset.Close
    adConn.Close
    End Function

    Function showRequiredSPNs(Product)
    Select Case Product
    Case "IIS"
    If MsgBox("Is IIS running in a Cluster or NLB",vbYesNo)=vbYes Then 'Running in Cluster or NLB is true
    strClusterName = InputBox("Enter the Cluster Name")
    If strClusterName = "" Then WScript.Quit
    If getPingResult(strClusterName,errorMessage)="" Then
    If MsgBox(errorMessage & ". Do you want to continue?",vbYesNo)<>vbYes Then WScript.Quit
    End If
    strDomainAccount = InputBox("Enter the Domain Account that the application pool is running under")
    If strDomainAccount = "" Then WScript.Quit
    strRequiredSPN = "HTTP/" & strClusterName
    If instr(strDomainAccount,"\") > 0 then
    If getCategoryCount(split(strDomainAccount,"\")(1), "user")=0 Then
    WScript.Echo "Domain account " & strDomainAccount & " does not exist"
    WScript.Quit
    End If
    Else
    If getCategoryCount(strDomainAccount, "user")=0 Then
    WScript.Echo "Domain account " & strDomainAccount & " does not exist"
    WScript.Quit
    End If
    End If
    If getCategoryCount(strRequiredSPN, "spn")>0 Then
    WScript.Echo "SPN " & " is already set. Use search option for finding the account that it is set for"
    WScript.Quit
    End If
    WScript.Echo "You need to set the SPN " & strRequiredSPN & " for domain account " & strDomainAccount
    Else
    If MsgBox("Is IIS application pool running under domain account",vbYesNo)=vbYes Then
    strHostName = InputBox("Enter the hostname or host header or FQDN that you use to access the application")
    If strHostName = "" Then WScript.Quit
    If getPingResult(strHostName,errorMessage)="" Then
    If MsgBox(errorMessage & ". Do you want to continue?",vbYesNo)<>vbYes Then WScript.Quit
    End If
    strDomainAccount = InputBox("Enter the Domain Account that the application pool is running under")
    If strDomainAccount = "" Then WScript.Quit
    If instr(strDomainAccount,"\") > 0 then
    If getCategoryCount(split(strDomainAccount,"\")(1), "user")=0 Then
    WScript.Echo "Domain account " & strDomainAccount & " does not exist"
    WScript.Quit
    End If
    Else
    If getCategoryCount(strDomainAccount, "user")=0 Then
    WScript.Echo "Domain account " & strDomainAccount & " does not exist"
    WScript.Quit
    End If
    End If
    strRequiredSPN = "HTTP/" & strHostName
    If getCategoryCount(strRequiredSPN, "spn")>0 Then
    WScript.Echo "SPN " & strSPNRequired & " is already set. Use search option for finding the account that it is set for"
    WScript.Quit
    Else
    WScript.Echo "You need to set SPN " & strRequiredSPN & " for domain account " & strDomainAccount
    WScript.Quit
    End If
    Else
    strHostName = InputBox("Enter the host header or FQDN that you use to access the application")
    If strHostName = "" Then WScript.Quit
    If getPingResult(strHostName,errorMessage)="" Then
    If MsgBox(errorMessage & ". Do you want to continue?",vbYesNo)<>vbYes Then WScript.Quit
    End If
    If MsgBox("Are you accessing the application with netbios name or FQDN or CNAME alias of IIS server?",vbYesNo)=vbYes Then
    strRequiredSPN = "host/" & strHostName
    If getCategoryCount(strRequiredSPN, "spn")>0 Then
    WScript.Echo "Required SPN " & strRequiredSPN & " is already set. Use search option for finding the account that it is set for"
    WScript.Quit
    Else
    WScript.Echo "You need to set SPN " & strRequiredSPN & " for IIS server's netbios name"
    WScript.Quit
    End If
    End If
    strHostHeader = InputBox("Enter the host header that you use to access the application")
    If strHostHeader = "" Then WScript.Quit
    strRequiredSPN = "http/" & strHostHeader
    If getCategoryCount(strSPNRequired, "spn")>0 Then
    WScript.Echo "A required SPN " & strSPNRequired & " is already set. Use search option to find the account the SPN is set to. If the required SPN is found under a different account, remove and add it to the IIS server's machine account."
    WScript.Quit
    Else
    WScript.Echo "You need to set SPN " & strRequiredSPN & " for IIS server's netbios name"
    WScript.Quit
    End If
    End If

    End If
    Case Else
    call Help()
    End Select
    End Function

    call Main()
    '

  3. Uložte soubor jako Spnhelper.vbs.
  4. Na příkazovém řádku spusťte soubor Spnhelper.vbs pomocí odpovídající možnost příkazového řádku.

    Poznámka: Chcete-li zobrazit možnosti příkazového řádku pro soubor Spnhelper.vbs, Spnhelper.vbs/help , zadejte na příkazovém řádku a stiskněte klávesu ENTER.

Další důležité informace

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

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

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

    Poznámka: Ve výchozím nastavení replikace trvá 15 minut.
  • Ověřte, zda je webový server nakonfigurován pro podporu ověřování pomocí protokolu Kerberos. Chcete-li to provést, ověřte, že NTLMnebyla změněna nastavení klíče NTAuthenticationProviders v metabázi služby IIS. Ve výchozím nastavení je záhlaví Negotiate, NTLM.
  • Ověřte, zda server nebo služba, která je delegování pověření je důvěryhodný pro delegování.
  • Ověřte, zda je důvěryhodný pro delegování účtu, který je služba spuštěna pod.
  • Ve službě Active Directory ověřte, zda je zrušeno zaškrtnutí políčka účet je citlivý a nelze jej delegovat pro uživatele, kteří přístup k aplikaci.
  • Pokud přistupujete k aplikaci přímo ze serveru, ověřte, zda je zrušeno zaškrtnutí políčka Kontrolovat zabezpečení zpětné smyčky . Další informace o tom, jak ověřit, že kontrola zpětné smyčky je zakázáno, klepněte na následující číslo článku databáze Microsoft Knowledge Base:

    896861 se zobrazí chyba 401.1 při procházení webu, který používá integrované ověřování a jehož hostitelem je služba IIS 5.1 nebo IIS 6

  • Ověřte, zda klient je klient protokolu Kerberos povoleno. Ověřte také, zda je v aplikaci Internet Explorer povoleno nastavení Povolit integrované ověřování systému Windows . Chcete-li to provést, klepněte na příkaz Možnosti Internetu v nabídce Nástroje , klepněte na kartu Upřesnit a zkontrolujte, zda je zaškrtnuto políčko Povolit Integrované ověření systémem Windows .
  • Ověřte, zda všechny počítače, které jsou součástí procesu pomocí protokolu Kerberos jsou konzistentní překlad a připojení pomocí protokolu Kerberos vztahu důvěryhodnosti. Například ověřte, zda počítače, které jsou zapojeny do procesu pomocí protokolu Kerberos jsou ve stejné doménové struktuře nebo jsou součástí vztahu důvěryhodnosti mezi doménovými strukturami pomocí protokolu Kerberos.
  • Ověřte, že velikost tokenu nepřekročí hodnotu, která je nastavena pro MaxTokenSize vlastnost. Ověřte také, že požadavek na velikost nepřekročí hodnotu, která je nastavena MaxFieldLength vlastnost. Tyto hodnoty mohou být překročeny v případě, že uživatelé, kteří jsou součástí procesu pomocí protokolu Kerberos jsou členy mnoho skupin.
    920862 při uživatel aplikace Outlook Web Access pokusí o přístup k poštovní schránce Exchange Server 2003 zobrazí chybová zpráva: "HTTP 400 Špatný požadavek (hlavičky požadavku příliš dlouhý)"

  • Ověřte, zda požadované bezpečnostní zásady jsou povoleny při konfiguraci účtů domény pro fondy aplikací. Chcete-li to provést, ověřte, zda účet domény je členem následujících zásad místního zabezpečení v počítači se spuštěnou službou IIS:
    • Upravit kvóty paměti pro proces
    • Přihlášení se jako služba
    • Nahradit token úrovně procesu
  • Ověřte, že ověřování Kerberos funguje správně přes protokol UDP. Ve výchozím nastavení používá ověřování pomocí protokolu Kerberos UDP. Ztráta paketů UDP však může způsobit selhání ověřování protokolem Kerberos. Když nastane tento problém, můžete vynutit ověřování pomocí protokolu Kerberos použití protokolu TCP. Další informace o vynucení ověřování pomocí protokolu Kerberos použití protokolu TCP, klepněte na následující číslo článku databáze Microsoft Knowledge Base:

    244474 jak vynutit použití ověřování pomocí protokolu Kerberos použití protokolu TCP místo protokolu UDP v systému Windows Server 2003, Windows XP a Windows 2000

  • Ověřte, že je časové razítko u ověřovatele neliší o více než pět minut od časového razítka serveru. Další informace o tom, jak vyřešit rozdíly časových razítek, klepněte na následující číslo článku databáze Microsoft Knowledge Base:

    232386 nelze přihlásit, pokud datum a čas nejsou synchronizovány.

  • Ověřte, že port TCP/UDP 88 nebyl blokován bránou firewall nebo směrovač. Ověřování pomocí protokolu Kerberos ve výchozím nastavení používá port TCP/UDP 88.
  • Ověřte, zda je prostředí režimu domény alespoň prostředí nativního režimu systému Microsoft Windows 2000. Další informace o tom, jak určit režim domény naleznete na následujícím webu společnosti Microsoft:
  • V klientském počítači zkontrolujte, zda adresa URL webové aplikace přidána na místní intranet weby. Další informace o tom, jak přidat adresu URL do místní intranet, klepněte na následující číslo článku databáze Microsoft Knowledge Base:

    303650 intranetový server je identifikován jako internetový server při použití FQDN nebo adresy IP

  • Ověřte, že každé zařízení gigabit ethernet používá nejnovější verzi ovladače. Další informace o problémech, které může dojít, pokud ovladače pro zařízení gigabit Ethernet jsou zastaralé, klepněte na následující číslo článku databáze Microsoft Knowledge Base:

    326152 nelze se připojit k řadiči domény a nelze použít Zásady skupiny se zařízeními Gigabit Ethernet

Další informace o použití ověřování pomocí protokolu Kerberos s vyrovnáváním zatížení webových serverů naleznete na následujícím webu společnosti Microsoft:Další informace o problémech, které mohou nastat při použití ověřování pomocí protokolu Kerberos se servery proxy klepněte na následující číslo článku databáze Microsoft Knowledge Base:

321728 aplikace Internet Explorer nepodporuje ověřování pomocí protokolu Kerberos se servery proxy

Další informace o tom, jak nakonfigurovat službu IIS na podporu protokolu Kerberos a protokolu NTLM pro ověřování v síti klepněte na následující číslo článku databáze Microsoft Knowledge Base:

215383 jak nakonfigurovat službu IIS na podporu protokolu Kerberos a protokolu NTLM pro ověřování v síti

Další informace o konfiguraci virtuálního serveru služby Windows SharePoint Services na používání ověřování pomocí protokolu Kerberos a jak přepnout z tohoto ověřování zpět na ověřování protokolem NTLM, klepněte na následující číslo článku databáze Microsoft Knowledge Base:

832769 jak nakonfigurovat virtuální server služby Windows SharePoint Services k ověřování pomocí protokolu Kerberos a jak přepnout z tohoto ověřování zpět na ověřování protokolem NTLM

Další informace o problémech, které mohou nastat při použití ověřovacího protokolu Kerberos pro připojení k webovém serveru, který používá nestandardní port v systému Windows XP nebo Windows Server 2003 klepněte na následující číslo článku databáze Microsoft Knowledge Base:

908209 aplikace Internet Explorer 6 nelze použít protokol Kerberos ověřování pro připojení k webovém serveru, který používá nestandardní port v systému Windows XP nebo Windows Server 2003

Vlastnosti

ID článku: 929650 - Poslední kontrola: 14. 1. 2017 - Revize: 1

Váš názor