RMI とリモートで通信する Java クライアントとサーバー (Win7 ホスト上) を作成しました。クライアント ユーザーが資格情報を提供する必要なく (つまり、シングル サインオン)、サーバーがクライアント ユーザーを認証するようにします。Window のSSPIを利用するために、 Waffleライブラリを使用しています。
- サーバーは、サービス アカウントdev\svc_serviceaccountを使用してhost1.dev.mydomain.comで実行されています
- dev\svc_serviceaccountの SPN、test/host1.dev.mydomain.comを追加しました
- クライアントは、host2.dev.mydomain.comでdev\testuserとして実行されており、上記の SPN を使用するように構成されています
- クライアントとサーバーの両方が Kerberos (ネゴシエートではない) SSPI プロバイダーを使用するように構成されている
すべてが期待どおりに機能し、サーバーはクライアントを正常に認証し、Wireshark を使用して、クライアントとドメイン コントローラーの間で Kerberos パケットが送信されていることを確認できます。
次に、サーバーを別のサービス アカウント ( dev\svc_serviceaccount2 ) として実行するように変更します。このサービス アカウントの SPN はありません。クライアントは引き続き実行され、元の SPN で構成されます。予想どおり、サーバーはクライアントの認証に失敗するようになりました。
最後に、dev\serviceaccount2 のパスワードをdev\serviceaccount1と同じになるように変更し、上記の失敗のシナリオに従って実行します。ただし、サーバーはクライアントを正常に認証します!!
秘密鍵はパスワード ハッシュから派生していると思いますが、これにはまだ驚かされます。これがSSPIの期待される機能であるかどうかを誰でも確認できますか? コード (またはワッフル) に問題があるかどうかを判断しようとしています。それとも、環境要因がこれを引き起こしているのでしょうか? どんな助け/説明も大歓迎です。