7

認証にキータブを使用することについていくつか質問があります。

たとえば、ポート 1010 で実行されているサービスを使用する userA がいるとします。最初に、userA は Active Directory にログインして自分自身を認証します。

ここに画像の説明を入力

ログイン後、userA はサーバーに接続してサービス 1010 を使用しようとします。サーバーが UserA が誰であるかを確認するには、setspnSPN を Active Directory に登録する必要があります。例えば

setspn -s service1010/mydomain.com serviceaccount1

次に、Active Directory で ktab ファイルを生成する必要があります。

ktab -a serviceprincal1010/server.domain.com@DOMAIN.COM -k mykeytab.keytab

そしてmykeytab.keytab、サーバーに持ってきます。

サーバーでは、ログイン構成でJAASを使用してKDCを照会します。

ServicePrincipalLoginContext
{
  com.sun.security.auth.module.Krb5LoginModule required    
  principal=serviceprincal1010/server.domain.com@DOMAIN.COM 
  doNotPrompt=true useKeyTab=true keyTab=mykeytab.keytab storeKey=true;

};

この時点から、私は混乱しています。userA はどのように確認されますか (つまり、userA は実際に誰なのか?)。

4

2 に答える 2

14

あなたの図は間違っています。kerberos の仕組みについて基本的な誤解があります。(ちなみに、それはかなり一般的です)。認証に kerberos を使用するサービスは、kdc と通信することはありません。秘密鍵 ( keytab ) を使用して、ユーザーが提示した BLOB を復号化するだけです。

KDC と対話する kerberos の唯一の部分は、クライアントまたはユーザー側です。ポート 1010 でサービスにアクセスしようとすると、まず KDC にそのサービスのサービス チケットを要求します。これは、サービスの秘密鍵で暗号化された blob であり、ユーザーの ID が含まれています。(さらに、他のプロトコル関連のものもたくさんあります)。

ポート 1010 のサービス内に GSS ベースの API がある場合、その API にキータブの場所を伝え、接続のユーザー ID を尋ねるだけです。外部サービスへの他の接続を行う必要はありません。私は Java API に詳しくありませんが、ユーザー資格情報を確認するために必要な呼び出しは 1 つか 2 つだけです。

このダイアログは、現在使用されている Kerberos のバージョンと正確には一致しませんが、基本的な原則を理解するのに役立ちます。

http://web.mit.edu/kerberos/dialogue.html

于 2014-08-12T21:11:27.567 に答える
7

これを理解するには、「信頼できるサード パーティ」セキュリティ システムである Kerberos の基本原則を理解する必要があります。

サーバーは、Ticket-Granting Service (TGS、基本的には Windows ドメイン コントローラー) がキータブ ファイルに存在するサーバーの秘密鍵を使用して暗号化した「トークン」を受け取ります。当然、サーバーは復号化するためにその秘密鍵にアクセスする必要があります。復号化が成功した場合、秘密鍵は TGS とサーバーだけが知っているため、サーバーはトークンが本物であることを保証します。これは、これら 2 つの当事者が共有する秘密です。

「信頼できるサード パーティ」という語句は、TGS (パーティ 3) を間接的に信頼するため、サーバー (パーティ 1) がユーザー (パーティ 2) の認証を許可するため、TGS を指します。

于 2014-08-07T13:02:26.360 に答える