2014-07-18 23 views
0

我正在使用JAAS獲取Kerberos憑證。我的配置文件是這樣的:如何保存在其他機器上使用的Kerberos私人憑證

SignedOnUserLoginContext 
{ 
    com.sun.security.auth.module.Krb5LoginModule required debug=true useTicketCache=true doNotPrompt=true; 
}; 

代碼即可獲得Kerberos憑據

try {   
     LoginContext lc = new LoginContext("SignedOnUserLoginContext"); 
     lc.login(); 
     Subject signedOnUserSubject = lc.getSubject(); 
     Set<Object> privateCred = signedOnUserSubject.getPrivateCredentials(); 

      for (Object privates : privateCred) { 
       if (privates instanceof KerberosTicket) { 
        KerberosTicket ticket = (KerberosTicket)privates; 
        return ticket.getEncoded(); 
       } 
      } 

    } 

當我把車票給其他機器,並使用JAAS使用Kerberos登錄轉讓,它沒有得到驗證。在接受我的配置文件:

KrbLogin{ 
com.sun.security.auth.module.Krb5LoginModule required 
      principal=principal[email protected] 
      useTicketCache="FILE:///where i store the ticket" 
}; 

我懷疑我不能只是得到這樣的票,但需要獲得()的返回getPrivateCredentials整個私有憑證。另外,使用doNotPrompt = true和useTicketCache = true我試圖從Windows緩存中獲取。

some Java security book讀到私有證書可以包括其他數據如私人密鑰,加密密鑰,密碼等等

因此,我需要得到getPrivateCredentials的返回值()。如何將getPrivateCredentials()返回的內容轉換爲實際的Kerberos憑證文件。我閱讀爲了訪問這些數據,我需要使用PrivateCredentialPermission模塊。有沒有例子說明如何做到這一點?的Kerberos

+1

你的問題是在屁股疼痛,並不打算與Kerberos完成。在你打算使用TGT的機器上執行kinit。更重要的是,JGSS不提供用於導出憑證的高級API。麻省理工學院的Kerberos。 –

回答

0

憑證是不可移植的,從技術上說,你不能這樣做機器一個的kinit,然後使用該TGT(票據授予票據)或ST(服務憑證)機上(除委託) ,因爲TGT和ST都包含客戶端的加密IP地址。

ST通過業務服務器的密鑰加密,這意味着只有SS可以驗證/讀取票證的內容。

TGT通過TGS(票證授予服務器)的密鑰加密。

順便說一句,也許你想什麼就是什麼叫的Kerberos密鑰表 ---其中包含校長user name & password

但是,通過網絡傳輸keytab是危險的並且不推薦使用。

+0

其實你可以。我在一臺機器上做了kinit並帶來了另一臺機器。然後使用Krb5loginmodule和ticket =「我存儲我的kinit緩存」。這是憑證緩存文件的工作原理嗎?你可以使用它來使用密碼登錄Kerberos W/O。 – dorothy