問題タブ [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.
java - GSS-APIJavaの奇妙なエラー
次のチュートリアルを実行しています:http: //download.oracle.com/javase/6/docs/technotes/guides/security/jgss/tutorials/BasicClientServer.html
次のプロンプトが表示されます。
次のエラーが発生します。
これの根本的な原因を突き止めることができますか?
java - Java gss-api の Kerbtray レルムと kdc
Win7 で kerbtray.exe を使用しています。
java gss-api ログインのレルムと kdc を正確に知るにはどうすればよいですか?
c - コンテキストを受け入れる GSS-API エラー: サービス キーが利用できません - Solaris コード、Windows KDC
Active Directory に対して動作するテスト Kerberos クライアント/サーバー ペアを取得しようとしています。企業ネットワークの予備ドメインに、「RichardC」、「Server1」、「Server2」という 3 人のユーザーを作成しました。私のサーバーのユーザーは、1 つは KRB5_NT_PRINCIPAL で、もう 1 つは KRB5_NT_SRV_HOST で、異なるサービス プリンシパル名にマップされています。
今日のシステムでは DES が必要ないことを期待して、今回は +DesOnly オプションを使用しませんでした。管理上の懸念を避けるため、この質問では実際のドメイン名を mydomain に置き換えました。
これにより、キータブが表示されます。私はそれをリストすることができます:
キータブのキーを使用して kinit -k を使用してログインすることもできるので、うまくいくようです。
私は自分のテスト プログラムと、http://download.oracle.com/docs/cd/E19683-01/816-1331/sampleprogs-1/index.htmlからのテスト プログラムに失敗しました。そのプログラムでは、サーバー上で GSS_C_NT_HOSTBASED_SERVICE を GSS_C_NT_USER_NAME に変更し、両方のキータブで名前を認識できるようにしました。Oracle Demoサーバーを次のように実行しています
とクライアント
結果:
この場合と私自身のテスト コードの両方で、クライアントが最初のトークンを送信した後、サーバーがそれをデコードしようとしているときにエラーが発生します。
klist は、クライアントに付与されたキーを示します。キータブにあるArcFourを使用しています
UNIX マシン (セルビア) は別のレルム (ここでは mydomain.com と呼んでいます) に属している可能性がありますが、Kerberos がセットアップされていないようです。BENCHMARKING.RDDEV.LOCAL 領域を指すローカルの krb5.conf ファイルを使用していますが、マシンがホスト名で DNS を使用しようとすると、間違った応答が返される可能性があります。私のkrb5.confには
default_tkt_types などのオプションが無効になっているようです。
質問は - どうすればエラーを修正できますか?
ありがとう - リチャード
c - 何らかの理由で、Oracle GSS にリンクすると動作が異なります (Solaris)
テスト プログラムは問題なく動作します。クライアントとサーバーを作成し、それらを相互に実行できます。KRB5_CONFIG 環境変数を設定し、ローカル構成をテストに使用できます。
何らかの理由で、コードを本番ソフトウェアに配置すると失敗します。ハードコーディングされた名前で gss_import_name() を呼び出すだけに main() 関数を削除しても、「構成ファイルを開けません」というメッセージが表示されます。
truss を実行すると、多くの Oracle が実行されていることがわかります。多くの異なる Oracle トレース ファイルを開こうとします。それも開けようとする
指定したファイルの代わりに。
オラクルが間違った gss を提供しているか、巨大で複雑なビルド システムの他のオプションを提供しているかのようです。私は -L/usr/lib/sparcv9 に注意しますが、これは私の -lgss の後にありますが、それが重要な場合 (C で定期的に作業してから長すぎます!)。そのディレクトリ内の libgss.so.1 は /usr/lib 内のものよりも大きいですが、そのオプションをテスト プログラムのリンク コマンドに入れても問題はありません。
何か助けはありますか?
ありがとう - リチャード
java - LoginContextへの入力
とにかく、callbackhandlerを使用する代わりにLoginContextを設定できますか?私のプログラムはユーザー名とパスワード(callbakchandlerが処理するもの)を受け取ります。手動で情報を入力するのではなく、それらを使用したいと思います。
とにかくこれを行うことはありますか?
java - Javaで取得したTGTをSSH/その他のアプリケーションに使用する
現在、JAASを使用し、Active Directoryを実行しているWindowsサーバーから送信されたチケット付与チケットを取得することで、Javaアプリケーションでユーザーを認証できます。Krb5LoginModule
これは、Java で簡単に実行できます。
ここで、Javaアプリケーションからsshコマンドを実行し、TGTを使用して、sshがパスワードを要求しないようにします。sshをkerberosで動作させるためのチュートリアル(OpenSSHとKerberoskinit
)を見たことがありますが、それらはTGTを取得するために使用され、チケットは/ tmp/krbcc_XXXに保存されます。次に、チケットが生成された後、彼らは自由にsshすることができます。
TGTをディスクに書き込んで/tmp/ krbcc_XXXに保存するか、sshコマンドをで実行することはできますがPrivilegedAction
、どちらが機能するかはわかりません。これを行うための受け入れられた方法はありますか?
基本的に、私はこのようなものを呼び出して、パスワードを要求されないようにします。
python - Python suds クライアントで kerberos 認証を行う方法
証明書の失効を行う Windows ベースの Web サービスがあります。suds
これは、証明書を失効させるためにpython パッケージで使用する WSDL ファイルを提供します。
サービスは Kerberos/GSSAPI によって保護されているため、資格情報を提供するためのキータブ ファイルがあります。suds
keytab ファイルを使用して資格情報を Web サービスに提供するようにクライアントに指示するにはどうすればよいですか?
言い換えれば、私はこのようなことをしたい:
sasl - SASLとgssapi
認証を伴うプロジェクトを行っていますが、SASLとgssapiの違いを完全に理解することはできません。gssapiはSASLのカバーの下で使用されていますか?SASLなしでgssapiを使用できますか?正しいことは何ですか?
libsaslを使用する場合、libgssapi_ *とリンクする必要がありますか?
ありがとう。
java - ホストベース サービスの正しい Kerberos プリンシパル タイプ
Kerberos プリンシパルにはいくつかの種類があります。通常のユーザー プリンパルのようなものmichael-o@COMPANY.COM
はKRB_NT_PRINCIPAL
. しかし、のようなサービスはHTTP/host.company.com@COMPANY.COM
どうでしょうか? のようないくつかの可能なタイプがありますKRB_NT_SRV_{INST|HST|XHST}
。正しいものは何ですか?
私の理解INST
では、TGTのみが対象です。正解は だと思いますHST
。Oracle の JDK ソース コードで手がかりを見つけることができませんでしたが、これらの 2 つの矛盾する点は1対2です。
java - Java GSSAPI: 2 つの GSSCredential インスタンスの比較
私のコードは現在、私の Web サイトのユーザーに対して SPNEGO (Kerberos) 認証を実行しても問題なく動作します。ユーザーの身元の確認に基づいていくつかの決定を加速するために、特別なキャッシュメカニズムが用意されています。単純なパスワード認証の場合、これは非常に簡単です。「現在の」ユーザーとパスワードの組み合わせを「古い」ものと比較します。変更がない場合、決定は引き続きキャッシュできます。それ以外の場合は、再評価する必要があります。
Kerberos についても同じことをしようとしています。私はそれをほとんど機能させましたが、なぜGSSCredential.equals()
機能しないのか困惑しています。特に、各リクエストを認証した後に取得した GSSCredential インスタンスは、同じユーザー、同じサービス、同じ状況で取得されたものであるという点で「同一」です (と思います)。a を実行しtoString()
て出力を比較すると、それらは同じです (はい、これは無関係であることはわかっていますが、おそらく等しいはずであるということはまだ良い兆候です)。
ただし、GSSCredential_1.equals(GSSCredential_2)
リクエスト間では常に false を返します。これは、それぞれが異なる SPNEGO チケット (リプレイ シナリオを回避するために Kerberos に従って必要) を使用して取得されている可能性がありますが、それらのチケットは依然として同じプリンシパルに属しており、同じサービス プリンシパルを「対象」としていました。
私が行う必要があるコードの決定は、次のように表現するのが最適です。
これらの新しい資格情報は、以前に使用されたものと同じセキュリティ プリンシパルを表していますか? 有効期限、目的に対する有効性などの問題は、個別に評価され、後で評価されます。
それらの名前を比較すると「うまくいきます」が、もう少し堅牢なものを望んでいました。
何か案は?