GSS -APIエラーコンテキストの受け入れ:サービスキーは利用できません - ソラリスコード、Windows KDC
質問
Active Directoryに対してテストKerberosクライアント/サーバーペアを動作させようとしています。コーポレートネットワークのスペアドメインで3人のユーザーを作成しました。「Richardc」、「server1」、「server2」です。私のサーバーユーザーは、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
今回は +Desonlyオプションを使用していませんでした。今日のシステムでは、DESが必要ないことを期待しています。管理の懸念を避けるために、この質問では、実際のドメイン名を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を使用して、KeyTabのキーを使用してログインすることもできます。
私は自分のテストプログラムの両方を持っています。 http://download.oracle.com/docs/cd/e19683-01/816-1331/sampleprogs-1/index.html. 。そのプログラムでは、サーバーで、GSS_C_NT_HOSTBASET_SERVICEを両方のKeyTabsで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は、クライアントに付与されたキーを示しています。 keytabにある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のセットアップはありません。ベンチマークを指しているローカルkrb5.confファイルを使用しています。rddev.local領域を使用していますが、マシンがホスト名で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などのオプションは効果がないようです。
質問は - エラーを修正するにはどうすればよいですか?
ありがとう - リチャード
解決
問題はにありました
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システムでは役に立たない「サービスキーが利用できない」で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」に注意してください。
-Typeの両方の値でテストしました。どちらも機能します。
私の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_HOSTBASET_SERVICEを受け入れたわけではないことがわかりましたが、それらはすべてGSS_C_NT_USER_NAMEを受け入れています。
サーバーアプリケーションをインストールした人は、サーバープリンシパル名を構成オプションとして設定します。これは最も信頼できる方法のようでした。キーを設定する人は、それが何であるかを知っているので、アプリケーションにどのキーを使用するかを直接伝えます。