19

Java で Kerberos を使用してシングル サインオンを実装したいと考えており、Windows ログオンのチケットを使用してサービスのチケットを作成することに成功しました。残念ながら、レジストリ キー「allowtgtsessionkey」が有効になっている場合にのみ、そのチケットを作成できます。無効にするとすぐに、「識別子が期待値と一致しません (906)」というメッセージの例外が発生します。レジストリ キーについては、http://java.sun.com/j2se/1.5.0/docs/guide/security/jgss/tutorials/Troubleshooting.htmlおよびhttp://support.microsoft.com/kb/308339に記載されています。

残念ながら、アプリケーションが使用されるコンピューターのレジストリにアクセスできないため、変更せずにこれを行う方法を探しています。Internet Explorer または Mozilla Firefox で SPNEGO 経由でシングル サインオンを行うと、チケット キャッシュにサービス チケットが作成されるため、レジストリ キーを設定せずにこれを行う方法が必要です。Javaでこれを行う方法を知っている人はいますか?

助けてくれてありがとう、メミンガー

更新: 私はこの問題をあきらめています。Windows レジストリ キーは、チケット キャッシュ内のチケット (より正確にはサブジェクト) へのアクセスを防ぎます。Windows 上の Java は独自の GSSAPI 実装を使用しており、サービス チケットを作成するにはチケットにアクセスする必要があると思います。ただし、SSPI Windows API はチケット キャッシュに完全にアクセスできるため、サービス チケットを作成できます。この API は Web ブラウザーで使用されますが、Java では使用されません ( http://java.sun.com/developer/technicalArticles/J2SE/security/#3によると)。Web ページに 1 回アクセスした後に Firefox で SSPI を無効にすると (サービス チケットが作成されます)、そのページには引き続きアクセスできるため、SPPI API を使用してサービス チケットを作成するコマンド ライン ユーティリティで十分でしょう。

私たちにとって、これは、シングル サインオンを放棄するか (これは受け入れられません)、アプリケーションのクライアント側で認証を行うことができるようになったことを意味します (ユーザー名を読み取ることしかできず、チケットを検証することはできないため)。サーバー)、これは主要なセキュリティ リスクです。より強力なセキュリティ制約が、使用するには複雑になりすぎて、より大きなセキュリティ ホールにつながる別の例です。

4

4 に答える 4

4

問題を誤解している場合は申し訳ありませんが...

SSO タイプのシステムのポイントは、クライアントが (別個の) 認証サーバーに対して直接認証し、そこからチケットを取得することです。次に、使用するターゲット サーバーにチケットを渡します。各ターゲット サーバーは、チケットが認証サーバーで有効であることを確認します。チケットが検証された場合、サーバーは、クライアントが (信頼された) Kerberos サーバーに受け入れ可能な資格情報を提示することによってのみチケットを取得したと見なすことができます。

プロセスのどこにも、サーバーがクライアントに代わって認証する必要はありません。このようなシステムでは、クライアントの資格情報を認識して検証する必要がある唯一のサーバーは認証サーバーです。他のサーバーがこの情報にアクセスする必要はありません。このようにして、クライアントは 1 回の認証交換だけで多くのサーバーに対して認証を行うことができ、複数のサーバーに格納されたり、複数のサーバーにアクセスしたりすることによって資格情報が危険にさらされることはありません。

実装は正常に機能しているようです。認証はアプリケーションのクライアント側で行われる必要があり、これは正しく、セキュリティ リスクではありません。

于 2010-02-28T05:51:08.033 に答える
2

Java 6 で sun.security.jgss.native を設定しようとしましたか? SSPI は Windows の「ネイティブ」インターフェースではないでしょうか?

于 2010-07-08T06:40:04.387 に答える
1

JNA経由でネイティブ SSPI API にアクセスできます。例については、WAFFLEのWindowsAuthProviderImplまたはApache HC ライブラリのWindowsNegotiateSchemeを参照してください。

于 2015-10-05T09:16:17.543 に答える