SPN, ınternet ınformation Services barındırılan Web uygulamalarını yapılandırırken nasıl kullanılır

Makale çevirileri Makale çevirileri
Makale numarası: 929650 - Bu makalenin geçerli olduğu ürünleri görün.
Hepsini aç | Hepsini kapa

Bu Sayfada

Özet

Bu makalede, hizmet asıl adı (SPN). Bu makalede ayrıca Microsoft ınternet ınformation Services (IIS), Web uygulamalarını yapılandırırken SPN kullanmayı açıklamaktadır. Bu makalede, ayrıca tümleşik Windows kimlik doğrulaması anlaşma işleminde açıklanır. Kerberos kimlik doğrulamasını ve NTLM kimlik doğrulaması arasında Negotiate Güvenlik üstbilgisi sağlar istemcilerinin seçin.

Ayrıca, bu makalede, Kerberos kimlik doğrulamasını etkinleştirmek bir SPN gerektiren genel senaryolar açıklanmaktadır. Son bölümü durumlarda Kerberos kimlik doğrulaması başarısız olabilir açıklar. Son bölümde ayrıca sorun giderme adımları sağlar.

Giriş

Önemli Bu makalede anlatılan konuları, ınternet ınformation Services (IIS) 6.0 için geçerlidir. Kernel Modu kimlik doğrulaması yapılandırma ayarı useKernelModefalse olarak ayarlayarak devre dışı bırakıldıysa konuları IIS 7.0 ve 7.5 için de geçerlidir.
Bu adım adım makalede, barındırılan Web uygulamalarını yapılandırırken tümleşik Windows kimlik doğrulaması, istemci istekleri kimlik doğrulaması için kullanıldığında, hizmet asıl adı (SPN) üzerinde IIS.IIS geçiş Negotiate Güvenlik üstbilgisi nasıl kullanılacağını açıklar. Kerberos kimlik doğrulamasını ve NTLM kimlik doğrulaması arasında Negotiate Güvenlik üstbilgisi sağlar istemcilerinin seçin. Aşağıdaki koşullardan biri doğru değilse, Kerberos kimlik doğrulaması anlaşma işlemi seçer:
  • Kimlik doğrulaması söz konusu ise istemlerinde, Kerberos kimlik doğrulaması kullanamazsınız.
  • Çağıran uygulama, Kerberos kimlik doğrulamasını kullanmak için yeterli bilgi sağlamaz.
Ağ kimlik doğrulaması için Kerberos iletişim kuralı'nı seçmek anlaşma işlemi etkinleştirmek için <a0></a0>, istemci uygulaması bir SPN, kullanıcı asıl adı (UPN) veya bir <a0>Netbıos</a0> hesabının adı <a2>hedef</a2> adı sağlamanız gerekir. Anlaşma işlemi, istemci uygulaması bir hedef adı sağlamazsa, Kerberos iletişim kuralı kullanamazsınız. Kerberos iletişim kuralı anlaşma işlemini kullanamıyorsanız, anlaşma işlemi, NTLM iletişim kuralını seçer.

Daha fazla bilgi

Kavramları

SPN tanımı

SPN, istemci bir hizmetinin bir örneğini benzersiz olarak tanımlayan bir addır. Bir ormandaki tüm bilgisayarlarda bir hizmet birden çok örneğini yüklerseniz, her hizmet örneği, kendi SPN olması gerekir. Istemciler, kimlik doğrulama için kullanabilir, birden fazla ad varsa, BIR servis örneği birden çok SPN olabilir. Örneğin, bir SPN her zaman hizmet örneği çalıştığı ana bilgisayar adını içerir. Bu nedenle, bir hizmet örneği, her adı veya diğer adını, ana bilgisayar için bir SPN kaydı.

HTTP hizmet sınıfı

HTTP hizmet sınıfı, HTTP iletişim kuralı ' farklıdır. HTTP hizmet sınıfı, HTTP iletişim kuralı hem de HTTPS iletişim kuralını kullanın. Hizmet genel hizmet sınıfını tanımlayan dize sınıftır. Bir Web hizmeti için "www" ve "ldap" için bir dizin hizmeti, iyi bilinen hizmet sınıf adları içerir. Genellikle, hizmetin sınıf adı, hizmet sınıfı için benzersiz olan herhangi bir dize olabilir. SPN sözdizimi öğeleri ayırmak için eğik çizgi (/) karakteri kullandığını unutmayın. Bu nedenle, eğik çizgi karakteri (/), bir hizmetin sınıf adı bulunamaz.

Sınıf, HOST Hizmet ve HTTP hizmeti

HOST hizmeti ana bilgisayarı gösterir. Kerberos iletişim kuralı HOST SPN ana bilgisayara erişmek için kullanır. Kerberos iletişim kuralı, bir hizmet bileti oluşturmak için ana bilgisayarda uzun süreli anahtarı kullanır.

HTTP hizmet sınıfı, HOST SPN için bir diğer ad olarak yerleşik hizmetlerden biridir. HOST SPN için ana bilgisayar hesabı ile eşleştirilir. Bu nedenle, varsayılan HTTP hizmeti sınıf'ı kullandığınızda, Kerberos iletişim kuralı bir hizmet bileti istemek için hizmet hesabı olarak bilgisayar hesabını kullanır.

Genel Senaryolar

Bu bölüm, bir SPN gerektiren senaryoları açıklanır. Ayrıca, bu bölümde, her senaryo için ayarlamak için hangi SPN belirleme gösterir. Aşağıdaki terimler bu senaryolarda kullanılır:
Bu tabloyu kapaBu tabloyu aç
IIS6server1IIS çalıştıran bir bilgisayarın ana bilgisayar adı
etkialanımIIS6server1 bilgisayarın içerildiği etki alanı
appPool1Uygulama havuzu kimliği için kullanılan etkialanım etki alanındaki kullanıcı hesabı
appPool2Ikinci uygulama havuzu kimliği için kullanılan etkialanım etki alanındaki kullanıcı hesabı
www.test.comBir Web sitesi için ilk ana bilgisayar üstbilgisi
www.Test2.comBir Web sitesi için ikinci ana bilgisayar üstbilgisi
www.test3.comBir Web sitesi için üçüncü ana bilgisayar üstbilgisi
www.myIIScluster.comIIS çalıştıran bilgisayarlardan oluşan bir kümeyi tam olarak nitelenmiş etki alanı adı
www.myEXCHcluster.comMicrosoft Exchange üzerinde IIS çalıştıran bilgisayarlar, bir kümenin tam olarak nitelenmiş etki alanı adı

Setspn.exe aracını

Setspn.exe aracını okumak, değiştirmek ve bir <a0>Active Directory</a0> hizmeti hesabının SPN dizin özelliği sağlar. SPN, bir hizmet olarak çalıştırmak için bir hedef asıl adı'nı bulmak için kullanılır. SetSpn.exe aracı ayrıca geçerli SPN görüntülemek, hesabın varsayılan SPN'ler, sıfırlamak ve ekleme veya tamamlayıcı SPN silme sağlar.

Microsoft Windows Server 2003 için Setspn.exe aracını edinmek için <a0></a0>, Microsoft Knowledge Base'deki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
970536Setspn.exe destek aracını Windows Server 2003 güncelleştirmesi

Senaryo 1: uygulama havuzu kimliği değiştirildiğinde bir IIS uygulaması Access

Bir IIS uygulaması, varsayılan ağ hizmeti hesabının altında yerine etki alanı kullanıcı hesabı altında çalıştığında, HTTP hizmeti etki alanı hesabı için SPN ayarlamanız gerekir. Bu senaryoda, IIS uygulaması, IIS çalıştıran sunucu, Netbıos adı ya da, IIS çalıştıran sunucuya FQDN'SINI kullanarak erişebilirsiniz.

IIS uygulaması üzerinde Netbıos adını kullanarak erişmek için <a0></a0>, IIS çalıştıran sunucu, Netbıos adı NETBIOS_NAME_OF_IIS_SERVER olduğu aşağıdaki komutu kullanın:
Setspn –S HTTP / NETBIOS_NAME_OF_IIS_SERVER domain\username
Örneğin, komut, aşağıdaki komutu benzeyebilir:
Setspn –S HTTP/iis6server1 mydomain\appPool1
IIS uygulaması FQDN kullanarak erişmek için <a0></a0>, IIS çalıştıran sunucunun FQDN FQDN_OF_IIS_SERVER olduğu aşağıdaki komutu kullanın:
Setspn –S HTTP / FQDN_OF_IIS_SERVER domain\username
Örneğin, komut, aşağıdaki komutu benzeyebilir:
Setspn –S HTTP/iis6server1.mydomain.com mydomain\appPool1

Senaryo 2: ana bilgisayar üstbilgisi'ni kullanarak bir Web uygulaması Access...

Ana bilgisayar üstbilgisi'ni kullanarak bir Web uygulaması eriştiğinizde, HTTP hizmeti için bir SPN ayarlamanız gerekir.

Bir varsayılan hesabı ağ hizmeti hesabı, yerel hizmet hesabı veya yerel sistem hesabı altında bir Web uygulamasını çalıştırdığınızda, aşağıdaki komutu kullanabilirsiniz:
Setspn –A HTTP / HOST_HEADER NETBIOS_NAME_OF_IIS_SERVER
Bu komutta, HOST_HEADER uygulamaya erişim için bir tarayıcı penceresinde yazın ve NETBIOS_NAME_OF_IIS_SERVER Netbıos adıdır, IIS çalıştıran sunucunun ana bilgisayar üstbilgisi ' dir.

Örneğin, uygulamanın komut, aşağıdaki komutu benzeyebilir:
Setspn –A HTTP/www.test.com iis6server1
Bir etki alanı hesabı altında uygulama çalıştırıyorsanız, aşağıdaki komutu kullanabilirsiniz:
Setspn –A HTTP / HOSTHEADER_OR_DNS_ALIAS domain\username
Bu komutta, HOSTHEADER_OR_DNS_ALIAS ana bilgisayar üstbilgisi veya bir Web uygulamasını erişmek için kullanacağınız DNS diğer adı var.

Örneğin, uygulamanın komut aşağıdaki komutlardan birini benzeyebilir:
  • Setspn –A HTTP/www.test.com mydomain\appPool1
  • Setspn –A HTTP/www.test3.com mydomain\appPool2

Senaryo 3: IIS uygulama kümelenmiş veya yükü dengelenmiş bir ortamda Access

IIS yükü dengelenmiş bir ortamda veya kümelenmiş ortamda çalıştırdığınızda, uygulamalar bir düğüm adı yerine <a2>Küme</a2> adını kullanarak erişebilirsiniz. Bu senaryo, ağ yük dengelemesini içerir. Küme teknolojisi, bir düğüm kümenin üyesi olduğu bir bilgisayara başvuruyor. Bu senaryoya göre kimlik doğrulama protokolü olarak Kerberos kullanmak için <a0></a0>, her <a0>IIS</a0> düğümündeki uygulama havuzu kimliği aynı etki alanı kullanıcı hesabı kullanmak üzere yapılandırılmış olmalıdır. Her IIS düğümde, aynı etki alanı kullanıcı hesabı kullanmak üzere yapılandırmak için <a0></a0>, aşağıdaki komutu kullanın:
Setspn –A HTTP / CLUSTER_NAME etkialanı\kullanıcıadı
Örneğin, komut aşağıdaki komutlardan birini benzeyebilir:
  • Setspn –A HTTP/www.myIISCluster.com mydomain\appPool1
  • Setspn –A HTTP/www.myEXCHCluster.com mydomain\appPool2

Senaryo 4: Kullan SQL Server bir uygulamaya erişmek için

Arka uç sunucusunda SPN IIS Web uygulama SQL Server çalıştıran bir arka uç bilgisayarda erişmesi durumunda doğrulanması gerekir. Gerekli SPN yanlış yapılandırılırsa, Web uygulama düzgün çalışmayabilir.

MSSQLSvc yerel sistem hesabı altında çalışan SQL Server çalıştıran bir arka uç bilgisayarda / FQDN_OF_SQL_SERVER:port bağlantı noktası için bir bilgisayar adı bulunmalıdır. SQL Server çalıştıran bir bilgisayar için SPN'ler belirlemek için aşağıdaki komutu kullanın:
Setspn –L SQL_SERVER_COMPUTER_NAME
SQL Server çalıştıran bir bilgisayar adı için bir SPN ayarlamak için aşağıdaki komutu kullanın:
Setspn –A MSSQLSvc / FQDN_OF_SQLSERVER:port SQLSERVER_COMPUTER_NAME
MSSQLSvc bir etki alanı hesabı altında çalışan SQL Server çalıştıran bir arka uç bilgisayar / etki alanı hesabını FQDN_OF_SQL_SERVER:port bağlantı noktası bulunmalıdır. Etki alanı hesabı için SPN belirlemek için aşağıdaki komutu kullanın:
Setspn –L etkialanı\kullanıcıadı
SQL Server çalıştıran bir bilgisayar adı için bir SPN ayarlamak için aşağıdaki komutlardan birini kullanın:
  • Setspn –A MSSQLSvc / FQDN_OF_SQLSERVER:portFQDN_OF_SQLSERVER
  • Setspn –A MSSQLSvc / FQDN_OF_SQLSERVER:portdomain\username

SPN yardımcı komut dosyası

Aşağıdaki örnek komut dosyası, bir IIS uygulaması için SPN bulmak için kullanabilirsiniz. Bu komut, yinelenen bir SPN bulmak için de kullanabilirsiniz. Bu komut dosyasını kullanmak için aşağıdaki adımları izleyin:
  1. Başlat ' ı tıklatın, Çalıştır ' ı tıklatın, Not yazın ve Tamam ' ı tıklatın.
  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. Dosyayı Spnhelper.vbs kaydedin.
  4. Bir komut isteminde, uygun komut satırı seçeneğini kullanarak Spnhelper.vbs dosyasını çalıştırın.

    Not Spnhelper.vbs dosya için komut satırı seçeneklerini görüntülemek için <a0></a0>, Spnhelper.vbs/help komut istemine yazın ve ENTER tuşuna basın.

Ek bir dikkat edilecek noktalar

Gerekli SPN için bilgisayar hesaplarına veya etki alanı hesapları için ayarlandığında, Kerberos kimlik doğrulaması başarısız olabilir. Kerberos kimlik doğrulaması beklenmedik biçimde başarısız olursa, aşağıdakileri yapın:
  • Hiçbir yinelenen bir SPN için bir SPN genel kataloğa bulunduğunu doğrulayın.

    Örneğin, HTTP/www.test.com SPN myDomain\appPool1 hesabının ve myDomain\appPool2 hesabının ayarlı ise, yinelenen bir SPN SPN farklı hesapları için ayarlanmış olsa bile bulunmaktadır. Ayrıca, HTTP/iis6server1.mydomain.com SPN myDomain\appPool1 hesabı için ayarlanır ve bu HTTP/iis6server1.mydomain.com SPN de sunucu için bilgisayar hesabı ile ilişkili ise, de yinelenen bir SPN vardır. Bir HOST SPN ve bir HTTP SPN olabilir. Açık HTTP SPN altında HOST giriş kapsamında örtülü bir geçersiz kılar. Ancak, kullanıcının yazdığı veya birden çok bilgisayar hesabını birden çok kullanıcı hesabı ile ilişkili olduğundan bu URL, sahip, yinelenen bir SPN.
  • SPN diğer etki alanı denetleyicilerine çoğaltıldığını doğrulayın.

    Etki alanı denetleyicileri arasında çoğaltma sorunlarını SPN diğer etki alanı denetleyicilerinin çoğaltılmasını engeller. SPN diğer etki alanı denetleyicilerine çoğaltma, uygulama, bazı istemci bilgisayarlardan çalışmayabilir. HTTP/www.test.com SPN myDomain\appPool1 hesabının bir etki alanı denetleyicisinde ayarlı ise, SPN ikinci etki alanı denetleyicisine çoğaltılan, örneğin HTTP/www.test.com SPN ikinci bir etki alanı denetleyicisinde myDomain\appPool1 hesabının bulunamayabilir.

    Not Varsayılan olarak, çoğaltma 15 dakika sürer.
  • Web sunucusu, Kerberos kimlik doğrulamasını desteklemek üzere yapılandırılmış olduğunu doğrulayın. Bunu yapmak için <a0></a0>, IIS metatabanındaki <a2>NTAuthenticationProviders</a2> anahtarının ayarı NTLM olarak değiştirilmedi'i doğrulayın. Varsayılan ayar, Negotiate, NTLM olur.
  • Sunucu veya hizmet kimlik bilgileri için temsilci seçme temsilci seçme için güvenilir olduğundan emin olun.
  • Hizmetin altında çalıştığı hesap, temsilci seçme için güvenilir olduğundan emin olun.
  • Active Directory'de Account duyarlı ve temsilci seçilemez onay kutusunu uygulama erişen kullanıcılar için işaretlenmemiş olduğunu doğrulayın.
  • Doğrudan bu sunucudan uygulama erişiyorsanız, Geridöngü güvenlik denetimi onay kutusunun temizlenmiş olduğunu doğrulayın.Geri döngü denetimi devre dışı olduğunu doğrulama hakkında daha fazla bilgi için Microsoft Knowledge Base'deki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
    896861Tümleşik Kimlik Doğrulaması'nı kullanan ve IIS 5.1 veya IIS 6 üzerinde barındırılan bir Web sitesine gözatıldığında, 401.1 hatası alınıyor
  • Istemci, Kerberos'un etkinleştirilmiş bir istemci olduğundan emin olun. Ayrıca, Enable Windows tümleşik kimlik doğrulama ayarı, ınternet Explorer'ın etkinleştirilmiş olduğunu doğrulayın. Bunu yapmak için <a0></a0>, Araçlar menüsünden Internet seçenekleri ' ni tıklatın, Gelişmiş sekmesini tıklatın ve sonra Enable Windows'un tümleşik kimlik doğrulaması onay kutusunun seçili olduğundan emin olun.
  • <a0>Kerberos</a0> işleminin bir parçası olan tüm bilgisayarları tutarlı bir ad çözümlemesi olan ve Kerberos güveni ile bağlı olduğunu doğrulayın. Örneğin, Kerberos işleminde söz konusu bilgisayarlar aynı ormanda olduğu veya bir ormanlar arası Kerberos güvenini bir parçası olan doğrulayın.
  • Simge boyutu MaxTokenSize özelliği için ayarlanan bir değeri aşan doğrulayın. Ayrıca istek boyutu MaxFieldLength özelliği için ayarlanan bir değeri aşan doğrulayın. Grup üyeleri <a0>Kerberos</a0> işleminin bir parçası olan kullanıcılar, bu değerler aşılmış.
    920862Bir Outlook Web Access kullanıcısının Exchange Server 2003'te bir posta kutusuna erişmeye çalıştığında hata iletisi: “ HTTP 400 Hatalı istek (istek başlığı çok uzun) ”
  • Gerekli güvenlik ilkeleri, etki alanı hesapları için uygulama havuzlarını yapılandırırken etkinleştirildiğinden emin olun. Bunu yapmak için etki alanı hesabının bir üyesi, IIS çalıştıran bilgisayarda aşağıdaki yerel güvenlik ilkeleri olduğunu doğrulayın:
    • Bir işlem için bellek kotalarını ayarlama
    • Hizmet olarak oturum açma
    • Işlem düzeyi simgesini değiştir
  • Kerberos kimlik doğrulaması UDP üzerinden düzgün çalıştığını doğrulayın. Kerberos kimlik doğrulaması, varsayılan olarak UDP kullanır. Ancak, UDP paketlerinin kaybı, Kerberos kimlik doğrulaması başarısız olmasına neden olabilir. Bu sorun oluştuğunda, Kerberos kimlik doğrulaması, TCP kullanmaya zorlayabilirsiniz. Kerberos kimlik doğrulaması, TCP kullanmaya zorlama hakkında daha fazla bilgi için Microsoft Knowledge Base'deki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
    244474Windows Server 2003, Windows XP ve Windows 2000'de Kerberos nasıl UDP yerine TCP kullanmaya zorlanır
  • Kimlik doğrulayıcısının zaman damgası beş dakikadan fazla bir süre gelen zaman damgası, sunucu tarafından farklı değil olduğunu doğrulayın. Zaman damgası farklılıkları çözümleme hakkında daha fazla bilgi için Microsoft Knowledge Base'deki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
    232386Tarih ve saat eşitlenmemiş, oturum açamıyor
  • TCP/UDP bağlantı noktası 88, güvenlik duvarı veya yönlendirici tarafından engellenmeyen doğrulayın. Varsayılan olarak, TCP/UDP bağlantı noktası 88 Kerberos kimlik doğrulamasını kullanır.
  • Etki alanı mod ortamında en az Microsoft Windows 2000 yerel mod ortamında olduğunu doğrulayın. Etki alanı modunu belirleme hakkında daha fazla bilgi için aşağıdaki Microsoft Web sitesini ziyaret edin:
    http://technet2.microsoft.com/windowsserver/en/library/11b2d3d3-980c-4b64-9ed3-51778f1fe5771033.mspx?mfr=true
  • Istemci üzerinde yerel intranet siteleri için Web uygulamasını URL'SINI eklendiğini doğrulayın. Yerel intranet için bir URL ekleme hakkında daha fazla bilgi için Microsoft Knowledge Base'deki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
    303650FQDN veya IP adresi kullandığınızda Intranet sitesi bir Internet sitesi olarak tanımlanıyor
  • Her gigabit ethernet aygıt sürücüsünün en son sürümünü kullandığını doğrulayın. Gigabit Ethernet aygıtlarının sürücülerini eski olduğunda oluşabilecek sorunlar hakkında daha fazla bilgi için Microsoft Knowledge Base'deki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
    326152Gigabit Ethernet aygıtlarıyla etki alanı denetleyicisine bağlanılamıyor ve Grup İlkesi uygulanamıyor

Referanslar

Yükü dengelenmiş Web siteleriyle Kerberos kimlik doğrulamasını kullanma hakkında daha fazla bilgi için aşağıdaki Microsoft Web sitesini ziyaret edin:
http://technet.microsoft.com/en-us/library/cc757299.aspx
Proxy sunucularıyla Kerberos kimlik doğrulaması'nı kullandığınızda oluşabilecek sorunlar hakkında daha fazla bilgi için Microsoft Knowledge Base'deki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
321728Internet Explorer proxy sunucularda Kerberos kimlik doğrulamasını desteklemiyor (Bu bağlantı, bir kısmı veya tamamı İngilizce olan içeriğe işaret edebilir.)
IIS, Kerberos iletişim kuralı hem de NTLM iletişim kuralı için ağ kimlik doğrulamasını destekleyecek şekilde yapılandırma hakkında daha fazla bilgi için Microsoft Knowledge Base'deki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
215383IIS, Kerberos iletişim kuralı hem de NTLM iletişim kuralı için ağ kimlik doğrulamasını destekleyecek şekilde yapılandırma hakkında
Kerberos kimlik doğrulaması ve nasıl yeniden NTLM kimlik doğrulaması için Kerberos kimlik doğrulamasını kullanmak için bir Windows SharePoint Services sanal sunucusunu yapılandırma hakkında daha fazla bilgi için Microsoft Knowledge Base'deki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
832769Windows SharePoint Services sanal sunucusunu Kerberos kimlik doğrulaması kullanacak biçimde yapılandırma ve Kerberos kimlik doğrulamasından NTLM kimlik doğrulamasına dönme
Windows Server 2003 veya Windows XP'deki Standart olmayan bir bağlantı noktasını kullanan bir Web sunucusuna bağlanmak için Kerberos kimlik doğrulama protokolünü kullandığınızda oluşabilecek sorunlar hakkında daha fazla bilgi için Microsoft Knowledge Base'deki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
908209Internet Explorer 6, Windows Server 2003 veya Windows XP'deki Standart olmayan bir bağlantı noktasını kullanan bir Web sunucusuna bağlanmak için Kerberos kimlik doğrulama iletişim kuralı kullanamazsınız

Özellikler

Makale numarası: 929650 - Last Review: 12 Mayıs 2010 Çarşamba - Gözden geçirme: 5.0
Bu makaledeki bilginin uygulandığı durum:
  • Microsoft Internet Information Services 7.5
  • Microsoft Internet Information Services 7.0
  • Microsoft Internet Information Services 6.0
Anahtar Kelimeler: 
kbmt kbinfo kbhowto KB929650 KbMttr
Machine-translated Article
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir:929650

Geri Bildirim Ver

 

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