3

Active Directory に対して動作するテスト Kerberos クライアント/サーバー ペアを取得しようとしています。企業ネットワークの予備ドメインに、「RichardC」、「Server1」、「Server2」という 3 人のユーザーを作成しました。私のサーバーのユーザーは、1 つは KRB5_NT_PRINCIPAL で、もう 1 つは KRB5_NT_SRV_HOST で、異なるサービス プリンシパル名にマップされています。

ktpass -out server2.keytab 
          -princ server2/serbia.mydomain.com@BENCHMARKING.RDDEV.LOCAL
          -mapuser ServerUser2@BENCHMARKING.RDDEV.LOCAL
          -pass ThePassword
          -crypto All
          -pType KRB5_NT_SRV_HOST
          -kvno 2

今日のシステムでは DES が必要ないことを期待して、今回は +DesOnly オプションを使用しませんでした。管理上の懸念を避けるため、この質問では実際のドメイン名を mydomain に置き換えました。

これにより、キータブが表示されます。私はそれをリストすることができます:

KVNO Principal
---- --------------------------------------------------------------------------
   2 server2/serbia.mydomain.com@BENCHMARKING.RDDEV.LOCAL (DES cbc mode with CRC-32)
   2 server2/serbia.mydomain.com@BENCHMARKING.RDDEV.LOCAL (DES cbc mode with RSA-MD5)
   2 server2/serbia.mydomain.com@BENCHMARKING.RDDEV.LOCAL (ArcFour with HMAC/md5)
   2 server2/serbia.mydomain.com@BENCHMARKING.RDDEV.LOCAL (AES-256 CTS mode with 96-bit SHA-1 HMAC)
   2 server2/serbia.mydomain.com@BENCHMARKING.RDDEV.LOCAL (AES-128 CTS mode with 96-bit SHA-1 HMAC)

キータブのキーを使用して 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サーバーを次のように実行しています

./gss-server -mech 1.2.840.113554.1.2.2 server2/serbia.mydomain.com    

とクライアント

./gss-client -mech 1.2.840.113554.1.2.2 serbia.mydomain.com server2 "Hello"

結果:

GSS-API error accepting context: Invalid credential was supplied
GSS-API error accepting context: Service key not available

この場合と私自身のテスト コードの両方で、クライアントが最初のトークンを送信した後、サーバーがそれをデコードしようとしているときにエラーが発生します。

klist は、クライアントに付与されたキーを示します。キータブにあるArcFourを使用しています

Default principal: RichardC@BENCHMARKING.RDDEV.LOCAL

Valid starting                Expires                Service principal
07/25/11 17:36:49  07/26/11 03:35:18  krbtgt/BENCHMARKING.RDDEV.LOCAL@BENCHMARKING.RDDEV.LOCAL
    renew until 08/01/11 17:36:49
07/25/11 17:36:03  07/26/11 03:35:18  server2/serbia.mydomain.com@BENCHMARKING.RDDEV.LOCAL
    renew until 08/01/11 17:36:03

UNIX マシン (セルビア) は別のレルム (ここでは mydomain.com と呼んでいます) に属している可能性がありますが、Kerberos がセットアップされていないようです。BENCHMARKING.RDDEV.LOCAL 領域を指すローカルの krb5.conf ファイルを使用していますが、マシンがホスト名で DNS を使用しようとすると、間違った応答が返される可能性があります。私のkrb5.confには

[libdefaults]
    default_keytab_name = /users/dev/core/richardc/server1.keytab
    default_realm = BENCHMARKING.RDDEV.LOCAL
    dns_lookup_kdc = false
    default_tkt_types = DES-CBC-MD5

[realms]
BENCHMARKING.RDDEV.LOCAL = {
    kdc = gbha-dcbench01p.benchmarking.rddev.local
    admin_server = gbha-dcbench01p.benchmarking.rddev.local
}

[domain_realm]
benchmarking.rddev.local = BENCHMARKING.RDDEV.LOCAL
.benchmarking.rddev.local = BENCHMARKING.RDDEV.LOCAL
mydomain.com = BENCHMARKING.RDDEV.LOCAL
.mydomain.com = BENCHMARKING.RDDEV.LOCAL

default_tkt_types などのオプションが無効になっているようです。

質問は - どうすればエラーを修正できますか?

ありがとう - リチャード

4

1 に答える 1

3

問題は

ktpass -out server2.keytab 
      -princ server2/serbia.mydomain.com@BENCHMARKING.RDDEV.LOCAL
      -mapuser ServerUser2@BENCHMARKING.RDDEV.LOCAL
      -pass ThePassword
      -crypto All
      -pType KRB5_NT_SRV_HOST
      -kvno 2

これにより、Windows はキーのバージョン番号を増やします。結果のキーは、何らかの理由で「kinit -k」ログインの問題ではありませんが、Solaris システムでは役に立たない「Service key not available」で GSS-API サーバー コードが失敗します。

Windows システムは 2008R2 でした。このコマンドの動作は、Windows のバージョンによって異なることを理解しています。

DesOnly でのテストに成功しました。他のテストのために、困惑している貧しい IT 部門に戻る必要があります :-)

解決策は、-kvno 引数を省略することです。

 ktpass -out server4.keytab 
      -princ server4/serbia.mydomain.com@BENCHMARKING.RDDEV.LOCAL
      -mapuser ServerUser4@BENCHMARKING.RDDEV.LOCAL
      -pass ThePassword
      -crypto DES-CBC-MD5
      -pType KRB5_NT_USER_PRINCIPAL

これにより、出力が得られます

Targeting domain controller: GBHA-DCBENCH01P.benchmarking.rddev.local
Using legacy password setting method
Successfully mapped server4/serbia.mydomain.com to Server4.
Key created.
Output keytab to server4.keytab:
Keytab version: 0x502
keysize 79 server4/serbia.mydomain.com@BENCHMARKING.RDDEV.LOCAL ptype 1
     (KRB5_NT_PRINCIPAL) vno 5 etype 0x3 (DES-CBC-MD5) keylength 8 (0xd1532a6d0f2a8631)
Account Server4 has been set for DES-only encryption.

出力の「vno 5」に注意してください。

-pType の両方の値でテストしました。どちらも機能します。

私の GSS コードは GSS_C_NT_HOSTBASED_SERVICE を使用していますが、名前の入力に必要な形式だけが変更されているようです。

(上記のキーを変更しました)

補遺

私の最終的な解決策は -pType KRB5_NT_USER_PRINCIPAL を使用します

私の GSS コードは GSS_C_NT_USER_NAME を使用して名前を検索し、フルネームserver4/serbia.mydomain.com@BENCHMARKING.RDDEV.LOCALを指定します。私が取り組んでいたすべてのプラットフォームが GSS_C_NT_HOSTBASED_SERVICE を受け入れたわけではありませんが、すべて GSS_C_NT_USER_NAME を受け入れました。

サーバー アプリケーションをインストールする人は、サーバー プリンシパル名を構成オプションとして設定します。これが最も信頼できる方法のようでした。キーを設定する人は、それが何であるかを知っているので、使用するキーをアプリケーションに直接伝えます。

于 2011-07-26T14:56:45.773 に答える