2011-07-21 11 views
0

私は、クライアント認証にKerberosを使用しているLinuxサーバーアプリケーションと、Windows上で実行する必要があるクライアントを持っています。 KerberosチケットはWindows Active Directoryによって発行されます。 MIT KfW 3.2.2を使用すると、クライアントはサーバ上で正常に認証されます。 KerberosサーバーからASおよびTGSチケッ​​トを取得し、kerberos資格情報ストアに格納するためのAPI。しかし、このアプローチの問題は、ユーザーが再度資格情報を入力する必要があることです。 解決策はMS LSAストアにアクセスすることですが、これは機能しません。 ms2mit.exeアプリケーションもありません。通常のユーザーとして、または管理者として実行しても、UACを完全に無効にしても問題ありません。 これは私がクライアントにSSPIを使用して、私がサーバーに送るKRB_AP_REQメッセージを作りたい理由です。それは可能ですか?はいの場合はどうすればできますか?そうでない場合、私の他の選択肢は何ですか?サーバーは既にビルドされており、変更するためにはかなりの労力が必要なため、Windows上で解決策を探したいと思います。SSBからのKRB_AP_REQチケット

+0

OK、ASN.1ビューアでSSPIメッセージを開いたところ、MicrosoftがAP_REQメッセージをラップするようです。 Wrapperには(少なくとも私の場合は)オブジェクト識別子、ブール値、AP_REQメッセージが含まれています。 MIT KerberosライブラリでこのAP_REQメッセージを使用すると、OKをデコードします。ドキュメント化されたインターフェイスを使用してこれを行う方法は、文書化されていない動作に依存することは、プロダクションでの使用のために壊れやすいことがあるためです。 – neznanec

+1

SSPIは実際にはGSSAPI RFC 1964の標準に準拠した実装です。KerberosサブシステムのInitializeSecurityContextによって返されるトークンの形式を記述するASN.1のような型は、InitialContextToken(RFC 1964 sec 1.1)です。 KRB_AP_REQの前に2バイトの「トークン」があり、不正な形式になるため、技術的にはASN.1ではありません。私は6年遅すぎると知っていますが、トークン+ 17バイトからKRB_AP_REQを取得することは、実際には文書化されていない動作ではありません。 – Mark

答えて

1

Windows SSPIサブシステムのAquireCredentialsHandleおよびInitializeSecurityContext機能を使用して、有効なチケットを取得し、Linuxベースのサーバーに対して認証することができます。

最初にAcquireCredentialsHandle()を使用し、InitializeSecurityContextに複数の呼び出しを使用して、認証されるまでサーバーから取得するトークンを使用します。

関連する問題