Come utilizzare SPN durante la configurazione di applicazioni Web ospitate su Internet Information Services

Traduzione articoli Traduzione articoli
Identificativo articolo: 929650 - Visualizza i prodotti a cui si riferisce l?articolo.
Espandi tutto | Chiudi tutto

In questa pagina

Sommario

In questo articolo vengono descritti i nomi principali di servizio (SPN). In questo articolo viene inoltre descritto come utilizzare SPN quando si configurano le applicazioni Web ospitate in Microsoft Internet Information Services (IIS). In questo articolo viene inoltre descritto il processo di negoziazione dell'autenticazione integrata di Windows. Negozia protezione intestazione consente ai client selezionare tra l'autenticazione Kerberos e l'autenticazione NTLM.

Inoltre, in questo articolo vengono descritti scenari comuni che richiedono un SPN attivare l'autenticazione Kerberos. L'ultima sezione vengono descritte le situazioni in cui l'autenticazione Kerberos potrebbe non riuscire. L'ultima sezione fornisce inoltre procedure di risoluzione dei problemi.

INTRODUZIONE

Importante Negli argomenti discussi in questo articolo si applicano a Internet Information Services (IIS) 6.0. Negli argomenti si applicano anche a IIS 7.0 e 7.5 se l'autenticazione della modalitÓ kernel Ŕ disabilitato impostando su false l' impostazione di configurazione useKernelMode.
In questo articolo viene descritto come utilizzare i nomi principali di servizio (SPN) durante la configurazione di applicazioni Web ospitate su IIS.IIS passa l'intestazione di protezione Negotiate quando viene utilizzata l'autenticazione integrata di Windows per autenticare le richieste del client. Negozia protezione intestazione consente ai client selezionare tra l'autenticazione Kerberos e l'autenticazione NTLM. Il processo di negoziazione seleziona l'autenticazione Kerberos, a meno che una delle seguenti condizioni Ŕ vera:
  • Uno dei sistemi coinvolti nell'autenticazione non Ŕ possibile utilizzare l'autenticazione Kerberos.
  • L'applicazione chiamante non fornisce informazioni sufficienti per l'utilizzo dell'autenticazione Kerberos.
Per attivare il processo di negoziazione selezionare il protocollo Kerberos per l'autenticazione di rete, l'applicazione client necessario fornire un SPN, un nome principale utente (UPN) o un nome di account NetBIOS come il nome di destinazione. Se l'applicazione client non fornisce un nome di destinazione, il processo di negoziazione non Ŕ possibile utilizzare il protocollo Kerberos. Se il processo di negoziazione non Ŕ possibile utilizzare il protocollo Kerberos, il processo di negoziazione consente di selezionare il protocollo NTLM.

Informazioni

Concetti

Definizione di un SPN

Un SPN Ŕ il nome mediante il quale un client identifica in modo univoco un'istanza di un servizio. Se Ŕ possibile installare pi¨ istanze di un servizio sui computer in un insieme di strutture, ogni istanza del servizio deve avere il proprio SPN. Un'istanza del servizio particolare pu˛ avere pi¨ SPN se esistono pi¨ nomi che i client possono utilizzare per l'autenticazione. Ad esempio, un SPN include sempre il nome del computer host in cui Ŕ in esecuzione l'istanza del servizio. Di conseguenza, un'istanza del servizio pu˛ registrare un SPN per ogni nome o l'alias dell'host relativo.

La classe del servizio HTTP

La classe del servizio HTTP Ŕ diverso dal protocollo HTTP. Il protocollo HTTP e il protocollo HTTPS utilizzare la classe del servizio HTTP. La classe di servizio Ŕ la stringa che identifica la classe generale del servizio. I nomi delle classi di servizio noto includono "www" per un servizio Web e "ldap" per un servizio di elenchi in linea. In genere, il nome della classe di servizio pu˛ essere qualsiasi stringa che Ŕ univoco per la classe di servizio. Si tenga presente che la sintassi SPN utilizza un carattere barra (/) per separare gli elementi. Di conseguenza, il carattere barra (/) non pu˛ essere presente in un nome di classe di servizio.

Classe del servizio HTTP e il servizio HOST

Il servizio HOST rappresenta il computer host. Il protocollo Kerberos utilizza HOST SPN per accedere al computer host. Il protocollo Kerberos utilizza la chiave a lungo termine sul computer host per creare un ticket di servizio.

La classe del servizio HTTP Ŕ uno dei servizi incorporati che agiscono come un alias di HOST SPN. HOST SPN viene mappato all'account del computer host. Di conseguenza, quando si utilizza la classe del servizio HTTP predefinito, il protocollo Kerberos utilizza l'account del computer per l'account di servizio per richiedere un ticket di servizio.

Scenari comuni

In questa sezione vengono descritti scenari che potrebbero richiedere un SPN. Inoltre, in questa sezione viene illustrato come determinare il SPN per impostare per ogni scenario. In questi scenari vengono utilizzati i seguenti termini:
Riduci questa tabellaEspandi questa tabella
IIS6server1Nome host del computer che esegue IIS
miodominioIl dominio a cui appartiene il computer IIS6server1
appPool1L'account utente nel dominio miodominio viene utilizzato per l'identitÓ del pool di applicazioni
appPool2L'account utente nel dominio miodominio viene utilizzato per l'identitÓ del pool di applicazioni secondo
www.test.comLa prima intestazione host per un sito Web
www.test2.comL'intestazione host secondo per un sito Web
www.test3.comIl terzo intestazione host per un sito Web
www.myIIScluster.comIl nome di dominio completo di un cluster di computer che eseguono IIS
www.myEXCHcluster.comIl nome di dominio completo di un cluster di computer che eseguono Microsoft Exchange su IIS

Lo strumento Setspn.exe

Lo strumento Setspn.exe consente di leggere, modificare ed eliminare le proprietÓ di directory SPN per un account di servizio Active Directory. SPN vengono utilizzati per individuare un nome principale di destinazione per l'esecuzione di un servizio. Lo strumento SetSpn.exe consente inoltre di visualizzare il SPN corrente, reimpostazione predefinito SPN dell'account e aggiungere o eliminare SPN supplementari.

Per ottenere lo strumento Setspn.exe per Microsoft Windows Server 2003, fare clic sul numero dell'articolo della Microsoft Knowledge Base riportato di seguito:
970536Aggiornamento per lo strumento Setspn.exe supporto per Windows Server 2003

Scenario 1: Accedere a un'applicazione IIS quando Ŕ stato modificato l'identitÓ del pool di applicazioni

Quando un'applicazione IIS viene eseguito con un account utente di dominio anzichÚ con l'account di servizio di rete predefinito, Ŕ necessario impostare il nome SPN per il servizio HTTP con l'account di dominio. In questo scenario, Ŕ possibile accedere all'applicazione di IIS utilizzando il nome NetBIOS del server che esegue IIS o il nome FQDN del server che esegue IIS.

Per accedere all'applicazione di IIS utilizzando il nome NetBIOS, utilizzare il comando riportato di seguito, dove NETBIOS_NAME_OF_IIS_SERVER Ŕ il nome NetBIOS del server che esegue IIS:
Setspn ? s HTTP / NETBIOS_NAME_OF_IIS_SERVER domain\username
Il comando analoghe, ad esempio, il comando riportato di seguito:
Setspn ? s HTTP/iis6server1 mydomain\appPool1
Per accedere all'applicazione di IIS utilizzando il nome completo dominio (FQDN), utilizzare il comando riportato di seguito, dove FQDN_OF_IIS_SERVER Ŕ il nome FQDN del server che esegue IIS:
Setspn ? s HTTP / FQDN_OF_IIS_SERVER domain\username
Il comando analoghe, ad esempio, il comando riportato di seguito:
Setspn ? s HTTP/iis6server1.mydomain.com mydomain\appPool1

Scenario 2: Accedere a un'applicazione Web utilizzando un'intestazione host

Quando si accede a un'applicazione Web utilizzando un'intestazione host, Ŕ necessario impostare un SPN per il servizio HTTP.

Quando si esegue l'applicazione Web con un account predefinito, ad esempio l'account del servizio di rete, l'account di servizio locale o l'account di sistema locale, Ŕ possibile utilizzare il comando riportato di seguito:
Setspn ?A HTTP / HOST_HEADER NETBIOS_NAME_OF_IIS_SERVER
In questo comando HOST_HEADER Ŕ l'intestazione host che si digita in una finestra del browser per accedere all'applicazione e NETBIOS_NAME_OF_IIS_SERVER Ŕ il nome NetBIOS del server che esegue IIS.

Ad esempio, il comando per l'applicazione potrebbe essere simile al comando riportato di seguito:
Setspn ?A HTTP/www.test.com iis6server1
Se si esegue l'applicazione con un account di dominio, Ŕ possibile utilizzare il comando riportato di seguito:
Setspn ?A HTTP / HOSTHEADER_OR_DNS_ALIAS domain\username
In questo comando HOSTHEADER_OR_DNS_ALIAS Ŕ l'intestazione host o l'alias DNS che consente di accedere all'applicazione Web.

Il comando per l'applicazione, ad esempio, potrebbe essere analogo uno dei seguenti comandi:
  • Setspn ?A HTTP/www.test.com mydomain\appPool1
  • Setspn ?A HTTP/www.test3.com mydomain\appPool2

Scenario 3: Accedere a un'applicazione IIS in un ambiente cluster o a carico bilanciato

Quando si esegue IIS in un ambiente cluster o in un ambiente a carico bilanciato, accedere alle applicazioni utilizzando il nome del cluster anzichÚ utilizzando un nome di nodo. In questo scenario include bilanciamento del carico di rete. Nella tecnologia cluster un nodo si riferisce a un computer Ŕ un membro del cluster. Per utilizzare Kerberos come protocollo di autenticazione in questo scenario, l'identitÓ del pool di applicazioni su ciascun nodo IIS deve essere configurato per utilizzare lo stesso account utente del dominio. Per configurare ogni nodo IIS per utilizzare lo stesso account utente del dominio, utilizzare il comando riportato di seguito:
Setspn ?A HTTP / CLUSTER_NAME dominio\nomeutente
Ad esempio, potrebbe essere simile al comando uno dei seguenti comandi:
  • Setspn ?A HTTP/www.myIISCluster.com mydomain\appPool1
  • Setspn ?A HTTP/www.myEXCHCluster.com mydomain\appPool2

Scenario 4: Utilizzare SQL Server per accedere a un'applicazione

il SPN nel server back-end potrebbe essere necessario verificare se l'applicazione IIS Web richiede l'accesso a un computer back-end che esegue SQL Server. L'applicazione Web potrebbe non funzionare correttamente se il SPN necessari non sono configurati correttamente.

Se il computer back-end che esegue SQL Server Ŕ in esecuzione con l'account sistema locale, il MSSQLSvc / numero di porta FQDN_OF_SQL_SERVER:port deve essere disponibile per il nome computer. Utilizzare il comando riportato di seguito per determinare il SPN per il computer che esegue SQL Server:
Setspn ? l SQL_SERVER_COMPUTER_NAME
Utilizzare il comando seguente per impostare il nome SPN per il nome del computer che esegue SQL Server:
Setspn ?A MSSQLSvc / FQDN_OF_SQLSERVER:port SQLSERVER_COMPUTER_NAME
Se il computer back-end che esegue SQL Server Ŕ in esecuzione con un account di dominio, il MSSQLSvc / numero di porta FQDN_OF_SQL_SERVER:port deve essere disponibile per l'account di dominio. Utilizzare il comando riportato di seguito per determinare il SPN per l'account di dominio:
Setspn ? l dominio\nomeutente
Per impostare il nome principale di servizio per il nome del computer che esegue SQL Server, utilizzare uno dei seguenti comandi:
  • Setspn ?A MSSQLSvc / FQDN_OF_SQLSERVER:portFQDN_OF_SQLSERVER
  • Setspn ?A MSSQLSvc / FQDN_OF_SQLSERVER:portdomain\username

Lo script di supporto SPN

╚ possibile utilizzare lo script di esempio riportato di seguito per trovare il SPN per un'applicazione IIS. ╚ inoltre possibile utilizzare questo script per trovare il SPN duplicati. Per utilizzare questo script, attenersi alla seguente procedura:
  1. Fare clic sul pulsante Start, scegliere Esegui, digitare Notepad e quindi fare clic su OK.
  2. 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()
    '
    
  3. Salvare il file come Spnhelper.vbs.
  4. Al prompt dei comandi di eseguire il file Spnhelper.vbs utilizzando l'opzione della riga di comando appropriata.

    Nota Per visualizzare le opzioni della riga di comando per il file Spnhelper.vbs, digitare Spnhelper.vbs/help al prompt dei comandi e premere INVIO.

Ulteriori considerazioni

L'autenticazione Kerberos potrebbe non riuscire quando SPN necessari sono impostate per gli account computer o per gli account di dominio. Se l'autenticazione Kerberos non riesce in modo imprevisto, effettuare le seguenti operazioni:
  • Verificare che nessun SPN duplicati presenti nel catalogo globale per un SPN.

    Ad esempio, se il SPN HTTP/www.test.com Ŕ impostato per l'account myDomain\appPool1 e per l'account myDomain\appPool2, un SPN duplicato esiste anche se il SPN sono impostati per account diversi. Inoltre, se il SPN HTTP/iis6server1.mydomain.com Ŕ impostato per l'account myDomain\appPool1 e SPN HTTP/iis6server1.mydomain.com Ŕ anche associato con l'account del computer per il server, Ŕ necessario anche un SPN duplicato. ╚ possibile disporre di un HOST SPN e un SPN HTTP. il SPN HTTP esplicita avrÓ la precedenza su quello implicita descritte sotto la voce HOST. Tuttavia, se l'URL che i tipi di utente Ŕ associato a uno o pi¨ account utente o a uno o pi¨ account di computer, occorre un SPN duplicato.
  • Verificare che il SPN siano state replicate ad altri controller di dominio.

    Problemi di replica tra i controller di dominio possono impedire il SPN di replica ai controller di dominio. Quando il SPN non verranno replicate ad altri controller di dominio, l'applicazione non funzionino da alcuni computer client. Ad esempio, se il SPN HTTP/www.test.com Ŕ impostato per l'account myDomain\appPool1 su un controller di dominio, il SPN HTTP/www.test.com non venga trovato per l'account myDomain\appPool1 in un secondo controller di dominio se il SPN non Ŕ stato replicato al controller di dominio di secondo.

    Nota Per impostazione predefinita, la replica richiede 15 minuti.
  • Verificare che il server Web sia configurato per supportare l'autenticazione Kerberos. Per effettuare questa operazione, verificare che l'impostazione della chiave NTAuthenticationProviders nella metabase di IIS non Ŕ stato modificato su NTLM. L'impostazione predefinita Ŕ Negotiate, NTLM.
  • Verificare che il server o il servizio Ŕ delegare le credenziali sia trusted per delega.
  • Verificare che l'account Ŕ in esecuzione il servizio sia trusted per delega.
  • In Active Directory, verificare che l'account Ŕ sensibile e non pu˛ essere delegato Ŕ deselezionata per gli utenti che accedono all'applicazione.
  • Se si accede all'applicazione direttamente dal server, verificare che la casella di controllo Verifica protezione Loopback sia deselezionata.Per ulteriori informazioni su come verificare che il controllo di loopback Ŕ disattivato, fare clic sul numero dell'articolo della Microsoft Knowledge Base riportato di seguito:
    896861Errore 401.1 quando si esplora un sito Web che utilizza l'autenticazione integrata ed Ŕ ospitato su IIS 5.1 o IIS 6
  • Verificare che il client Ŕ un client Kerberos abilitato. Inoltre, verificare che l'impostazione Attiva l'autenticazione integrata Windows Ŕ abilitata in Internet Explorer. A tale scopo, fare clic su Opzioni Internet dal menu Strumenti, fare clic sulla scheda Avanzate e assicurarsi che sia selezionata la casella di controllo Abilita autenticazione integrata di Windows.
  • Verificare che tutti i computer che fanno parte del processo di Kerberos sono la risoluzione dei nomi coerente e sono connessi da trust Kerberos. Ad esempio, verificare che i computer coinvolti nel processo di Kerberos sono dello stesso insieme di strutture o fanno parte di un trust Kerberos tra insiemi di strutture.
  • Verificare che la dimensione del token non superi il valore impostato per la proprietÓ MaxTokenSize. Inoltre, verificare che la dimensione della richiesta non superi il valore impostato per la proprietÓ MaxFieldLength. Questi valori potrebbero essere superati se gli utenti che fanno parte del processo di Kerberos sono membri di molti gruppi.
    920862Messaggio di errore quando un utente di Outlook Web Access tenta di accedere a una cassetta postale in Exchange Server 2003: ? HTTP 400 richiesta non valida (intestazione della richiesta troppo lungo) ?
  • Verificare che siano attivati i criteri di protezione necessaria quando si configurano gli account di dominio per i pool di applicazioni. Per effettuare questa operazione, verificare che l'account di dominio sia membro dei seguenti criteri di protezione locali su computer che esegue IIS:
    • Regolazione limite risorse memoria per un processo
    • Accesso come servizio
    • Sostituzione di token a livello di processo
  • Verificare che l'autenticazione Kerberos funziona correttamente su UDP. Per impostazione predefinita, l'autenticazione Kerberos utilizza UDP. Tuttavia, la perdita di pacchetti UDP pu˛ causare l'autenticazione Kerberos esito negativo. Quando si verifica questo problema, Ŕ possibile forzare l'autenticazione Kerberos a utilizzare TCP. Per ulteriori informazioni su come forzare l'autenticazione Kerberos a utilizzare TCP, fare clic sul numero dell'articolo della Microsoft Knowledge Base riportato di seguito:
    244474Come forzare Kerberos a utilizzare TCP anzichÚ UDP in Windows Server 2003, Windows XP e Windows 2000
  • Verificare che l'ora dell'autenticatore non differisce da pi¨ di cinque minuti dal timestamp del server. Per ulteriori informazioni su come risolvere le differenze di tipo timestamp, fare clic sul numero dell'articolo della Microsoft Knowledge Base riportato di seguito:
    232386Impossibile accedere se data e ora non sono sincronizzati
  • Verificare che la porta TCP/UDP 88 non sia bloccata da un firewall o un router. Per impostazione predefinita, l'autenticazione Kerberos utilizza la porta TCP/UDP 88.
  • Verificare che l'ambiente in modalitÓ dominio sia almeno Microsoft Windows 2000 ambienti in modalitÓ nativa. Per ulteriori informazioni su come determinare la modalitÓ di dominio, visitare il seguente sito Web Microsoft:
    http://technet2.microsoft.com/windowsserver/en/library/11b2d3d3-980c-4b64-9ed3-51778f1fe5771033.mspx?mfr=true
  • Sul client, verificare che sia stato aggiunto l'URL per l'applicazione Web per siti intranet locali. Per ulteriori informazioni sull'aggiunta di un URL intranet locale, fare clic sul numero dell'articolo della Microsoft Knowledge Base riportato di seguito:
    303650Sito Intranet viene identificato come un sito Internet quando si utilizza un nome FQDN o un indirizzo IP
  • Verificare che ogni periferica ethernet gigabit utilizza la versione pi¨ recente del driver. Per ulteriori informazioni sui problemi che possono verificarsi quando i driver per periferiche gigabit Ethernet non sono aggiornati, fare clic sul numero dell'articolo della Microsoft Knowledge Base riportato di seguito:
    326152Impossibile connettersi al controller di dominio e non Ŕ possibile applicare i criteri di gruppo con periferiche Gigabit Ethernet

Riferimenti

Per ulteriori informazioni su come utilizzare l'autenticazione Kerberos con i siti Web con bilanciamento del carico, visitare il seguente sito Web Microsoft:
http://technet.microsoft.com/en-us/library/cc757299.aspx
Per ulteriori informazioni sui problemi che possono verificarsi quando si utilizza l'autenticazione Kerberos con i server proxy, fare clic sul numero dell'articolo della Microsoft Knowledge Base riportato di seguito:
321728Internet Explorer non supporta l'autenticazione Kerberos con i server proxy
Per ulteriori informazioni su come configurare IIS per supportare il protocollo Kerberos e il protocollo NTLM per l'autenticazione di rete, fare clic sul numero dell'articolo della Microsoft Knowledge Base riportato di seguito:
215383Come configurare IIS per supportare il protocollo Kerberos e il protocollo NTLM per l'autenticazione di rete
Per ulteriori informazioni su come configurare un server virtuale Windows SharePoint Services per l'utilizzo dell'autenticazione Kerberos e come passare dall'autenticazione Kerberos l'autenticazione NTLM, fare clic sul numero dell'articolo della Microsoft Knowledge Base riportato di seguito:
832769Come configurare un server virtuale Windows SharePoint Services per l'utilizzo dell'autenticazione Kerberos e come passare dall'autenticazione Kerberos l'autenticazione NTLM
Per ulteriori informazioni sui problemi che possono verificarsi quando si utilizza il protocollo di autenticazione Kerberos per connettersi a un server Web che utilizza una porta non standard in Windows XP o Windows Server 2003, fare clic sul numero dell'articolo della Microsoft Knowledge Base riportato di seguito:
908209Internet Explorer 6 non Ŕ possibile utilizzare il protocollo di autenticazione Kerberos per connettersi a un server Web che utilizza una porta non standard in Windows XP o Windows Server 2003

ProprietÓ

Identificativo articolo: 929650 - Ultima modifica: mercoledý 12 maggio 2010 - Revisione: 5.0
Le informazioni in questo articolo si applicano a:
  • Microsoft Internet Information Services 7.5
  • Microsoft Internet Information Services 7.0
  • Microsoft Internet Information Services 6.0
Chiavi:á
kbmt kbinfo kbhowto KB929650 KbMtit
Traduzione automatica articoli
Il presente articolo Ŕ stato tradotto tramite il software di traduzione automatica di Microsoft e non da una persona. Microsoft offre sia articoli tradotti da persone fisiche sia articoli tradotti automaticamente da un software, in modo da rendere disponibili tutti gli articoli presenti nella nostra Knowledge Base nella lingua madre dell?utente. Tuttavia, un articolo tradotto in modo automatico non Ŕ sempre perfetto. Potrebbe contenere errori di sintassi, di grammatica o di utilizzo dei vocaboli, pi¨ o meno allo stesso modo di come una persona straniera potrebbe commettere degli errori parlando una lingua che non Ŕ la sua. Microsoft non Ŕ responsabile di alcuna imprecisione, errore o danno cagionato da qualsiasi traduzione non corretta dei contenuti o dell?utilizzo degli stessi fatto dai propri clienti. Microsoft, inoltre, aggiorna frequentemente il software di traduzione automatica.
Clicca qui per visualizzare la versione originale in inglese dell?articolo: 929650
LE INFORMAZIONI CONTENUTE NELLA MICROSOFT KNOWLEDGE BASE SONO FORNITE SENZA GARANZIA DI ALCUN TIPO, IMPLICITA OD ESPLICITA, COMPRESA QUELLA RIGUARDO ALLA COMMERCIALIZZAZIONE E/O COMPATIBILITA' IN IMPIEGHI PARTICOLARI. L'UTENTE SI ASSUME L'INTERA RESPONSABILITA' PER L'UTILIZZO DI QUESTE INFORMAZIONI. IN NESSUN CASO MICROSOFT CORPORATION E I SUOI FORNITORI SI RENDONO RESPONSABILI PER DANNI DIRETTI, INDIRETTI O ACCIDENTALI CHE POSSANO PROVOCARE PERDITA DI DENARO O DI DATI, ANCHE SE MICROSOFT O I SUOI FORNITORI FOSSERO STATI AVVISATI. IL DOCUMENTO PUO' ESSERE COPIATO E DISTRIBUITO ALLE SEGUENTI CONDIZIONI: 1) IL TESTO DEVE ESSERE COPIATO INTEGRALMENTE E TUTTE LE PAGINE DEVONO ESSERE INCLUSE. 2) I PROGRAMMI SE PRESENTI, DEVONO ESSERE COPIATI SENZA MODIFICHE, 3) IL DOCUMENTO DEVE ESSERE DISTRIBUITO INTERAMENTE IN OGNI SUA PARTE. 4) IL DOCUMENTO NON PUO' ESSERE DISTRIBUITO A SCOPO DI LUCRO.

Invia suggerimenti

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com