web-dev-qa-db-ja.com

CNAMEDNSレコードを使用する場合のKerberosエラーAPP_MODIFIED

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。MachineBMyAppSvcはどちらも、制約のない委任に対して信頼されています。MyAppSvcには、_HTTP/myapp_と_HTTP/myapp.contoso.local_の2つのSPNがあります。

Wiresharkを使用して、_http://myapp/aPage_を参照しようとすると、次のように表示されます。

  • MyWorkstation => MachineB
    • GET/aPage
    • ホスト:myapp
  • MachineB => MyWorkstation
    • 401無許可
    • WWW-認証:交渉
  • MyWorkstation => MachineB
    • GET/aPage
    • ホスト:myapp
    • 承認:チケット:
      • レルム:CONTOSO.LOCAL
      • sname:HTTP/MachineB.Contoso.local
  • MachineB => MyWorkstation
    • 401無許可
    • WWW-認証:
      • エラーコード:ERR-MODIFIED
      • レルム:CONTOSO.LOCAL
      • sname:MyAppSvc
3
Ethan Reesor

問題は、DNSエントリがAレコードではなくCNAMEレコードであり、SPNがマシン名MyAppではなくホスト名MachineBに設定されているという事実と組み合わされているという事実です。解決策は、MyAppのDNSエントリをMachineBのIPアドレスを直接指すAレコードに変更するか、SPNを追加することですHTTP/MachineBおよびHTTP/MachineB.Contoso.local(古いものはおそらく削除される可能性があります)。

1
Ethan Reesor