問題タブ [gssapi]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
12628 参照

java - GSSException: メッセージ ストリームが変更されました (41)

フォレスト アーキテクチャで LDAP を使用しています (すべてのサーバーと私のサーバーは Windows です)。NTLM 認証を使用して AD にバインドしています。

LDAP サーバーに対して操作を実行する Java コードがあります。

コードは、Tomcat サーブレットとしてラップされます。

JAVA コードを直接実行する場合 (LDAP 認証コードをアプリケーションとして実行するだけ)、バインドはローカル ドメイン (ローカル ドメイン = Windows にログインし、このドメインのユーザーでこのプロセスを実行) と外部ドメインの両方に対して機能します。 .

JAVA コードをサーブレットとして実行すると、バインドが機能し、あるドメインのユーザーを認証しますが、別のドメインのユーザーを認証しようとすると機能しません (Tomcat を再起動した場合にのみ機能します) )。

私は例外を取得しています:

これは同じコードで、同じ構成と同じ krb5 ファイルを使用していることに言及します。

編集: 詳細:

これは私のコードです:

そして、私の jaas_ntlm_configuration.txt ファイルには以下が含まれています。

私の krb5.conf ファイルは次のとおりです。

以下を Java パラメータとして追加しました。

func("SUB*.DOMAIN.COM", "DDC.SUB*.DOMAIN.COM") を常に同じサブドメインで呼び出すと動作しますが、あるサブドメインで呼び出してから別のサブドメインで呼び出すと、 2番目は失敗します。

詳しくは:

krb5.debug=true での出力は次のとおりです。

私に何ができる?私は何か間違ったことをしていますか?

ありがとう。

0 投票する
3 に答える
4300 参照

java - GSSAPI の javax.naming.AuthenticationException

JAVA GSSAPI を使用して NTLM バインドを実行しようとしています。

次のエラーが表示されます。

javax.naming.AuthenticationException: GSSAPI [ルート例外は javax.security.sasl.SaslException: GSS の開始に失敗しました [原因: GSSException: 有効な資格情報が提供されていません (メカニズム レベル: チケット要求のオプション設定が無効です。(101))]]

(確かではありませんが)過去に機能していたと思います。他の問題を解決するために、「kinit」を試しました。その時点から、動作が停止します。キャッシュファイルも削除しました(Windowsでkclearが見つかりませんでした)が、それでもこの問題があります。

どうすれば解決できますか?

0 投票する
1 に答える
390 参照

java - JAVA & GSSAPI: キャッシュのクリア

Active Directory (Kerberos SSO) に接続するために GSSAPI を使用する単純な Java アプリケーションを作成しました。

x と y の 2 つのレルムと KDC があります。

realm/KDC x でツールを実行すると、ツールは動作します。

realm/KDC y でツールを実行すると、ツールも動作します。

ツールを実行して、realm/KDC x (ログイン、ログアウト、ログイン、ログアウト) で 2 つの認証を実行すると、動作します。

realm/KDC y についても同じ結果です。

問題は、2 つのレルム/KDC を切り替えようとしているときです: ログイン x、ログアウト x、ログイン y、ログアウト y - 2 番目のものにログインしようとすると、例外がスローされます。

GSSException: メカニズム レベル: メッセージ ストリームが変更されました (41))

明確にするために-問題は、これら2つの間でアプリケーション全体を再起動せずに、2つの異なるレルム/ KDC(もちろん毎回1つ)を使用している場合にのみ発生します。

java/gssapi はどうにかしてレルムや krb チケットなどをキャッシュしていると思います。

問題は、このキャッシュを (アプリケーション全体を強制終了せずに) クリアするにはどうすればよいか、またはそのようなキャッシュ/静的変数がない場合、どうすれば機能させることができるかということです。

ありがとうございました!

0 投票する
1 に答える
4569 参照

java - kerberos チケットを使用して Java コードで Hadoop ファイルを作成できない

Hadoop クラスターは kerberos を使用するため、最初に kinit を使用し、次に「hadoop fs -ls /」などのコマンドを使用する必要があります。今、私は jaas と gssapi ログインを使用して、クラスター内にファイルを作成しますが、失敗しました。私のコードは次のとおりです。

以下のようなjaas.conf:

私のログインユーザー名はルートです。「hadoop jar ./client.jar」を使用する前にこのコードを実行し、kdestory を実行して kerberos キャッシュを削除すると、以下のエラーが発生します。

私はそれを機能させる方法がわかりません、誰かが私を助けてくれますか、どうもありがとう。

0 投票する
1 に答える
28035 参照

java - Java を使用したケルベロス

Java から kerberos kdc にログインしようとしています。しかし、Javaは例外をスローしています。ログインは成功したようですが、何かがログインを停止しています。どうしてか分かりません ?誰かがこの問題の解決策を持っていますか? これが私のJavaシステム出力です:

そして私のJavaコード:

0 投票する
1 に答える
8815 参照

curl - SSPI による Kerberos 認証

注:私はなんとか進歩を遂げました。現在の質問の編集を参照してください。ありがとうございます。


Windows で libcurl を使用して、Kerberos/GSSAPI 認証で Web サイトにアクセスしたいと考えています。最初は MIT Kerberos で解決しようとしましたが、SSPI を使用した NTLM 認証も必要です (libcurl は 2 つの異なる実装からの両方の使用をサポートしていません)。そのため、Windows SSPI ライブラリを使用して Kerberos で認証しようとしています。SSPI と SPNEGO をサポートする libcurl をコンパイルすることができました。

今私の問題は、提供された資格情報を使用して提供されたレルムに接続する必要があることです(現在のユーザーのレルムまたは別のレルムである可能性があります)。私が理解したことから、Kerberos チケットを取得するには、secur32.dll/security.dll から AcquireCredentialsHandle と InitializeSecurityContext を呼び出す必要があります。

しかし、それを機能させようとするたびに、私は:

  1. SSPI キャッシュで提供された資格情報/レルムの DC からチケットを取得しないでください (エントリを表示するために kerbtray.exe を使用しています)。
    • これらのメソッドを使用する場合、このキャッシュにチケットが表示されますか?
  2. InitializeSecurityContext/AcceptSecurityContext のクライアント/サーバー ループバックで ImpersonateSecurityContext を呼び出した後に libcurl を使用し、Wireshark でパケットを確認すると、libcurl は提供された資格情報を使用せず、代わりに NTLM にフォールバックすることがわかります (認証が失敗するだけです)。 )
    • ループバック クライアント/サーバーは正しい動作ですか (Web 上で他の実装例を見つけることができませんでした)。
    • 偽装が成功したと仮定して、libcurl はスレッドの偽装された資格情報を使用する必要がありますか?
    • libcurl は NTLM + Kerberos と SSPI をまったくサポートしていますか?

デバッグとテストを容易にするために、MIT Kerberos ライブラリの kinit など、SSPI キャッシュにエントリを追加するツールを知っていますか? Windows Server 2003 Resource Kit Tools を使用していますが、そのようなツールが見つかりませんでした...

どんな助けでも大歓迎です!


編集

よし、libcurlを使って欲しいものを作る方法を見つけました。最後に、事前に SSPI で何らかの作業を行う必要があると想定していましたが、curl はそれを適切にサポートしています。

curl は、適切にビルドされたバージョンの curl を SSPI および SPNEGO フラグとともに使用すると、kerberos レルムに対する認証を行い、LSA キャッシュに保存します。

curl.exe を使用してテストする場合、ユーザー名/パスワードとともに--negotiate引数を指定する必要があります。ただし、libcurl を使用する場合は、単に CURLOPT_HTTPAUTH オプションを CURLAUTH_GSSNEGOTIATE を含むもの (CURLAUTH_ANY など) に設定するだけです。私のテストでは、libcurl は予想される Kerberosハンドシェイクを実行しました。

  1. Web サーバー (web.b.com、B.COM は Web サーバーの kerberos レルム) に接続します。
  2. WWW-AuthenticateパラメータがNegotiateに設定された、許可されていない応答を受信しました
  3. libcurl/SSPI は、TGS-REQ を現在のユーザーのドメインのドメイン コントローラー (DC) (A.COM としましょう) に送信します。
  4. どういうわけか、次の TGS-REQ は Web サーバー (B.COM) のドメイン コントローラーに送信されます。
  5. ドメイン B.COM の Kerberos チケットを受信し、エントリが LSA キャッシュに追加されます (klist.exe または kerbtray.exe で表示可能)
  6. libcurl は、認証情報 (GSS-API) を使用して Web サーバーに HTTP 要求を送信します。

ただし、ここに私の新しい問題があります。このハンドシェイクはすべて、現在ログに記録されている資格情報、たとえばuser1@A.COMで行われました。A.COM と B.COM の間には信頼関係があり、私のユーザーはアクセスできるため、機能します。提供された資格情報 ( user2.B.COM ) を使用してログインしたいのですが?

また、現在ログに記録されているユーザーとは異なるユーザーの LSA キャッシュにエントリを追加できるかどうかはよくわかりません??

libcurl がこのユーザーに関連付けられたチケットにアクセスして Web サーバーに認証されるように、ユーザーuser2.B.COMになりすましてこれを機能させるにはどうすればよいですか?

0 投票する
1 に答える
1119 参照

java - Java 6 および Java 7 で InitialLdapContext が失敗する

JAVA 5 で GSSAPI を正常に使用しています。JAVA 6 および 7 では、InitialLdapContext 呼び出しが次のスタックトレースで失敗します。

Java 6 または 7 で何がうまくいかないのか、誰にもわかりませんか?

ktab ファイルは、jre 7 の ktab ツールで作成されます。

"c:\Program Files\Java\jre7\bin\ktab.exe" -a user@DOMAIN.DE password -k my.keytab -n 0 "c:\Program Files\Java\jre7\bin\ktab.exe" -a Service/host@DOMAIN.DE パスワード -k my.keytab -n 0

Windows サーバー 2008 アクティブ ディレクトリ

覚えておいてください: Java 5 を使用している場合、InitialLdapContext 呼び出しは期待どおりに機能しています。

前もって感謝します

マイケル

0 投票する
1 に答える
17994 参照

kerberos - Kerberos: UPN と SPN の違い

現在、GSSAPI を使用してクロスプラットフォーム アプリケーションを kerberizing しています。UPN と SPN の違いについては明確ではありませんが。

開発環境は、CentOS 6.4 上の Samba4 AD DC サーバーであり、Windows サーバー 2008 R2 がドメイン内のメンバー ボックスであり、たとえば、EXAMPLE.COM です (Win2008 を DC として直接使用しない理由に興味があるかもしれません。前述のように、アプリケーションははクロスプラットフォームなので、現在この設定でテストしています. 通常の Win DC-Linux MEM 設定は問題なく動作します.) アプリケーションを実行する新しいユーザーを作成しfoobar:usersます。UPN などを使用foobar@EXAMPLE.COMして Kerberos に対してアプリケーションを認証すると、受信し続けます。

Kerberos: プリンシパルがサーバー エラーとして機能しない可能性があります

Samba メールリストのスレッドに従ってapp/dc.example.com、UPN のようなサービス プリンシパル名を作成する必要があると思います。samba-tool

今回は別のエラーが表示されます

Samba4 KDC - hdb にそのようなエントリが見つかりません

私の質問は、UPN と SPN の違いは何ですか? によってsamba-tool spn list foobar、それはservicePrincipalNamefoobar を持ってapp/dc.example.comいると言います。UPN を SPN に関連付けるにはどうすればよいですか?

どうもありがとうございました。