Vous êtes actuellement hors ligne, en attente de reconnexion à Internet.

Comment utiliser SPN lorsque vous configurez des applications Web qui sont hébergées sur Internet Information Services

IMPORTANT : Cet article est issu d'une traduction automatique réalisée par un logiciel Microsoft et non par un traducteur professionnel. Cette traduction automatique a pu aussi être révisée par la communauté Microsoft grâce à la technologie Community Translation Framework (CTF). Pour en savoir plus sur cette technologie, veuillez consulter la page http://support.microsoft.com/gp/machine-translation-corrections/fr. Microsoft vous propose en effet des articles traduits par des professionnels, des articles issus de traductions automatiques et des articles issus de traductions automatiques révisées par la communauté Microsoft, de manière à ce que vous ayez accès à tous les articles de notre Base de connaissances dans votre langue. Il est important de noter que les articles issus de la traduction automatique, y compris ceux révisés par la communauté Microsoft, peuvent contenir des erreurs de vocabulaire, de syntaxe ou de grammaire. Microsoft ne pourra être tenu responsable des imprécisions, erreurs, ainsi que de tout dommage résultant d’une traduction incorrecte du contenu ou de son utilisation par les clients.

La version anglaise de cet article est la suivante: 929650
Résumé
Cet article décrit les noms principaux de service (SPN). Cet article décrit également comment utiliser SPN lorsque vous configurez des applications Web qui sont hébergées sur Microsoft Internet Information Services (IIS). Cet article décrit également le processus de négociation de l'authentification intégrée de Windows. Négocier sécurité en-tête permet de clients select entre l'authentification Kerberos et l'authentification NTLM.

En outre, cet article décrit les scénarios courants qui nécessitent un nom principal de service 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 qui sont abordées dans cet article s'appliquent à Internet Information Services (IIS) 6.0. Les rubriques s'appliquent également à IIS 7.0 et 7.5 si l'authentification du Mode noyau est désactivée en définissant le paramètre de configuration useKernelMode Pour False.
Cet article étape par étape décrit comment utiliser les noms principaux de service (SPN) lorsque vous configurez des applications Web qui sont hébergées sur IIS.IIS transmet l'en-tête de sécurité Negotiate lorsque l'authentification intégrée Windows est utilisée pour authentifier les demandes du client. Négocier sécurité en-tête permet de clients select 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 remplie :
  • Un des systèmes impliqués dans l'authentification ne peut pas utiliser l'authentification Kerberos.
  • L'application appelante ne fournit pas suffisamment d'informations pour utiliser l'authentification Kerberos.
Pour activer le processus de négociation sélectionner le protocole Kerberos pour l'authentification réseau, l'application cliente doit fournir un SPN, un nom d'utilisateur principal (UPN) ou un nom de compte NetBIOS comme nom de la 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 sélectionne le protocole NTLM.
Plus d'informations

Concepts

Définition d'un SPN

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 hôte sur lequel s'exécute l'instance de service. Par conséquent, une instance de service peut-être inscrire un nom principal de service pour chaque nom ou l'alias de l'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 de service. Les noms de classe de service bien connus 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 qui est unique à la classe de service. Sachez que la syntaxe de nom principal de service utilise un caractère de barre oblique (/) pour séparer les éléments. Par conséquent, le caractère de barre oblique (/) ne peut pas apparaître dans un nom de classe de service.

Classe de service le service hôte et le protocole HTTP

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

La classe de service HTTP est un des services intégrés qui agissent en tant qu'alias pour l'hôte de nom principal de service. Le SPN hôte est mappé sur le compte de l'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 comme compte de service pour demander un ticket de service.

Scénarios courants

Cette section décrit des scénarios qui peuvent nécessiter un SPN. En outre, cette section montre comment déterminer le nom principal de service pour chaque scénario. Les termes suivants sont utilisés dans ces scénarios :
IIS6server1Le nom d'hôte de l'ordinateur qui exécute IIS
mondomaineLe domaine auquel est joint l'ordinateur IIS6server1
appPool1Le compte d'utilisateur dans le domaine mondomaine qui est utilisé pour l'identité du pool d'applications
appPool2Le compte d'utilisateur dans le domaine mondomaine qui est utilisé pour la deuxième identité de pool d'applications
www.test.comLe premier en-tête d'hôte pour un site Web
www.Test2.comLe second en-tête d'hôte pour un site Web
www.test3.comLe troisième en-tête d'hôte pour un site Web
www.myIIScluster.comLe nom de domaine complet d'un cluster d'ordinateurs exécutant les services 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 Setspn.exe vous permet de lire, de modifier et de supprimer la propriété d'annuaire SPN pour un compte de service Active Directory. Noms principaux de service sont utilisés pour localiser un nom principal cible pour l'exécution d'un service. L'outil SetSpn.exe vous permet également d'afficher les SPN actuels, réinitialiser les SPN du compte par défaut et ajouter ou supprimer des noms SPN.

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 :
970536 Setspn.exe support outil mise à jour pour Windows Server 2003

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

Lorsqu'une application IIS s'exécute sous un compte d'utilisateur de domaine et non sous le compte de service réseau par défaut, vous devez définir le nom principal de service pour le service HTTP sous le compte de domaine. Dans ce scénario, vous accéder à l'application IIS en utilisant le 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 domaine\nom d'utilisateur
Par exemple, la commande peut ressembler à la commande suivante :
Setspn – S HTTP/iis6server1 mydomain\appPool1
Pour accéder à l'application IIS à l'aide du 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 domaine\nom d'utilisateur
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 d'hôte

Lorsque vous accédez à une application Web à l'aide d'un en-tête d'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, par exemple le compte service réseau, le compte service local ou le compte système local, vous pouvez utiliser la commande suivante :
Setspn – un HTTP /HOST_HEADER NETBIOS_NAME_OF_IIS_SERVER
Dans cette commande, HOST_HEADER est l'en-tête d'hôte que vous tapez dans un navigateur fenêtre 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 de 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 – un HTTP /HOSTHEADER_OR_DNS_ALIAS domaine\nom d'utilisateur
Dans cette commande, HOSTHEADER_OR_DNS_ALIAS est l'en-tête d'hôte ou l'alias DNS que vous utilisez pour accéder à l'application Web.

Par exemple, la commande de 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 avec équilibrage de charge

Lorsque vous exécutez IIS dans un environnement en cluster ou dans un environnement à charge équilibrée, vous accéder aux applications en utilisant le nom de cluster et non à l'aide d'un nom de nœud. Ce scénario inclut l'équilibrage de charge réseau. Dans la technologie de cluster, un nœud fait référence à un ordinateur qui est membre du cluster. Pour utiliser Kerberos comme protocole d'authentification dans ce scénario, l'identité du pool d'application 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 – un HTTP /NOM_CLUSTER domaine\nom d'utilisateur
Par exemple, la commande peut ressembler à une des commandes suivantes :
  • Setspn – mydomain\appPool1 HTTP/www.myIISCluster.com
  • Setspn – HTTP/www.myEXCHCluster.com mydomain\appPool2

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

Les noms principaux de service sur le serveur principal peuvent avoir à vérifier si l'application Web IIS requiert l'accès à un ordinateur principal exécutant SQL Server. L'application Web ne peut pas fonctionner correctement si les noms principaux de service requis sont mal configurés.

Si l'ordinateur principal exécutant SQL Server s'exécute sous le compte système local, le MSSQLSvc /FQDN_OF_SQL_SERVER:port numéro de port doit être disponible pour le nom de l'ordinateur. Utilisez la commande suivante afin de déterminer les SPN pour l'ordinateur qui exécute SQL Server :
Setspn – L SQL_SERVER_COMPUTER_NAME
Pour configurer le SPN pour le nom de l'ordinateur qui exécute SQL Server, utilisez la commande suivante :
Setspn – MSSQLSvc /FQDN_OF_SQLSERVER:port SQLSERVER_COMPUTER_NAME
Si l'ordinateur principal exécutant SQL Server s'exécute sous un compte de domaine, le MSSQLSvc /FQDN_OF_SQL_SERVER:port numéro de port doit être disponible pour le compte de domaine. Pour déterminer les SPN pour le compte de domaine, utilisez la commande suivante :
Setspn – L DOMAINE\nom_utilisateur
Pour configurer le SPN pour le nom de l'ordinateur qui exécute SQL Server, utilisez une des commandes suivantes :
  • Setspn – MSSQLSvc /FQDN_OF_SQLSERVER:portFQDN_OF_SQLSERVER
  • Setspn – MSSQLSvc /FQDN_OF_SQLSERVER:portdomaine\nom d'utilisateur

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 des SPN en double. Pour utiliser ce script, procédez comme suit :
  1. Cliquez sur Démarrer, sur exécuter, type Bloc-notes, puis cliquez sur OK.
  2. Dans le fichier de bloc-notes, collez le script suivant :
    Dim argSPN, argUser, argComputer, spnToSearch, objCategory, strFilter, searchCategory, domainInputFunction Help()Dim strMessagestrMessage = strMessage & "Usage:" & chr(13)strMessage = strMessage & "For accurate results run this script from the IIS server or a member server in the same domain as IIS server." & chr(13)strMessage = strMessage & "Check the article's failure scenarios and make sure no duplicate SPNs exist." & chr(13)strMessage = strMessage & "cscript spnHelper.vbs /f:spn /spn:HTTP/www.test.com /user:mydomain\apppool1" & chr(13)strMessage = strMessage & "cscript spnHelper.vbs /f:spn /spn:HTTP/www.test.com /computer:iis6server1" & chr(13)strMessage = strMessage & "cscript spnHelper.vbs /f:user /user:mydomain\apppool1" & chr(13)strMessage = strMessage & "cscript spnHelper.vbs /f:computer /computer:iis6server1" & chr(13)strMessage = strMessage & "cscript spnHelper.vbs /f:duplicatespn /spn:HTTP/www.test.com" & chr(13)strMessage = strMessage & "cscript spnHelper.vbs /f:requiredspn" & chr(13)	MsgBox strMessage,,"SPN Helper"	WScript.QuitEnd FunctionFunction setArguments()	argSPN = lcase(WScript.Arguments.Named("spn"))	argUser =  lcase(WScript.Arguments.Named("user"))	argComputer = lcase(WScript.Arguments.Named("computer"))	searchCategory = lcase(WScript.Arguments.Named("f"))	if instr(argUser,"\")>0 then		domainInput = ",DC=" & split(argUser,"\")(0)		argUser = split(argUser,"\")(1)	end ifEnd FunctionFunction resetValues()	spnToSearch = ""	objCategory = ""	strFilter = ""End FunctionFunction getGCPath()	Dim tempGCPath, objGC, tempGC, tempStr	Set objGC = GetObject("GC:")	for each tempGC in objGC		tempGCPath = tempGC.ADsPath	next	if tempGCPath <> "" then		getGCPath = tempGCPath	else		WScript.Echo "Unable to find active directory"		WScript.Quit	end if	For tempCounter=0 to UBound(split(lcase(split(getGCPath,"//")(1)),"."))		If tempCounter = UBound(split(lcase(split(getGCPath,"//")(1)),".")) Then tempSeperator="" else tempSeperator = ","		tempStr = tempStr & "DC=" & split(lcase(split(getGCPath,"//")(1)),".")(tempCounter) & tempSeperator	Next	getGCPath = tempGCPath & "/" & tempStrEnd FunctionFunction getSPNClass()	Dim tempSPNClass	If trim(argSPN)="" Then getSPNClass = "*": Exit Function	If instr(argSPN,"/")=0 Then getSPNClass = "*": Exit Function	If instr(split(argSPN,"/")(0),"*")>0 Then getSPNClass = "*": Exit Function	getSPNClass = split(argSPN,"/")(0)End FunctionFunction isSPNInputValid(spnIN)	isSPNInputValid = ""	If instr(spnIN,"/")=0 Then Exit Function	If instr(spnIN,"*")>0 Then Exit Function	isSPNInputValid = spnINEnd FunctionFunction Main()	Dim paramSPN	paramSPN = ""	call  resetValues()	call setArguments()	Select Case searchCategory		Case "spn"			if (argUser = "" and argComputer = "") or (argUser <> "" and argComputer <> "") then WScript.Echo "You must use /spn along with /computer or /user": WScript.Quit			if argSPN = "" then argSPN = "*"			spnToSearch = "(servicePrincipalName=" & argSPN & ")"			if argUser <> "" then objCategory = "(objectCategory=person)(sAMAccountName=" & argUser & ")"			if argComputer <> "" then 				objCategory = "(objectCategory=computer)(cn=" & argComputer & ")"			End If			strFilter = "(&" & spnToSearch & objCategory & ")"		Case "duplicatespn"			If isSPNInputValid(argSPN)="" Then WScript.Echo "Invalid SPN input. Please verify and try again.": WScript.Quit			spnToSearch = "(servicePrincipalName=" & argSPN & ")"			strFilter = spnToSearch			paramSPN = argSPN		Case "requiredspn"			call showRequiredSPNs("IIS")			WScript.Quit		Case "computer"			objCategory = "(&(objectCategory=computer)(cn=" & argComputer & "))"			strFilter = objCategory		Case "user"			objCategory = "(&(objectCategory=person)(sAMAccountName=" & argUser & "))"			strFilter = objCategory		Case else			call Help()			WScript.Quit	End Select	call getSPNs(paramSPN)End FunctionFunction getPingResult(hostName,errorMessage)'On Error Resume NextgetPingResult = ""	If instr(hostName,".")=0 Then		Dim tempGCPath, objGC, tempGC		Set objGC = GetObject("GC:")		for each tempGC in objGC			tempGCPath = tempGC.ADsPath		next		if tempGCPath <> "" then			gcPath = tempGCPath		else			WScript.Echo "Unable to find active directory"			WScript.Quit		end if		Set adConn = CreateObject("ADODB.Connection")		Set adCmd = CReateObject("ADODB.Command")		adConn.Provider = "ADsDSOObject"		adConn.Open "ADs Provider"		Set adCmd.ActiveConnection = adConn		adQuery = "<" + gcPath + ">;" & "(&(objectCategory=computer)(cn=" & hostName & "))" & ";dnsHostName;subtree"		'WScript.Echo adQuery		'WScript.Quit		adCmd.CommandText = adQuery		Set adRecordSet = adCmd.Execute		if adRecordSet.RecordCount>0 Then 			If IsNull(adRecordSet.Fields("dnsHostName"))=0 Then 				getPingResult = adRecordSet.Fields("dnsHostName") 				hostName = getPingResult 			Else 				getPingResult = hostName			End If		else 			errorMessage = "Could not find " & hostname & " in the active directory"		end if		Exit Function	End If	getPingResult = hostNameExit Function'If Err Then getPingResult = hostNameEnd FunctionFunction getSPNs(spn)	Dim spnClass, duplicateSPNArray	spnClass = getSPNClass()	duplicateSPNArray = ""	gcPath = getGCPath()	Set adConn = CreateObject("ADODB.Connection")	Set adCmd = CreateObject("ADODB.Command")	adConn.Provider = "ADsDSOObject"	adConn.Open "ADs Provider"	Set adCmd.ActiveConnection = adConn	adQuery = "<" + gcPath + domainInput + ">;" & strFilter & ";distinguishedName,objectCategory,dnsHostName,servicePrincipalName,sAMAccountName;subtree"	'WScript.Echo adQuery	'WScript.Quit	adCmd.CommandText = adQuery	Set adRecordSet = adCmd.Execute	if adRecordSet.EOF and adRecordSet.Bof Then		WScript.echo "No " & searchCategory & " found with the given criteria."	else		If adRecordSet.RecordCount>10 Then			If msgbox(adRecordSet.RecordCount & " Records are returned with the given criteria. Printing all of them might take a long time" & chr(13) & " Do you want to print all of them?",vbYesNo,"Kerberos")=vbNo Then Exit Function		End If		Do While not adRecordset.Eof			If Err Then Exit Do			WScript.echo "Class: " & split(split(adRecordSet.Fields("objectCategory"),",")(0),"=")(1)			WScript.Echo adRecordSet.Fields("distinguishedName")			if UCase(adRecordSet.Fields("objectCategory")) = "COMPUTER" Then				WScript.echo "Computer Name" & adRecordSet.Fields("dnsHostName")			else				WScript.echo "User Name: " & adRecordSet.Fields("samAccountName")			end if			if instr(searchCategory,"spn")>0 Then				spnCollection = adRecordSet.Fields("servicePrincipalName")				for each individualSPN in spnCollection					if spnClass="*" Then					WScript.Echo Chr(9) + individualSPN					else						Select Case searchCategory							Case "spn"								if Lcase(split(individualSPN,"/")(0)) = lcase(spnClass) Then									WScript.Echo Chr(9) + individualSPN								end if							Case "duplicatespn"								if Lcase(individualSPN) = lcase(spn) Then									duplicateSPNArray = duplicateSPNArray & Lcase(individualSPN) & " for " & split(split(adRecordSet.Fields("objectCategory"),",")(0),"=")(1) & ":" & adRecordSet.Fields("samAccountName") & Chr(29)								end if							Case "requiredspn"						End Select					End if				next			end if			WScript.Echo			adRecordSet.MoveNext		Loop		If searchCategory = "duplicatespn" Then			If UBound(Split(duplicateSPNArray,Chr(29)))>1 Then				WScript.Echo "Duplicate SPNs found"				For tempDuplicateCount=0 to UBound(Split(duplicateSPNArray,Chr(29)))-1					WScript.Echo Split(duplicateSPNArray,Chr(29))(tempDuplicateCount)				Next			End If		End If		WScript.Echo ""		If adRecordset.RecordCount>1 Then WScript.Echo "Found " & adRecordset.RecordCount & " accounts" Else WScript.Echo "Found " & adRecordset.RecordCount & " account"	end if	adRecordset.Close	adConn.Close	If Err Then MsgBox Err.MessageEnd FunctionFunction getCategoryCount(myFilterValue, myFilterCategory)'This function accepts 2 parameters. First paramenter is the filter value and second param is filter category.'If you want to pass in your own filter string with various categories, you can pass "" as the second param.	gcPath = getGCPath()	searchCategory = myFilterCategory	Select Case lcase(searchCategory)		Case "spn"			tempFilter = "(servicePrincipalName=" & myFilterValue & ")"		Case "user"			tempFilter = "(&(objectCategory=person)(sAMAccountName=" & myFilterValue & "))"		Case "computer"			tempFilter = "(&(objectCategory=computer)(cn=" & myFilterValue & "))"		Case else			tempFilter = myFilterValue	End Select	Dim tempCategoryCount	tempCategoryCount = 0	Set adConn = CreateObject("ADODB.Connection")	Set adCmd = CReateObject("ADODB.Command")	adConn.Provider = "ADsDSOObject"	adConn.Open "ADs Provider"	Set adCmd.ActiveConnection = adConn	adQuery = "<" + gcPath + domainInput + ">;" & tempFilter & ";objectCategory,dnsHostName,servicePrincipalName,sAMAccountName;subtree"	'WScript.Echo adQuery	'WScript.Quit	adCmd.CommandText = adQuery	Set adRecordSet = adCmd.Execute	if adRecordSet.EOF and adRecordSet.Bof Then	else		Do While not adRecordset.Eof			If Err Then Exit Do			if searchCategory = "spn" Then				spnCollection = adRecordSet.Fields("servicePrincipalName")				for each individualSPN in spnCollection					If lcase(individualSPN) = lcase(myFilterValue) Then						tempCategoryCount  = tempCategoryCount  + 1					End If				next			else				tempCategoryCount = tempCategoryCount + 1			end if   			adRecordSet.MoveNext		Loop	end if	getCategoryCount = tempCategoryCount	adRecordset.Close	adConn.CloseEnd FunctionFunction showRequiredSPNs(Product)	Select Case Product		Case "IIS"			If MsgBox("Is IIS running in a Cluster or NLB",vbYesNo)=vbYes Then 'Running in Cluster or NLB is true				strClusterName = InputBox("Enter the Cluster Name")				If strClusterName = "" Then WScript.Quit				If getPingResult(strClusterName,errorMessage)="" Then					If MsgBox(errorMessage & ". Do you want to continue?",vbYesNo)<>vbYes Then WScript.Quit				End If				strDomainAccount = InputBox("Enter the Domain Account that the application pool is running under")				If strDomainAccount = "" Then WScript.Quit				strRequiredSPN = "HTTP/" & strClusterName				If instr(strDomainAccount,"\") > 0 then					If getCategoryCount(split(strDomainAccount,"\")(1), "user")=0 Then						WScript.Echo "Domain account " & strDomainAccount & " does not exist"						WScript.Quit					End If				Else					If getCategoryCount(strDomainAccount, "user")=0 Then						WScript.Echo "Domain account " & strDomainAccount & " does not exist"						WScript.Quit					End If				End If				If getCategoryCount(strRequiredSPN, "spn")>0 Then					WScript.Echo "SPN " & " is already set. Use search option for finding the account that it is set for"					WScript.Quit				End If				WScript.Echo "You need to set the SPN " & strRequiredSPN & " for domain account " & strDomainAccount			Else				If MsgBox("Is IIS application pool running under domain account",vbYesNo)=vbYes Then 					strHostName = InputBox("Enter the hostname or host header or FQDN that you use to access the application")					If strHostName = "" Then WScript.Quit					If getPingResult(strHostName,errorMessage)="" Then						If MsgBox(errorMessage & ". Do you want to continue?",vbYesNo)<>vbYes Then WScript.Quit					End If					strDomainAccount = InputBox("Enter the Domain Account that the application pool is running under")					If strDomainAccount = "" Then WScript.Quit					If instr(strDomainAccount,"\") > 0 then						If getCategoryCount(split(strDomainAccount,"\")(1), "user")=0 Then							WScript.Echo "Domain account " & strDomainAccount & " does not exist"							WScript.Quit						End If					Else						If getCategoryCount(strDomainAccount, "user")=0 Then							WScript.Echo "Domain account " & strDomainAccount & " does not exist"							WScript.Quit						End If					End If					strRequiredSPN = "HTTP/" & strHostName					If getCategoryCount(strRequiredSPN, "spn")>0 Then						WScript.Echo "SPN " & strSPNRequired & " is already set. Use search option for finding the account that it is set for"						WScript.Quit					Else						WScript.Echo "You need to set SPN " & strRequiredSPN & " for domain account " & strDomainAccount						WScript.Quit					End If				Else					strHostName = InputBox("Enter the host header or FQDN that you use to access the application")					If strHostName = "" Then WScript.Quit					If getPingResult(strHostName,errorMessage)="" Then						If MsgBox(errorMessage & ". Do you want to continue?",vbYesNo)<>vbYes Then WScript.Quit					End If					If MsgBox("Are you accessing the application with netbios name or FQDN or CNAME alias of IIS server?",vbYesNo)=vbYes Then						strRequiredSPN = "host/" & strHostName						If getCategoryCount(strRequiredSPN, "spn")>0 Then							WScript.Echo "Required SPN " & strRequiredSPN & " is already set. Use search option for finding the account that it is set for"							WScript.Quit						Else							WScript.Echo "You need to set SPN " & strRequiredSPN & " for IIS server's netbios name"							WScript.Quit						End If					End If					strHostHeader = InputBox("Enter the host header that you use to access the application")					If strHostHeader = "" Then WScript.Quit					strRequiredSPN = "http/" & strHostHeader					If getCategoryCount(strSPNRequired, "spn")>0 Then						WScript.Echo "A required SPN " & strSPNRequired & " is already set. Use search option to find the account the SPN is set to. If the required SPN is found under a different account, remove and add it to the IIS server's machine account."						WScript.Quit					Else						WScript.Echo "You need to set SPN " & strRequiredSPN & " for IIS server's netbios name"						WScript.Quit					End If				End If							End If		Case Else			call Help()	End SelectEnd Functioncall Main()'
  3. 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 commandes, puis 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'existe dans le catalogue global pour un SPN.

    Par exemple, si le SPN HTTP/www.test.com est défini pour le compte myDomain\appPool1 et 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éfini pour le compte myDomain\appPool1 et le HTTP/iis6server1.mydomain.com SPN est également associé au compte d'ordinateur pour le serveur, vous avez également un SPN en double. Vous pouvez avoir un SPN hôte et un nom principal de service HTTP. Le SPN HTTP explicite remplace celle implicite qui est couvert par l'entrée de l'hôte. Toutefois, si l'URL que l'utilisateur tape est associée à plus d'un compte d'utilisateur ou à plus d'un compte d'ordinateur, vous avez un SPN en double.
  • Vérifiez que les noms principaux de service ont été répliqués sur 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 sur 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 à partir de certains ordinateurs clients. 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 être 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é sur le 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 ce faire, vérifiez que le paramètre de la clé NTAuthenticationProviders dans la métabase IIS n'a pas été modifié sur NTLM. Le paramètre par défaut est Negotiate, NTLM.
  • Vérifiez que le serveur ou le service qui est de déléguer les informations d'identification est approuvé pour la délégation.
  • Vérifiez que le service s'exécute sous le compte 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 Vérification de la sécurité par boucle de rappel 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 :
    896861 Vous recevez une erreur 401.1 lorsque vous visitez un site Web qui utilise l'authentification intégrée et est hébergé sur IIS 5.1 ou IIS 6
  • Vérifiez que le client est un client Kerberos. En outre, vérifiez que le paramètre Activer l'authentification intégrée Windows est activé dans Internet Explorer. Pour ce faire, cliquez sur Options Internet dans le menu Outils , cliquez sur l'onglet Avancé et vérifiez que la case à cocher Activer l'authentification intégrée Windows est activée.
  • Vérifiez que tous les ordinateurs qui font partie du processus de Kerberos de résolution de nom cohérent et sont reliées par une approbation Kerberos. Par exemple, vérifiez que les ordinateurs qui sont impliqués dans le processus de Kerberos sont dans la même forêt ou qui font partie d'approbation Kerberos entre forêts.
  • Vérifiez que la taille de jeton ne dépasse pas la valeur définie pour la MaxTokenSize propriété. En outre, vérifiez que la taille de la demande ne dépasse pas la valeur définie pour la MaxFieldLength propriété. Ces valeurs peuvent être dépassées si les utilisateurs qui font partie du processus de Kerberos sont membres de plusieurs groupes.
    920862 Un utilisateur Outlook Web Access tente en vain d'accéder à la boîte aux lettres Exchange Server 2003 (voir message d'erreur similaire à « HTTP 400 Requête incorrecte : en-tête de demande trop long »)
  • Vérifiez que les stratégies de sécurité obligatoires sont activées 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 :
    • Ajuster les quotas 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 le protocole 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 TCP. Pour plus d'informations sur la façon de forcer l'authentification Kerberos à utiliser TCP, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la Base de connaissances Microsoft :
    244474 Comment faire pour forcer Kerberos à utiliser TCP au lieu de UDP dans Windows Server 2003, Windows XP et dans Windows 2000
  • Vérifiez que le datage de l'authentificateur ne diffère pas de plus de cinq minutes de l'horodatage du serveur. Pour plus d'informations sur la façon de résoudre les différences de l'horodatage, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la Base de connaissances Microsoft :
    232386 Impossible de se connecter si la date et l'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 de mode du domaine est au moins un environnement en mode natif de Microsoft Windows 2000. Pour plus d'informations sur la façon de déterminer le mode de domaine, visitez le site Web de Microsoft à l'adresse suivante :
  • Sur le client, vérifiez que l'URL de l'application Web est ajouté aux sites intranet locaux. 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 :
    303650 Site intranet est identifié comme site Internet lorsque vous utilisez un nom de domaine complet ou une adresse IP
  • Vérifiez que chaque périphérique d'ethernet gigabit utilise la dernière version du pilote. Pour plus d'informations sur les problèmes qui peuvent se produire lorsque les pilotes pour les périphériques Ethernet gigabit sont obsolètes, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la Base de connaissances Microsoft :
    326152 Impossible de se connecter au contrôleur de domaine et d'appliquer une stratégie de groupe avec les périphériques Ethernet Gigabit
Références
Pour plus d'informations sur l'utilisation de l'authentification Kerberos avec les sites Web à charge équilibrée, visitez le site Web de Microsoft à l'adresse suivante :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 :
321728 Internet 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 :
215383 Comment 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 Kerberos et comment faire pour passer 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 :
832769 Comment faire pour configurer un serveur virtuel Windows SharePoint Services pour utiliser l'authentification Kerberos et comment faire pour passer de l'authentification Kerberos à l'authentification NTLM
Pour plus d'informations sur les problèmes qui peuvent se produire lorsque vous utilisez le protocole d'authentification Kerberos pour se 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 :
908209 Internet Explorer 6 ne peut pas utiliser le protocole d'authentification Kerberos pour se connecter à un serveur Web qui utilise un port non standard sur Windows XP ou Windows Server 2003

Avertissement : Cet article a été traduit automatiquement.

Propriétés

ID d'article : 929650 - Dernière mise à jour : 01/03/2015 04:35:00 - Révision : 6.0

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

  • kbinfo kbhowto kbmt KB929650 KbMtfr
Commentaires