私はGSSAPIを使用して開発しており、Vanilla MIT Kerberos 5サーバーで動作して、クライアント/サーバーの一部の作業を行うコードを持っています。現在、Active DirectoryおよびI問題が発生しました。
サーバーを認証し、リッスンしています。クライアントにログインさせることができます。記録のために、これは http://thejavamonkey.blogspot.com/2008/04/clientserver-hello-world-in-kerberos.html に基づくコードです。ただし、ADからチケットを取得してクライアントとサーバー間のセッションを取得するようにクライアントを取得することはできません。 KrbException:Server not found in Kerberos database(7)が表示されます。適切な場所に追加する場所がわかりません。私は運が悪かったので、hostsファイルにipでサーバー名を入れ、dnsを更新し、サーバーレコードを入れようとしました。
ADを更新してKerberosデータベースにサーバーを設定するのが適切な場所を知っている人がいれば、それは素晴らしいことです。
この例外はクライアントから来ていますよね?サーバーのホスト名の前方および後方DNSルックアップを実行してください。サーバーに誤ったDNSエントリがあります。それらはKerberosにとって絶対に重要です。適切な場所は、DNSサーバーです。この場合、ドメインコントローラーです。 DNSサーバーのIPアドレスを把握し、管理者に連絡してください。もう1つのオプションはSPNが欠落しているため、それも確認してください。
これが助けになることを願っています..これと同じエラーメッセージ(Kerberosデータベース(7)にサーバーが見つかりません)を受け取りましたが、これはkeytabを使用してログインした後に発生します。
ADに対してLDAP検索を行うために資格情報を使用しようとすると、エラーメッセージが表示されます。
これはJava 1.6.0_34-以前のリリースと思われる1.6.0_31で動作していました。エラーはJavaが ' LDAPで通信しているKDCが実際にはKerberosレルムの一部であることを信頼する私たちの場合、LDAP接続はラウンドロビン解決されたクエリを介して見つかったサーバー名で行われたためだと思います。 、Java realm.example.comを解決しますが、kdc1.example.comまたはkdc2.example .com ..etcのいずれかを取得します)。これらのリリース間のチェックを強化している必要があります。
この場合、DNSに依存するのではなく、LDAPサーバー名を直接設定することで問題を回避しました。
しかし、調査は続けられています。
私の場合、要求されたサーバーのアドレスの誤った構成が原因です。
サーバーアドレスはFQDN(完全修飾ドメイン名)である必要があります。
KerberosではFQDNが常に必要です。
これは行方不明のSPN問題のようです。あなたが指していたウェブサイトには
principal="webserver/[email protected]"
これは、チケットを取得するプリンシパルです。これをADドメインに関連する値に変更しましたか?
コマンドラインのkerberosツールを使用して、SPNが定義されているかどうかをテストできます。
[root@gen-cs218 bin]# kinit Administrator
[email protected]'s Password:
[root@gen-cs218 bin]# kgetcred Host/[email protected]
[root@gen-cs218 bin]# klist
Credentials cache: FILE:/tmp/krb5cc_0
Principal: [email protected]
Issued Expires Principal <br>
Dec 15 11:42:34 2012 Dec 15 21:42:34 2012 krbtgt/[email protected]
Dec 15 11:42:48 2012 Dec 15 21:42:34 2012 Host/[email protected]
ホスト名ベースのSPNは事前に定義されています。事前定義されていないSPNを使用する場合は、setspn.exeツールを使用してADで明示的に定義し、コンピューターまたはユーザーアカウントのいずれかに関連付ける必要があります。次に例を示します。
c:\> setspn.exe -A "webserver/bully@MYDOMAIN" myuser
以下のコマンドを使用して、SPNが関連付けられているアカウントを確認できます。事前定義されたSPNは表示されません。
c:\> setspn.exe -L "webserver/bully@MYDOMAIN"
SPNを複数のユーザー/コンピューターに登録している場合、「Kerberosデータベースにサーバーが見つかりません」エラーが発生する可能性があります。
以下で確認できます:
$ SetSPN -Q ServicePrincipalName
( SetSPN -Q HTTP/my.server.local@MYDOMAIN )
sqlcmdは動作しますが、System.Data.SqlClientは動作しません-Kerberosデータベースにサーバーが見つかりません。 RestrictedKrbHost SPNを追加する必要があります
5.1.2 ServiceClassが「RestrictedKrbHost」に等しいSPN
「RestrictedKrbHost」サービスクラスをサポートすることにより、クライアントアプリケーションは、サービスのIDはないがサーバー名は持っているときにKerberos認証を使用できます。これは、クライアントからサービスへの相互認証ではなく、クライアントからサーバーへのコンピューター認証を提供します。特権レベルが異なるサービスは同じセッションキーを持ち、上位のサービスがデータにアクセスできないことを基礎とするサービスが保証しない場合、互いのデータを復号化できます。
私の場合、私のプリンシパルはkafka/[email protected]
でした。端末の以下の行になりました。
>>> KrbKdcReq send: #bytes read=190
>>> KdcAccessibility: remove kerberos.niroshan.com
>>> KDCRep: init() encoding tag is 126 req type is 13
>>>KRBError:
cTime is Thu Oct 05 03:42:15 UTC 1995 812864535000
sTime is Fri May 31 06:43:38 UTC 2019 1559285018000
suSec is 111309
error code is 7
error Message is Server not found in Kerberos database
cname is kafka/[email protected]
sname is kafka/[email protected]
msgType is 30
数時間チェックした後、次の行のkafka_2.12-2.2.0/server.properties
の値が間違っていることがわかりました。
listeners=SASL_PLAINTEXT://kafka.com:9092
また、同じIPアドレスに対してkafka.niroshan.com
とkafka.com
の2つのエントリを取得しました。
listeners=SASL_PLAINTEXT://kafka.niroshan.com:9092
に変更しました。
以下のリンクによると、プリンシパルには各ホストの完全修飾ドメイン名(FQDN)が含まれている必要があり、プリンシパルと一致する必要があります。
https://docs.Oracle.com/cd/E19253-01/816-4557/planning-25/index.html