現在オフラインです。再接続するためにインターネットの接続を待っています

インターネット インフォメーション サービスでホストされている Web アプリケーションを構成するときに Spn を使用する方法

重要: このサポート技術情報 (以下「KB」) は、翻訳者による翻訳の代わりに、マイクロソフト機械翻訳システムによって翻訳されたものです。マイクロソフトは、お客様に、マイクロソフトが提供している全ての KB を日本語でご利用いただけるように、翻訳者による翻訳 KB に加え機械翻訳 KB も提供しています。しかしながら、機械翻訳の品質は翻訳者による翻訳ほど十分ではありません。誤訳や、文法、言葉使い、その他、たとえば日本語を母国語としない方が日本語を話すときに間違えるようなミスを含んでいる可能性があります。マイクロソフトは、機械翻訳の品質、及び KB の内容の誤訳やお客様が KB を利用されたことによって生じた直接または間接的な問題や損害については、いかなる責任も負わないものとします。マイクロソフトは、機械翻訳システムの改善を継続的に行っています。

英語版 KB:929650
概要
この資料では、サービス プリンシパル名 (Spn) について説明します。また、Microsoft インターネット インフォメーション サービス (IIS) でホストされている Web アプリケーションを構成するときに Spn を使用する方法についても説明します。また、統合 Windows 認証では、ネゴシエート プロセスについても説明します。Negotiate セキュリティ ヘッダーをクライアントの選択 Kerberos 認証と NTLM 認証の間。

さらに、Kerberos 認証を有効にするのには、SPN を必要とする一般的なシナリオについて説明します。最後のセクションは、Kerberos 認証が失敗する状況について説明します。最後のセクションもトラブルシューティング手順を提供します。
概要
重要: この資料に記載されているトピックには、インターネット インフォメーション サービス (IIS) 6.0 が適用されます。トピックでは、またに適用 IIS 7.0 および 7.5 は、構成設定を設定することによってカーネル モード認証が無効な場合 useKernelModefalse.
この資料では、IIS でホストされている Web アプリケーションを構成するときに、サービス プリンシパル名 (Spn) を使用する方法について手順を追って説明します。統合 Windows 認証は、クライアント要求の認証に使用するときに IIS ネゴシエート セキュリティ ヘッダーを渡します。Negotiate セキュリティ ヘッダーをクライアントの選択 Kerberos 認証と NTLM 認証の間。Negotiate プロセスには、次の条件のいずれかに該当しない限り、Kerberos 認証を選択します。
  • 認証に関連するシステムのいずれかの Kerberos 認証は使用できません。
  • 呼び出し元のアプリケーションでは、Kerberos 認証を使用するための情報は提供されません。
ネットワーク認証に Kerberos プロトコルを選択するには、ネゴシエート プロセスを有効にするには、クライアント アプリケーションする必要があります提供する SPN、ユーザー プリンシパル名 (UPN)、または NetBIOS アカウント名としてターゲット名。クライアント アプリケーションがターゲット名を指定しない場合は、ネゴシエート プロセスは、Kerberos プロトコルを使用できません。ネゴシエート プロセスは、Kerberos プロトコルを使用できない場合は、ネゴシエート プロセスは NTLM プロトコルを選択します。
詳細

概念

SPN の定義

SPN はするクライアント識別サービスのインスタンスの名前です。フォレスト内のコンピューターへのサービスの複数のインスタンスをインストールする場合は、各サービス インスタンスは独自の SPN が必要です。クライアントが認証を使用して複数の名前がある場合、特定のサービス インスタンス複数の Spn を持つことができます。たとえば、SPN はサービス インスタンスが実行されているホスト コンピューターの名前必ず含まれます。したがって、サービス インスタンスがそれぞれの名前またはそのホストのエイリアスの SPN を登録します。

HTTP サービス クラス

HTTP サービス クラスは、HTTP プロトコルによって異なります。HTTP プロトコルおよび HTTPS プロトコルは、HTTP サービス クラスを使用します。サービス クラスは、サービスの一般的なクラスを識別する文字列です。既知のサービス クラスの名前は"www"の Web サービスのディレクトリ サービスには、"ldap"などがあります。一般に、サービス クラスの名前はサービス クラスに一意となる任意の文字列にできます。SPN の構文は、スラッシュ文字 (/) を使用して要素を分離することに注意してください。したがって、スラッシュ文字 (/) は、サービス クラス名に使用できません。

ホスト サービスと HTTP サービス ・ クラス

ホスト サービスは、ホスト コンピューターを表します。Kerberos プロトコルは、ホスト コンピューターへのアクセス、ホスト SPN を使用します。Kerberos プロトコル、長期的なキーを使用して、ホスト コンピューターにサービス チケットを作成します。

HTTP サービス クラスでは、ホスト SPN をエイリアスとして機能する組み込みのサービスのいずれかです。ホスト SPN は、ホストのコンピューター アカウントにマップされます。したがって、デフォルトの HTTP サービス クラスを使用すると、Kerberos プロトコルを使用してコンピューター アカウント サービス アカウントとしてサービス チケットを要求します。

一般的なシナリオ

SPN が必要となるシナリオをについて説明します。さらに、このセクションではどの SPN を各シナリオの設定を確認する方法について説明します。これらのシナリオでは、次の用語が使用されます。
IIS6server1IIS を実行しているコンピューターのホスト名
mydomainIIS6server1 コンピューターが参加しているドメイン
appPool1Mydomain というドメインのアプリケーション プール id に使用されるユーザー アカウント
appPool2Mydomain というドメインの 2 番目のアプリケーション プール id に使用されるユーザー アカウント
www.test.com最初のホスト ヘッダーの Web サイト
www.test2.com2 番目のホスト ヘッダーの Web サイト
www.test3.com3 番目のホスト ヘッダーの Web サイト
www.myIIScluster.comIIS を実行しているコンピューターのクラスターの完全修飾ドメイン名
www.myEXCHcluster.comIIS 上で Microsoft Exchange を実行しているコンピューターのクラスターの完全修飾ドメイン名

Setspn.exe ツール

Setspn.exe ツールでは、読み取り、変更、およびアクティブなディレクトリ サービス アカウントの SPN のディレクトリのプロパティを削除することができます。Spn は、サービスを実行するためのターゲット プリンシパル名を検索する使用されます。SetSpn.exe ツールでは、現在の Spn の表示、リセット、アカウントの既定の Spn を追加または補足 Spn を削除することもできます。

Microsoft Windows Server 2003 に対して Setspn.exe ツールを入手するには、マイクロソフト サポート技術資料を参照する次の文書番号] をクリックします。
970536 Windows Server 2003 に対して Setspn.exe サポート ツールの更新プログラム

シナリオ 1: アプリケーションにアクセスする IIS アプリケーション プールの id が変更されたとき

[既定のネットワーク サービス アカウントでドメイン ユーザー アカウントの代わりに IIS アプリケーションを実行すると、ドメイン アカウントで HTTP サービスの SPN を設定してください。このシナリオでは、IIS を実行しているサーバーの NetBIOS 名または IIS を実行しているサーバーの FQDN を使用して、IIS のアプリケーションにアクセスします。

NetBIOS 名を使用して IIS アプリケーションをアクセスする次のコマンドを使用しています。 NETBIOS_NAME_OF_IIS_SERVER IIS を実行しているサーバーの NetBIOS 名です。
Setspn – S HTTP/NETBIOS_NAME_OF_IIS_SERVER ドメイン \ ユーザー名
たとえば、コマンド次のコマンドのように可能性があります。
Setspn – S HTTP/iis6server1 mydomain\appPool1
FQDN を使用して IIS アプリケーションをアクセスする次のコマンドを使用しています。 FQDN_OF_IIS_SERVER IIS を実行しているサーバーの FQDN です。
Setspn – S HTTP/FQDN_OF_IIS_SERVER ドメイン \ ユーザー名
たとえば、コマンド次のコマンドのように可能性があります。
Setspn – S HTTP/iis6server1.mydomain.com mydomain\appPool1

シナリオ 2: ホスト ヘッダーを使用して Web アプリケーションへのアクセスします。

Web アプリケーションにアクセスするには、ホスト ヘッダーを使用して、HTTP サービスの SPN を設定する必要があります。

[既定のアカウント、ネットワーク サービス アカウント、ローカル サービス アカウント、ローカル システム アカウントなど、Web アプリケーションを実行すると、次のコマンドを使用できます。
Setspn –、HTTP/HOST_HEADER NETBIOS_NAME_OF_IIS_SERVER
このコマンドで、 HOST_HEADER ホスト ヘッダーをブラウザーに入力するウィンドウに、アプリケーションにアクセスして NETBIOS_NAME_OF_IIS_SERVER IIS を実行しているサーバーの NetBIOS 名です。

たとえば、アプリケーションのコマンド、次のコマンドのように可能性があります。
Setspn – HTTP/www.test.com iis6server1
ドメイン アカウントでアプリケーションを実行する場合は、次のコマンドを使用できます。
Setspn –、HTTP/HOSTHEADER_OR_DNS_ALIAS ドメイン \ ユーザー名
このコマンドで、 HOSTHEADER_OR_DNS_ALIAS ホスト ヘッダーまたは Web アプリケーションへのアクセスに使用する DNS エイリアスです。

たとえば、アプリケーションのコマンドのようになります、次のコマンドのいずれか。
  • Setspn – HTTP/www.test.com mydomain\appPool1
  • Setspn – HTTP/www.test3.com mydomain\appPool2

シナリオ 3: クラスターまたは負荷分散環境で IIS アプリケーションをアクセスします。

クラスター化された環境で、または負荷分散環境で IIS を実行するときにノードの名前を使用して、クラスター名の代わりを使用してアプリケーションがアクセスします。このシナリオには、ネットワーク負荷分散が含まれます。クラスター テクノロジでは、ノードはクラスターのメンバーであるコンピューターを示します。このシナリオでは、認証プロトコルとして Kerberos を使用して、同じドメイン ユーザー アカウントを使用する IIS の各ノード上のアプリケーション プール id を構成しなければなりません。同じドメイン ユーザー アカウントを使用するには各 IIS ノードを構成するのには、次のコマンドを使用します。
Setspn –、HTTP/CLUSTER_NAME ドメイン \ ユーザー名
たとえば、コマンドのようになります、次のコマンドのいずれか。
  • Setspn – HTTP/www.myIISCluster.com mydomain\appPool1
  • Setspn – HTTP/www.myEXCHCluster.com mydomain\appPool2

シナリオ 4: 使用する SQL Server のアプリケーションにアクセスするには

バックエンド サーバー上の Spn を IIS Web アプリケーションには、SQL Server を実行しているバックエンド コンピューターへのアクセスが必要なかどうかに確認する必要があります。必要な Spn が正しく構成されていない場合は、Web アプリケーションが正しく動作しない可能性があります。

SQL Server を実行しているバックエンド コンピューターの MSSQLSvc で、ローカル システム アカウントで実行しているかどうかとFQDN_OF_SQL_SERVER:port ポート番号はコンピューター名を使用する必要があります。SQL Server を実行しているコンピューターの Spn を確認するのには、次のコマンドを使用します。
Setspn – L SQL_SERVER_COMPUTER_NAME
SQL Server を実行しているコンピューターの名前の SPN を設定するには、次のコマンドを使用します。
Setspn – MSSQLSvc/FQDN_OF_SQLSERVER:port SQLSERVER_COMPUTER_NAME
MSSQLSvc、ドメイン アカウントで SQL Server を実行しているバックエンド コンピューターを実行しているかどうかとFQDN_OF_SQL_SERVER:port ポート番号はドメイン アカウントを使用する必要があります。ドメイン アカウントの Spn を確認するのには、次のコマンドを使用します。
Setspn – L のドメイン \ ユーザー名
SQL Server を実行しているコンピューターの名前の SPN を設定するには、次のコマンドのいずれかを使用します。
  • Setspn – MSSQLSvc/FQDN_OF_SQLSERVER:portFQDN_OF_SQLSERVER
  • Setspn – MSSQLSvc/FQDN_OF_SQLSERVER:portドメイン \ ユーザー名

SPN のヘルパー スクリプト

次のサンプル スクリプトを使用するには、IIS アプリケーションの Spn を検索します。このスクリプトは、重複した Spn 検索にも使えます。このスクリプトを使用するには、次の手順を実行します。
  1. [スタート] ボタン、実行をクリックして型 メモ帳と入力し、[OK] をクリックします。
  2. メモ帳のファイルに次のスクリプトを貼り付けます。
    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. Spnhelper.vbs としてファイルを保存します。
  4. コマンド プロンプトで、適切なコマンド ライン オプションを使用して、Spnhelper.vbs ファイルを実行します。

    メモ Spnhelper.vbs ファイルのコマンド ライン オプションを表示するには次のように入力します。 Spnhelper.vbs/help コマンド プロンプトと ENTER キーを押します。

追加の考慮事項

コンピューター アカウントまたはドメイン アカウントに対して、必要な SPN が設定されている場合でも、Kerberos 認証が失敗することがあります。Kerberos 認証が予期せず失敗した場合は、以下行います。
  • 重複する Spn がないこと、グローバル カタログに SPN を確認します。

    たとえばと myDomain\appPool2 アカウント myDomain\appPool1 アカウントの SPN を HTTP/www.test.com を設定の別のアカウントの Spn が設定されていても、重複する SPN が存在します。さらに、HTTP/iis6server1.mydomain.com SPN が、myDomain\appPool1 のアカウントの設定し、サーバーのコンピューター アカウントに関連付けられている SPN を HTTP/iis6server1.mydomain.com も、またがある重複した SPN。1 つのホスト SPN と 1 つの HTTP SPN を持つことができます。HTTP SPN を明示的にホスト エントリの下に含まれる暗黙的なものより優先されます。ただしかどうかは、URL をユーザーの種類が 1 つ以上のユーザー アカウントとコンピューター アカウントを 1 つ以上に関連付けられているは、重複した SPN。
  • Spn が他のドメイン コント ローラーにレプリケートされていることを確認します。

    ドメイン コント ローラー間のレプリケーションの問題を他のドメイン コント ローラーにレプリケート、Spn ができなくなります。Spn は、その他のドメイン コント ローラーにレプリケートされず、ときに一部のクライアント コンピューターから、アプリケーションは動作しません。たとえば、myDomain\appPool1 アカウント ドメイン コント ローラー上の HTTP/www.test.com SPN が設定されている場合 HTTP/www.test.com SPN が見つかりません myDomain\appPool1 2 番目のドメイン コント ローラーでアカウントの SPN が 2 番目のドメイン コント ローラーにレプリケートされていない場合。

    メモ 既定では、レプリケーションは 15 分かかります。
  • Kerberos 認証をサポートする Web サーバーが構成されていることを確認します。これには、[NTAuthenticationProviders キーの IIS メタベース設定をNTLMに変更されていないことを確認します。既定の設定は、ネゴシエート、NTLMです。
  • サーバーまたはサービスの資格情報の委任があるが委任に対して信頼されていることを確認します。
  • サービスが実行されているアカウントが委任に対して信頼されているかを確認します。
  • Active Directory は、アプリケーションにアクセスするユーザーのアカウントは機密で委任できない] チェック ボックスがオフになってことを確認します。
  • 場合は、アプリケーションがサーバーから直接アクセスする、ループバック セキュリティチェック ボックスがオフになっていることを確認します。ループバック チェックが無効になっていることを確認する方法の詳細については、次のマイクロソフト サポート技術資料を参照する次の文書番号をクリックしてください。
    896861 統合認証を使用して、IIS 5.1 または IIS 6 でホストされている Web サイトを参照するとエラー 401.1 が表示されます。
  • クライアントが Kerberos が有効なクライアントであることを確認します。また、Internet Explorer でWindows 統合認証を有効にする設定が有効であることを確認します。[ツール] メニューの [インターネット オプション] をクリックして、[詳細設定] タブをクリックし、 Windows 統合認証を有効にする] チェック ボックスがオンになっていることを確認してください。
  • Kerberos プロセスの一部であるすべてのコンピューターがあるの一貫性のある名前解決が Kerberos の信頼によって接続されていることを確認します。たとえば、Kerberos プロセスに関係するコンピューターが同じフォレスト内に、フォレスト間の Kerberos 信頼の一部であることを確認します。
  • トークンのサイズが設定されている値を超えていないことを確認します MaxTokenSize プロパティ。また、要求のサイズが設定されている値を超えていないことを確認します MaxFieldLength プロパティ。Kerberos プロセスの一部であるユーザーが多くのグループのメンバーである場合は、これらの値を超える可能性があります。
    920862 Outlook Web Access ユーザーは、Exchange Server 2003年でのメールボックスにアクセスしようとすると、エラー メッセージ:「HTTP 400 不正な要求 (要求ヘッダーが長すぎます)」
  • ドメイン アカウントをアプリケーション プールを構成するときに、必要なセキュリティ ポリシーが有効になっていることを確認します。これを行うには、ドメイン アカウントが、IIS を実行しているコンピューターでローカル セキュリティ ポリシーのメンバーであるを確認します。
    • プロセスのメモリ クォータを調整します。
    • サービスとしてログオン
    • プロセス レベル トークンを置き換え
  • UDP 経由で Kerberos 認証が正常に機能していることを確認します。既定では、Kerberos 認証は UDP を使用します。ただし、UDP パケットの損失に Kerberos 認証が失敗する可能性があります。この問題が発生したときに強制的に TCP を使用する Kerberos 認証をできます。 TCP を使用する Kerberos 認証を強制的にする方法の詳細については、次のマイクロソフト サポート技術資料を参照する次の文書番号をクリックしてください。
    244474 Windows Server 2003、Windows XP、および Windows 2000 では、UDP ではなく TCP を使用する Kerberos を強制する方法
  • 5 の分以上からタイムスタンプ サーバーの認証サーバー上のタイムスタンプは同じことを確認します。 タイムスタンプの違いを解決する方法の詳細については、次のマイクロソフト サポート技術資料を参照する次の文書番号をクリックしてください。
    232386 日付と時刻が同期されていない場合は、ログオンできません。
  • TCP および UDP ポート 88 をファイアウォールまたはルーターによってブロックされていないことを確認します。既定では、Kerberos 認証は TCP または UDP ポート 88 を使用します。
  • ドメイン ・ モードの環境が、少なくとも Windows 2000 ネイティブ モードの環境であることを確認します。ドメイン モードを確認する方法の詳細については、次のマイクロソフト Web サイトを参照してください。
  • クライアントでは、Web アプリケーションの URL をローカル イントラネット サイトに追加することを確認します。 URL をローカル イントラネットに追加する方法の詳細については、次のマイクロソフト サポート技術資料を参照する次の文書番号をクリックしてください。
    303650 FQDN または IP アドレスを使用すると、イントラネット サイトがインターネット サイトとして識別されます。
  • 各ギガビット イーサネット デバイスが最新バージョンのドライバーを使用していることを確認します。 ギガビット イーサネット デバイス用のドライバーが古い場合に発生する問題の詳細については、次のマイクロソフト サポート技術資料を参照する次の文書番号をクリックしてください。
    326152 ドメイン コント ローラーに接続できないし、ギガビット イーサネット デバイスでグループ ポリシーを適用することはできません
関連情報
Kerberos 認証を使用して、Web サイトの負荷を分散する方法の詳細については、次のマイクロソフト Web サイトを参照してください。プロキシ サーバーで Kerberos 認証を使用する場合に発生する問題の詳細については、次のマイクロソフト サポート技術資料を参照する次の文書番号をクリックしてください。
321728 Internet Explorer でプロキシ サーバーの Kerberos 認証をサポートしていません
ネットワーク認証のため、Kerberos プロトコルと NTLM プロトコルの両方をサポートするために IIS を構成する方法の詳細については、次のマイクロソフト サポート技術資料を参照する次の文書番号をクリックしてください。
215383 ネットワーク認証のため、Kerberos プロトコルと NTLM プロトコルの両方をサポートするために IIS を構成する方法
Kerberos 認証および Kerberos 認証から NTLM 認証に切り替える方法を使用する Windows SharePoint Services の仮想サーバーを構成する方法の詳細について、マイクロソフト サポート技術資料を参照する次の文書番号をクリックしてください。
832769 Kerberos 認証を使用する Windows SharePoint Services の仮想サーバーを構成する方法および Kerberos 認証から NTLM 認証に切り替える方法
Kerberos 認証プロトコルを使用して、Windows XP で非標準ポートを使用している Web サーバーまたは Windows Server 2003 に接続するときに発生する問題の詳細については、次のマイクロソフト サポート技術資料を参照する次の文書番号をクリックしてください。
908209 Internet Explorer 6 は Windows XP で非標準ポートを使用している Web サーバーまたは Windows Server 2003 に接続するには、Kerberos 認証プロトコルを使用できません。

警告: この記事は自動翻訳されています

プロパティ

文書番号:929650 - 最終更新日: 01/03/2015 16:33:00 - リビジョン: 8.0

, , Microsoft Internet Information Services 6.0

  • kbinfo kbhowto kbmt KB929650 KbMtja
フィードバック
var varClickTracking = 1; var varCustomerTracking = 1; var Route = "76500"; var Ctrl = ""; document.write("