問題タブ [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.
authentication - 自分のアプリケーションから kerberos サーバーと対話するにはどうすればよいですか
私のネットワークには、ユーザー名/パスワード認証用の kerberos サーバーがあります。アプリケーションを実行するマシンには kerberos クライアントが機能しているため、ユーザーは kinit などを使用できます。
独自のカスタム アプリケーションからプログラムでサーバーと対話するにはどうすればよいですか? 例として推奨される言語は C です。
特定の機能にアクセスする前に、アプリケーションのユーザーが kerberos サーバーに対して認証されるようにします。ユーザー名とパスワードを尋ねる必要があると思います - kinit が呼び出されていない可能性があります。
アプリケーションをホストするマシンは、OS X と Debian/Linux を実行します。
その答えには、GSSAPI が関係している可能性が高いと思います。もしそうなら、これのための良いチュートリアルはありますか?
jetty - Kerberos認証をJetty6に統合することは可能ですか?
現在、Kerberosを介して認証を追加する必要がある組み込みjetty6.1.14サーバーを実行するアプリケーションがあります。私はKerberosを初めて使用します。これにより、タスクがおそらく100倍難しくなります。私はインターネットを調べて、それが可能であるかどうかについて矛盾する報告を見つけましたが、どのように進めるかについてのガイダンスを提供することはあまりありません。
サーバーは基本的にKerberosを介してユーザーを認証できるようになりましたが、クライアントにKerberosチケットを自動的に送信させる方法を見つけることができません。fromauth-methodを使用する必要がありますが、これにはヒントがあります。文書化が非常に不十分なフィルターを使用している。
私の質問-そしてそれが少し曖昧であることをお詫びします、私はこれほど長い間憤慨していません-Jetty 6のログインフォームなしでKerberos認証をプラグインするためのガイダンスを要求することですか?それとも私は運が悪いのですか?誰かがこのタイプの認証を桟橋6に追加しましたか?
java - Java/C# Kerberos 相互運用は可能ですか?
Java でソケットを使用して Kerberos サーバー/クライアントを実装しました。クライアントはサービス TGT をサーバーに送信し、サーバーはクライアントが本物であることを認識しています。
私の主な関心事は、詮索する「中間者」攻撃です。誰かが TGT をキャプチャして、クライアントになりすますことができます。
純粋な Java 実装では、これは問題ではありません。以降の通信は、スヌーパーにはないサービス セッション キー (GSSContext.wrap()/GSSContext.unwrap()) で暗号化されるためです。
ただし、クライアント アプリは C# で書き直す必要があります。
通信の暗号化を維持するための2つのオプションは次のとおりです。
- C# で独自の wrap() および unwrap() メソッドを作成する
- SSL/TLS を使用します。
オプションとして SSL を検討する前に、オプション 1 は可能ですか?
java - Microsoft IE から Java サーバーへの Active Directory SSO を使用すると、GSSException が発生するのはなぜですか?
Java Web アプリケーション (SPNEGO/Kerberos を使用) 用の Active Directory シングル サインオン認証システムを構築していましたが、すべてが Firefox または (報告によると) Safari で正常に動作しますが、Internet Explorer では例外が発生します。
実際、Windows のパッチがインストールされる前は、IE は機能していると思っていました。
c - GSS-API を使用するプログラムは? まともなサンプルプログラムはありますか?
GSS-API を使用したいと思っていましたが、簡単なクライアント/サーバー ペアの適切なサンプル コードを見つけるのに苦労しているため、今はよくわかりません。Sun にはサンプル コードを含むドキュメントがありますが、それはGNU GSS-APIなどにはないいくつかの独自関数を使用して、GSS API 実装用に特別に書かれています(GNU 実装に対してそれらを再実装する方法がすぐにはわかりません)。 )。さらに、これは ANSI C よりも前の言語で書かれており、K&R 関数宣言なども含まれています (宣言を変換するのに問題はありませんでしたが、Sun のサンプル コードは古すぎて意味がないのではないかと思いました)。
過去 10 年間、アプリケーションで GSS-API を使用したことがありますか? 読む価値のあるサンプル プログラムを含む自己完結型のチュートリアルを知っていますか?
または、間違った方向に進んでいる可能性があり、代わりに SASL を試す必要があります。GNU GSS-API の作成者自身も同様のことを示唆しています。
価値のあることとして、私は Linux で GCC を使用しており、他の目的のために Kerberos を既にセットアップしています。
apache - Firefox が kerberos サービス チケットのネゴシエーションを続けるのはなぜですか?
Kerberos でいくつかのテストを実行したところ、Firefox と Kerberos に関連するいくつかの奇妙な動作が見つかりました。クライアントからのリクエストを処理するときに kerberos 資格情報をチェックするように構成された Apache + mod_auh_kerb を実行しているサーバーがあります。Kerberos 認証が実行され、有効な資格情報を持たないユーザーは拒否されます。ただし、次の点がわかりません。
最初のリクエストが行われると、TGS はクライアントの /tmp/krb5ccXXXX にキャッシュされますが、ネットワーク キャプチャにより、firefox がすべての接続に対して TGS をリクエストすることが明らかになりました。サービス チケットがキャッシュされているのに、他のリクエストに再利用されないのはなぜですか? すべての接続は次のとおりです。
クライアント = GET index.html => サーバー
クライアント <= 401 認証が必要 = サーバー
クライアント = TGS-REQ => KDC
...
クライアント <= TGS-REP = KDC
クライアント = GET index.html + kerberos ペイロード => サーバー
クライアント < = 200 OK = サーバー
Konqueror は期待どおりに動作するため、これは構成の問題ではありません。
何か案は ?
前もって感謝します。
PS: これは GET リクエストではそれほど大きな問題ではありませんが、フォームベースのアップロード (POST) データがサーバーに 2 回送信されないように注意してください !!
java - ActiveDirectoryでのLdapエラー49のサブエラーコード568の意味
SASLGSSAPIを使用してActiveDirectoryに対して認証するJavaコードを作成しています。ほとんどの場合、このコードは正常に機能していますが、1人のユーザーに対して次の応答があります。
49はこれが認証の失敗であることを意味し、関連するサブコードは568であることを知っていますが、そのデータの次の意味しか認識していません。
- 525-ユーザーが見つかりません
- 52e-無効なクレデンシャル
- 530-現時点ではログオンできません
- 532-パスワードの有効期限が切れました
- 533-アカウントが無効
- 701-アカウントの有効期限が切れました
- 773-ユーザーはパスワードをリセットする必要があります
これまでのところ、Microsoftからこれらのエラーコードの信頼できるソースを見つけることができず(このリストはフォーラムの投稿からまとめられています)、その568エラーについては何も見つかりません。
誰かがそれが何を意味するのか知っていますか?
編集:このリストのソースはIBMからのこのドキュメントから来ているようです
ldap - ldap_sasl_bind_s(GSSAPI) - クレデンシャル BERVAL 構造で提供する必要があるもの
認証メカニズムとしてGSSAPIldap_sasl_bind_s
を使用して、Microsoft LDAP C SDKのメソッドを使用しようとしています。クレデンシャルは不透明な構造として期待されます。ldap_sasl_bind_s
BERVAL
ユーザー名 (または DN) とパスワードが与えられた場合、渡すことになっている構造体に到達するにはどうすればよいBERVAL
ldap_sasl_bind_s
ですか?
これまでに見つけた例
- Microsoft のものではなく、他の LDAP C SDK のものです。
ldap_sasl_bind_s
SIMPLE 認証が必要な場合に使用 - ただし、GSSAPI を使用する必要があるldap_sasl_interactive_bind_s
他の SASL 認証メカニズムが必要な場合に使用します。ただし、ldap_sasl_interactive_bind_s
Microsoft SDK にはありません。
補足として、目標は SASL を介してさまざまな LDAP サーバーにバインドできるようにすることです。今のところ: ActiveDirectory と OpenLDAP。
どんなポインタでも大歓迎です。
c# - NegotiateStream は、SASL (POP3/IMAP/SMTP) 経由で Kerberos/NTLM/GSSAPI を使用できませんか?
Exchange 2007 アカウント (SMTP/POP3/IMAP) にログインするために、(現在ログインしている Windows ユーザーの既定の資格情報を使用して) 統合 Windows 認証を取得しようとしています。
私はすでにこれの実装を行っていますが、SSPI 関数を使用しているため、管理されていないコードのアクセス許可が必要です (ダメです)。これには NegotiateStream クラスを使用しようとしましたが、機能しません。
POP3/IMAP/SMTP で NegotiateStream を直接使用することはできません。会話全体のすべての要求と応答を base64 でラップし、メール プロトコルのサフィックスなどを含める必要があるためです。そのため、これを行う独自のストリーム クラスを実装しました。 NetworkStream と NegotiateStream の間に挿入しました。ただし、NegotiateStream によって作成された要求とそれが期待する応答は、私が正常に使用してきたもの (および NTLM/GSSAPI の種類の認証が可能な他のメール クライアントによって作成されたもの) とは異なることに気付きました。
特に、NegotiateStream は最初に、他の実装では送信されない 5 バイト長の要求を送信します。このパケットは、「プロトコル エラー」メッセージで Exchange によって拒否されます。
NegotiateStream によって作成された 2 番目の要求は正しいものです (NTLMSSP で始まります)。そこで、base64 エンコードの中間ストリームの最初のパケットを無視し、送信しないことにしました。Exchange が 2 番目のパケットを取得すると、このパケットを正常に消費し、適切な継続応答を返します。ただし、今回は NegotiateStream が 5 バイトの応答を受信する必要があるのに対し、サーバーははるかに大きな応答を返しました。簡単に言えば、NegotiateStream は +1 要求を送信し、必要以上に +1 応答を期待しています。
最初の「冗長な」5 バイト パケットの送信を回避できますが、NegotiateStream が期待する最初の 5 バイト応答パケットを発明することはできません。NegotiateStream が以前に送信しようとしたのと同じパケットをフィードしようとしましたが、もちろんこれは機能しませんでした。
何が起こっているのか、これを修正する方法を知りたいです。Windows XP SP3 および Windows Server 2008 でも同じ動作が発生します。
私は Kerberos/GSSAPI の専門家ではありませんが、ドキュメントで見つけたものから、Kerberos の会話は実際には 5 バイトのパケットで開始する必要があるようです。ただし、他の作業ツールを使用しているときに見たことはなく、Exchange も拒否します。おそらく、GSSAPI が SASL プロトコル (認証のために POP3/IMAP/SMTP で使用される) で使用されている場合、最初のパケットは省略されるべきでしょうか? しかし、これについて NegotiateStream にどのように伝えることができますか、または少なくともサーバーからの 5 バイトの応答を期待するときに何を送信する必要がありますか?
NegotiateStream のさまざまなモードを試しました。また、AUTH NTLM と AUTH GSSAPI の両方を Exchange に発行しましたが、これはすべて違いはありません。また、他の動作中の実装 (GSSAPI と NTLM の両方をサポート) はすべて同じように動作します (GSSAPI パケットと NTLM パケットに大きな違いはありません)。そこにあるすべての着信および発信パケットは、5 バイトをはるかに超えています。
Windows XP で IIS SMTP サービスも試してみましたが、結果は同じでした。SSPI ベースの非 NegotiateStream 実装は機能しますが、NegotiateStream は最初のパケットのために機能しません。送信しないと、NegotiateStream が最初の応答として何を期待しているのかわかりません。
SmtpClient クラスがこれを何らかの方法で管理し、デフォルトの資格情報と NTLM で認証できるため、機能させることができるはずだと思っていました。しかし、SmtpClient は内部で NegotiateStream を使用せず、古いバージョンのソフトウェアと同様に、管理されていない SSPI 呼び出しを行うだけであることがわかりました。
Visual Studio 2010 / .NET 4.0 でも試しました。うまくいきません (そして、NegotiateStream を微調整するための新しいメソッド/プロパティはありません)。
私は完全に迷っています:-(