Comment utiliser SPN lorsque vous configurer les applications Web hébergées sur les Internet Services

Traductions disponibles Traductions disponibles
Numéro d'article: 929650 - Voir les produits auxquels s'applique cet article
Agrandir tout | Réduire tout

Sommaire

Résumé

Cet article décrit les noms principaux de service (SPN). Cet article décrit également comment utiliser SPN lorsque vous configurer les applications Web qui sont hébergées sur Microsoft Internet Information Services (IIS). Cet article décrit également le processus de négociation dans l'authentification intégrée de Windows. Le sélectionnez négocier de clients du vous permet de sécurité en-tête entre l'authentification Kerberos et l'authentification NTLM.

En outre, cet article décrit des scénarios courants qui nécessitent un SPN activer l'authentification Kerberos. La dernière section décrit des situations dans lesquelles l'authentification Kerberos peut échouer. La dernière section fournit également des étapes de dépannage.

INTRODUCTION

Important Les rubriques abordées dans cet article s'appliquent pour les Services Internet (IIS) 6.0. Les rubriques s'appliquent également à IIS 7.0 et 7.5 si l'authentification de mode noyau est désactivée en affectant paramètre de configuration useKernelMode la valeur false.
Cet article décrit étape par étape comment utiliser noms principaux de service (SPN) lorsque vous configurez des applications Web hébergées sur passes IIS.IIS l'en-tête de sécurité Negotiate lorsque l'authentification intégrée de Windows est utilisée pour authentifier les demandes du client. Le sélectionnez négocier de clients du vous permet de sécurité en-tête entre l'authentification Kerberos et l'authentification NTLM. Le processus de négociation sélectionne l'authentification Kerberos, sauf si une des conditions suivantes est vraie :
  • Un des systèmes est impliqué dans l'authentification ne peut pas utiliser l'authentification Kerberos.
  • L'application appelante ne fournit pas de suffisamment d'informations à utiliser l'authentification Kerberos.
Pour activer le processus de Negotiate sélectionner le protocole Kerberos pour l'authentification réseau, l'application cliente doit fournir un SPN, un nom d'utilisateur principal (UPN), un nom de compte NetBIOS comme nom de cible. Si l'application cliente ne fournit pas un nom de cible, le processus de négociation ne peut pas utiliser le protocole Kerberos. Si le processus de négociation ne peut pas utiliser le protocole Kerberos, le processus de négociation permet de sélectionner le protocole NTLM.

Plus d'informations

Concepts

Définition d'un nom principal de service

Un SPN est le nom par lequel un client identifie de manière unique une instance d'un service. Si vous installez plusieurs instances d'un service sur les ordinateurs dans une forêt, chaque instance de service doit avoir son propre nom principal de service. Une instance de service particulier peut avoir plusieurs noms principaux de service s'il y a plusieurs noms que les clients peuvent utiliser pour l'authentification. Par exemple, un nom principal de service inclut toujours le nom de l'ordinateur ordinateur hôte sur lequel l'instance de service est en cours d'exécution. Par conséquent, une instance de service peut-être inscrire un nom principal de service pour chaque nom ou l'alias de son ordinateur hôte.

La classe de service HTTP

La classe de service HTTP diffère du protocole HTTP. Le protocole HTTP et le protocole HTTPS utilisent la classe de service HTTP. La classe de service est la chaîne qui identifie la classe générale du service. Noms de classe de service connu incluent «www» pour un service Web et «ldap» pour un service d'annuaire. En règle générale, le nom de classe de service peut être n'importe quelle chaîne unique à la classe de service. Sachez que la syntaxe de nom principal de service utilise une barre oblique (/) pour séparer les éléments. Par conséquent, le caractère barre oblique (/) ne peut pas apparaître dans un nom de classe de service.

Classe de service le service HOST et HTTP

Le service HOST représente l'ordinateur ordinateur hôte. Le protocole Kerberos utilise le SPN HOST pour accéder à l'ordinateur ordinateur hôte. Le protocole Kerberos utilise la clé à long terme sur l'ordinateur ordinateur hôte pour créer un ticket de service.

La classe de service HTTP est un des services intégrés qui agissent comme un alias pour le SPN HOST. Le SPN HOST est mappé sur le compte d'ordinateur ordinateur hôte. Par conséquent, lorsque vous utilisez la classe de service HTTP par défaut, le protocole Kerberos utilise le compte d'ordinateur en tant que compte de service pour demander un ticket de service.

Scénarios courants

Cette section décrit des scénarios nécessitant un nom principal de service. En outre, cette section montre comment déterminer le SPN pour définir pour chaque scénario. Les termes suivants sont utilisés dans ces scénarios :
Réduire ce tableauAgrandir ce tableau
IIS6server1Le nom ordinateur hôte de l'ordinateur qui exécute IIS
mon_domaineLe domaine auquel est joint l'ordinateur IIS6server1
appPool1Le compte d'utilisateur dans le domaine mon_domaine qui est utilisé pour l'identité du pool d'applications
appPool2Le compte d'utilisateur dans le domaine mon_domaine utilisé pour la deuxième identité du pool d'applications
www.test.comLe premier en-tête ordinateur hôte pour un site Web
www.Test2.comLe second en-tête ordinateur hôte pour un site Web
www.test3.comL'en-tête ordinateur hôte tiers pour un site Web
www.myIIScluster.comLe nom de domaine complet d'un cluster d'ordinateurs qui exécutent IIS
www.myEXCHcluster.comLe nom de domaine complet d'un cluster d'ordinateurs qui exécutent Microsoft Exchange sur IIS

L'outil Setspn.exe

L'outil de Setspn.exe permet de lire, modifier et supprimer la propriété de répertoire SPN pour un compte de service Active Directory. SPN sont utilisés pour localiser un nom principal cible pour l'exécution d'un service. L'outil de SetSpn.exe permet également afficher les noms principaux de service en cours, réinitialiser les noms principaux de service par défaut d'un compte et ajouter ou supprimer les SPN supplémentaires.

Pour obtenir l'outil Setspn.exe pour Microsoft Windows Server 2003, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la base de connaissances Microsoft :
970536Mise à jour d'outil de prise en charge Setspn.exe pour Windows Server 2003

Scénario 1: Accéder à une application IIS lorsque l'identité du pool d'applications ont été modifiée

Lorsqu'une application IIS s'exécute sous un compte d'utilisateur de domaine plutôt que sous le compte de service réseau par défaut, vous devez définir le SPN pour le service HTTP sous le compte de domaine. Dans ce scénario, vous accédez à l'application IIS à l'aide du nom NetBIOS du serveur qui exécute IIS ou le nom de domaine complet du serveur qui exécute IIS.

Pour accéder à l'application IIS à l'aide du nom NetBIOS, utilisez la commande suivante, où NETBIOS_NAME_OF_IIS_SERVER est le nom NetBIOS du serveur qui exécute IIS :
Setspn ? s HTTP / NETBIOS_NAME_OF_IIS_SERVER domain\username
Par exemple, la commande peut ressembler à la commande suivante :
Setspn ? s HTTP/iis6server1 mydomain\appPool1
Accéder à l'application IIS en utilisant le nom de domaine complet, utilisez la commande suivante, où FQDN_OF_IIS_SERVER est le nom de domaine complet du serveur qui exécute IIS :
Setspn ? s HTTP / FQDN_OF_IIS_SERVER domain\username
Par exemple, la commande peut ressembler à la commande suivante :
Setspn ? s HTTP/iis6server1.mydomain.com mydomain\appPool1

Scénario 2: Accéder à une application Web à l'aide d'un en-tête ordinateur hôte

Lorsque vous accédez à une application Web à l'aide d'un en-tête ordinateur hôte, vous devez définir un SPN pour le service HTTP.

Lorsque vous exécutez l'application Web sous un compte par défaut comme compte de service réseau, le compte service local ou le compte système local, vous pouvez utiliser la commande suivante :
Setspn ? a HTTP / HOST_HEADER NETBIOS_NAME_OF_IIS_SERVER
Dans cette commande, HOST_HEADER est l'en-tête ordinateur hôte que vous tapez dans une fenêtre de navigateur pour accéder à l'application et NETBIOS_NAME_OF_IIS_SERVER est le nom NetBIOS du serveur qui exécute IIS.

Par exemple, la commande pour l'application peut ressembler à la commande suivante :
Setspn ? a HTTP/www.test.com iis6server1
Si vous exécutez l'application sous un compte de domaine, vous pouvez utiliser la commande suivante :
Setspn ? a HTTP / HOSTHEADER_OR_DNS_ALIAS domain\username
Dans cette commande, HOSTHEADER_OR_DNS_ALIAS est l'en-tête d'ordinateur hôte ou l'alias DNS que vous utilisez pour accéder à l'application Web.

Par exemple, la commande pour l'application peut ressembler à une des commandes suivantes :
  • Setspn ? a HTTP/www.test.com mydomain\appPool1
  • Setspn ? a HTTP/www.test3.com mydomain\appPool2

Scénario 3: Accéder à une application IIS dans un environnement en clusters ou à charge équilibrée

Lorsque vous exécutez IIS dans un environnement en clusters ou dans un environnement à équilibrage de charge, vous accédez à applications en utilisant le nom de cluster au lieu de à l'aide d'un nom de n?ud. Ce scénario inclut équilibrage de charge de réseau. Dans la technologie de cluster, un n?ud fait référence à un ordinateur qui est un membre du cluster. Pour utiliser Kerberos comme protocole d'authentification dans ce scénario, l'identité du pool d'applications sur chaque n?ud IIS doit être configurée pour utiliser le même compte d'utilisateur de domaine. Pour configurer chaque n?ud IIS pour utiliser le même compte d'utilisateur de domaine, utilisez la commande suivante :
Setspn ? a HTTP / CLUSTER_NAME DOMAINE\nom_utilisateur
Par exemple, la commande peut ressembler à une des commandes suivantes :
  • Setspn ? a HTTP/www.myIISCluster.com mydomain\appPool1
  • Setspn ? a HTTP/www.myEXCHCluster.com mydomain\appPool2

Scénario 4: Use SQL Server pour accéder à une application

Les noms principaux de service sur le serveur dorsal peut-être être vérifiée si l'application IIS Web requiert l'accès à un ordinateur principal exécutant SQL Server. L'application Web peut fonctionne pas correctement si les noms principaux de service requis ne sont pas configurés correctement.

Si l'ordinateur principal exécutant SQL Server exécute sous le compte système local, le MSSQLSvc / numéro de port FQDN_OF_SQL_SERVER:port doit être disponible pour le nom de l'ordinateur. Utilisez la commande suivante pour déterminer les SPN de l'ordinateur qui exécute SQL Server :
Setspn ? l SQL_SERVER_COMPUTER_NAME
Utilisez la commande suivante pour définir le SPN pour le nom de l'ordinateur qui exécute SQL Server :
Setspn ? a MSSQLSvc / FQDN_OF_SQLSERVER:port SQLSERVER_COMPUTER_NAME
Si l'ordinateur principal qui exécute SQL Server fonctionne sous un compte de domaine, le MSSQLSvc / numéro de port FQDN_OF_SQL_SERVER:port doit être disponible pour le compte de domaine. Utilisez la commande suivante pour déterminer les SPN pour le compte de domaine :
Setspn ? l domaine\nom_utilisateur
Utilisez une des commandes suivantes pour définir le SPN pour le nom de l'ordinateur qui exécute SQL Server :
  • Setspn ? a MSSQLSvc / FQDN_OF_SQLSERVER:portFQDN_OF_SQLSERVER
  • Setspn ? a MSSQLSvc / FQDN_OF_SQLSERVER:portdomain\username

Le script d'assistance SPN

Vous pouvez utiliser l'exemple de script suivant pour rechercher les noms principaux de service pour une application IIS. Vous pouvez également utiliser ce script pour trouver le SPN en double. Pour utiliser ce script, procédez comme suit :
  1. Cliquez sur Démarrer, cliquez sur exécuter, tapez Notepad et cliquez sur 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. Enregistrez le fichier sous Spnhelper.vbs.
  4. À l'invite de commandes, exécutez le fichier Spnhelper.vbs à l'aide de l'option de ligne de commande appropriée.

    Remarque Pour afficher les options de ligne de commande pour le fichier Spnhelper.vbs, tapez Spnhelper.vbs/help à l'invite de commande et appuyez sur ENTRÉE.

Considérations supplémentaires

L'authentification Kerberos peut échouer lorsque les noms principaux de service requis sont définies pour les comptes d'ordinateurs ou pour les comptes de domaine. Si l'authentification Kerberos échoue de manière inattendue, procédez comme suit :
  • Vérifiez qu'Aucun SPN en double n'existent dans le catalogue global pour un nom principal de service.

    Par exemple, si le SPN HTTP/www.test.com est défini pour le compte myDomain\appPool1 et pour le compte myDomain\appPool2, un SPN en double existe même si les noms principaux de service sont définies pour des comptes différents. En outre, si le SPN HTTP/iis6server1.mydomain.com est définie pour le compte myDomain\appPool1 et le SPN HTTP/iis6server1.mydomain.com est également associé au compte d'ordinateur pour le serveur, vous avez également un SPN en double. Vous pouvez avoir un seul hôte SPN et un nom principal de service HTTP. Le SPN HTTP explicite remplace implicite celui qui est couvert par l'entrée hôte. Toutefois, si l'URL que les types d'utilisateur est associé à plusieurs comptes d'utilisateur ou à plusieurs comptes d'ordinateur, vous avez un SPN en double.
  • Vérifier que les noms principaux de service ont été répliqués vers d'autres contrôleurs de domaine.

    Problèmes de réplication entre les contrôleurs de domaine peuvent empêcher les noms principaux de service de réplication vers les autres contrôleurs de domaine. Lorsque les noms principaux de service ne sont pas répliqués sur les autres contrôleurs de domaine, l'application peut ne pas fonctionne de certains ordinateurs client. Par exemple, si le SPN HTTP/www.test.com est défini pour le compte myDomain\appPool1 sur un contrôleur de domaine, le SPN HTTP/www.test.com peut est introuvable pour le compte myDomain\appPool1 sur un deuxième contrôleur de domaine si le nom principal de service n'a pas été répliqué au second contrôleur de domaine.

    Remarque Par défaut, la réplication prend 15 minutes.
  • Vérifiez que le serveur Web est configuré pour prendre en charge l'authentification Kerberos. Pour cela, vérifiez que le paramètre de la clé NTAuthenticationProviders dans la métabase IIS n'a pas été modifié à NTLM. Le paramètre par défaut est Negotiate, NTLM.
  • Vérifiez que le serveur ou le service est de déléguer les informations d'identification est approuvé pour la délégation.
  • Vérifiez que le compte le service sous lequel s'exécute est approuvé pour la délégation.
  • Dans Active Directory, vérifiez que la case à cocher compte est sensible et ne peut pas être délégué est désactivée pour les utilisateurs qui accèdent à l'application.
  • Si vous accédez à l'application directement à partir du serveur, vérifiez que la case à Cocher de sécurité de bouclage de l'est désactivée.Pour plus d'informations sur la façon de vérifier que le contrôle de bouclage est désactivé, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la base de connaissances Microsoft :
    896861Vous recevez une erreur 401.1 lorsque vous visitez un site Web qui utilise l'authentification intégrée et qui est hébergé sur IIS 5.1 ou IIS 6
  • Vérifiez que le client est un client Kerberos. Vérifiez également que le paramètre Activer l'authentification intégrée Windows est activé dans Internet Explorer. Pour ce faire, cliquez sur Internet Options dans le menu Outils, cliquez sur l'onglet Avancé et puis assurez-vous que la case à cocher Authentification intégrée Windows activer est sélectionnée.
  • Vérifiez que tous les ordinateurs qui font partie du processus de Kerberos de résolution de noms cohérente et sont connectés par l'approbation Kerberos. Par exemple, vérifier que les ordinateurs qui sont impliqués dans le processus de Kerberos sont dans la même forêt ou font partie d'une approbation Kerberos entre forêts.
  • Vérifiez que la taille de jeton ne dépasse pas la valeur définie pour la propriété MaxTokenSize. Vérifiez également que la taille de la demande ne dépasse pas la valeur définie pour la propriété MaxFieldLength. Ces valeurs peuvent être dépassées si les utilisateurs qui font partie du processus de Kerberos sont des membres de plusieurs groupes.
    920862Message d'erreur lorsqu'un utilisateur Outlook Web Access essaie d'accéder à une boîte aux lettres dans Exchange Server 2003: ? HTTP 400 Requête incorrecte (en-tête de requête trop longue) ?
  • Vérifiez que les stratégies de sécurité requis sont activés lorsque vous configurez des comptes de domaine pour les pools d'applications. Pour ce faire, vérifiez que le compte de domaine est un membre des stratégies de sécurité locale suivantes sur l'ordinateur qui exécute IIS :
    • Régler les quotas de mémoire pour un processus
    • Ouverture de session en tant que service
    • Remplacer un jeton de niveau processus
  • Vérifiez que l'authentification Kerberos fonctionne correctement sur UDP. Par défaut, l'authentification Kerberos utilise UDP. Toutefois, la perte de paquets UDP peut entraîner l'authentification Kerberos échoue. Lorsque ce problème se produit, vous pouvez forcer l'authentification Kerberos à utiliser le protocole TCP. Pour plus d'informations sur la façon de forcer l'authentification Kerberos à utiliser le protocole TCP, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la base de connaissances Microsoft :
    244474Comment faire pour forcer Kerberos à utiliser TCP au lieu d'UDP dans Windows Server 2003, Windows XP et Windows 2000
  • Vérifiez que le datage de l'authentificateur ne diffère pas de plus de cinq minutes à partir de la marque horaire du serveur. Pour plus d'informations sur la façon de résoudre une différence d'estampille, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la base de connaissances Microsoft :
    232386Ne peuvent pas ouvrir de session si la date et heure ne sont pas synchronisées.
  • Vérifiez que le port TCP/UDP 88 n'est pas bloqué par un pare-feu ou un routeur. Par défaut, l'authentification Kerberos utilise le port TCP/UDP 88.
  • Vérifiez que l'environnement en mode de domaine est au moins un environnement en mode natif Microsoft Windows 2000. Pour plus d'informations sur la façon de déterminer le mode de domaine, reportez-vous au site Web de Microsoft à l'adresse suivante :
    http://technet2.microsoft.com/windowsserver/en/library/11b2d3d3-980c-4b64-9ed3-51778f1fe5771033.mspx?mfr=true
  • Sur le client, vérifiez que l'URL de l'application Web est ajouté aux sites intranet local. Pour plus d'informations sur la façon d'ajouter une URL à l'intranet local, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la base de connaissances Microsoft :
    303650Site intranet est identifié comme un site Internet lorsque vous utilisez un nom de domaine complet ou une adresse IP
  • Vérifiez que chaque périphérique ethernet gigabit utilise la dernière version de pilote. Pour plus d'informations sur les problèmes qui peuvent se produire lorsque les pilotes de périphériques de gigabit Ethernet sont obsolètes, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la base de connaissances Microsoft :
    326152Impossible de se connecter au contrôleur de domaine et ne peut pas appliquer la stratégie de groupe avec des périphériques Gigabit Ethernet

Références

Pour plus d'informations sur la façon d'utiliser l'authentification Kerberos avec équilibrage de charge des sites Web, reportez-vous au site Web de Microsoft à l'adresse suivante :
http://technet.microsoft.com/en-us/library/cc757299.aspx
Pour plus d'informations sur les problèmes qui peuvent se produire lorsque vous utilisez l'authentification Kerberos avec des serveurs proxy, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la base de connaissances Microsoft :
321728Internet Explorer ne prend pas en charge l'authentification Kerberos avec des serveurs proxy
Pour plus d'informations sur la façon de configurer IIS pour prendre en charge le protocole Kerberos et le protocole NTLM pour l'authentification réseau, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la base de connaissances Microsoft :
215383Comment faire pour configurer IIS pour prendre en charge le protocole Kerberos et le protocole NTLM pour l'authentification réseau
Pour plus d'informations sur la façon de configurer un serveur virtuel Windows SharePoint Services pour utiliser l'authentification de Kerberos et passage de l'authentification Kerberos à l'authentification NTLM, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la base de connaissances Microsoft :
832769Comment configurer un serveur virtuel Windows SharePoint Services pour utiliser l'authentification Kerberos et passage de l'authentification Kerberos à l'authentification NTLM
Pour plus d'informations sur les problèmes qui peuvent se produire lorsque vous utilisez protocole d'authentification Kerberos pour vous connecter à un serveur Web qui utilise un port non standard sur Windows XP ou Windows Server 2003, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la base de connaissances Microsoft :
908209Internet Explorer 6 ne pouvez pas utiliser le protocole d'authentification Kerberos pour vous connecter à un serveur Web qui utilise un port non standard sur Windows XP ou Windows Server 2003

Propriétés

Numéro d'article: 929650 - Dernière mise à jour: mercredi 12 mai 2010 - Version: 5.0
Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • Microsoft Internet Information Services 7.5
  • Microsoft Internet Information Services 7.0
  • Microsoft Internet Information Services 6.0
Mots-clés : 
kbmt kbinfo kbhowto KB929650 KbMtfr
Traduction automatique
IMPORTANT : Cet article est issu du système de traduction automatique mis au point par Microsoft (http://support.microsoft.com/gp/mtdetails). Un certain nombre d?articles obtenus par traduction automatique sont en effet mis à votre disposition en complément des articles traduits en langue française par des traducteurs professionnels. Cela vous permet d?avoir accès, dans votre propre langue, à l?ensemble des articles de la base de connaissances rédigés originellement en langue anglaise. Les articles traduits automatiquement ne sont pas toujours parfaits et peuvent comporter des erreurs de vocabulaire, de syntaxe ou de grammaire (probablement semblables aux erreurs que ferait une personne étrangère s?exprimant dans votre langue !). Néanmoins, mis à part ces imperfections, ces articles devraient suffire à vous orienter et à vous aider à résoudre votre problème. Microsoft s?efforce aussi continuellement de faire évoluer son système de traduction automatique.
La version anglaise de cet article est la suivante: 929650
L'INFORMATION CONTENUE DANS CE DOCUMENT EST FOURNIE PAR MICROSOFT SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. L'UTILISATEUR ASSUME LE RISQUE DE L'UTILISATION DU CONTENU DE CE DOCUMENT. CE DOCUMENT NE PEUT ETRE REVENDU OU CEDE EN ECHANGE D'UN QUELCONQUE PROFIT.

Envoyer des commentaires

 

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