SQL Serverを実行している本番サーバーを_CONTOSO\MachineA
_と呼びます。 IISを実行している開発サーバーがあります。これを_CONTOSO\MachineB
_と呼びます。両方のサーバーでWindowsServer 2008が実行されています。ドメインユーザーがいます。これを_CONTOSO\MyAppSvc
_と呼びます。 _myapp => MachineA
_と_myappdev => MachineB
_の2つのCNAMEレコードがあります。
私の目標は、(イントラネット)クライアントをMachineB
のIISとWindows認証を介した認証に接続し、アプリがそれらを偽装してMachineA
のSQLに接続することです。
MachineBはテスト用にSQLServerの別のインスタンスを実行しており、SSMS (on MyWorkstation) => SQL Server (on MachineB) => SQL Server (on Machine A)
を介して_SELECT * FROM [MachineA].[My App DB].App.SomeTable
_を実行することにより、SQLがダブルホップ認証用に正しく設定されていることを確認しました。
MyApp
on IIS on MachineB
は、偽装とWindows認証(ネゴシエートのみ)で設定され、MyAppPool
として実行されているMyAppSvc
で実行されます。_system.webServer/ security/ authentication/ windowsAuthentication @useAppPoolCredentials
_はtrueで、_@useKernelMode
_はです。 false。MachineB
とMyAppSvc
はどちらも、制約のない委任に対して信頼されています。MyAppSvc
には、_HTTP/myapp
_と_HTTP/myapp.contoso.local
_の2つのSPNがあります。
Wiresharkを使用して、_http://myapp/aPage
_を参照しようとすると、次のように表示されます。
問題は、DNSエントリがAレコードではなくCNAMEレコードであり、SPNがマシン名MyApp
ではなくホスト名MachineB
に設定されているという事実と組み合わされているという事実です。解決策は、MyApp
のDNSエントリをMachineB
のIPアドレスを直接指すAレコードに変更するか、SPNを追加することですHTTP/MachineB
およびHTTP/MachineB.Contoso.local
(古いものはおそらく削除される可能性があります)。