亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

KrbException:S4U2self 需要一張可轉發的票

KrbException:S4U2self 需要一張可轉發的票

手掌心 2023-03-31 09:38:39
我正在嘗試通過我的 Java 代碼執行 kerberos 約束委派。我有一個密鑰表文件、附加到用戶的 SPN,以及為該用戶啟用的 SPN 委派。當我嘗試使用 Keytab 登錄時,我得到了 SPN 的 TGT。但是,此票證上的“可轉發”標志設置為 false。為了模擬其他用戶,我需要將此標志設置為 true。注意:在 SPN 用戶上設置了 ADS_UF_TRUSTED_TO_AUTHENTICATE_FOR_DELEGATION 標志。非常感謝任何幫助。private void tryKrb5Module() throws LoginException {        System.setProperty("sun.security.krb5.debug", "true");        System.setProperty("javax.security.auth.useSubjectCredsOnly","true");//has no impact        final Subject subject = new Subject();        final Krb5LoginModule krb5LoginModule = new Krb5LoginModule();        final Map<String,String> optionMap = new HashMap<String,String>();        optionMap.put("keyTab", "c:\\ticket\\delegationUser.keytab");        optionMap.put("principal", "TEST/TEST"); // default realm        optionMap.put("doNotPrompt", "true");        optionMap.put("refreshKrb5Config", "true");        optionMap.put("useTicketCache", "true");        optionMap.put("renewTGT", "true");        optionMap.put("useKeyTab", "true");        optionMap.put("storeKey", "true");        optionMap.put("isInitiator", "true");        krb5LoginModule.initialize(subject, null, new HashMap<String,String>(), optionMap);        boolean loginOk = krb5LoginModule.login();        System.out.println("======= login:  " + loginOk);        boolean commitOk = krb5LoginModule.commit();        System.out.println("======= commit: " + commitOk);        System.out.println("======= Principal from subject: " + subject.getPrincipals());    }
查看完整描述

2 回答

?
弒天下

TA貢獻1818條經驗 獲得超8個贊

我想出了解決辦法。您需要在系統路徑中設置 krb 配置文件。然后只有從 keytab 獲得的票是“可轉發的”。令人驚訝的是,這在任何地方都沒有明確提及。


System.setProperty("java.security.krb5.conf", "path_to_krb_config");


還要確保您在 krb 配置文件中提到了“forwardable = true”。在下面粘貼示例 krb 配置文件:


[libdefaults]

default_realm = DOMAIN.COM

default_tkt_enctypes = aes128-cts aes128-cts-hmac-sha1-96 aes256-cts aes256-cts-hmac-sha1-96 rc4-hmac des-cbc-crc des-cbc-md5

default_tgs_enctypes = aes128-cts aes128-cts-hmac-sha1-96 aes256-cts aes256-cts-hmac-sha1-96 rc4-hmac des-cbc-crc des-cbc-md5

permitted_enctypes = aes128-cts aes128-cts-hmac-sha1-96 aes256-cts aes256-cts-hmac-sha1-96 rc4-hmac des-cbc-crc des-cbc-md5

dns_lookup_kdc = true

dns_lookup_realm = false

forwardable = true


[realms]

    DOMAIN.COM = {

        kdc = KDC_HOST.DOMAIN.COM

        admin_server = KDC_HOST.DOMAIN.COM

        default_domain = DOMAIN.COM

    }


[domain_realms]

    domain.com = DOMAIN.COM

    .domain.com = DOMAIN.COM


查看完整回答
反對 回復 2023-03-31
?
犯罪嫌疑人X

TA貢獻2080條經驗 獲得超4個贊

服務帳戶“TEST”及其密鑰表僅用于與 KDC 建立“信任”并授予服務代碼以調用方法 S4U2Self 和 S4U2Proxy。因此服務帳戶 TGT 預計不可轉發。

除了krb5.conf您創建的 JAAS 登錄配置之外,不需要文件。另一種選擇是簡單地添加,您的服務帳戶“TEST”TGT 將可轉發。MapKrb5LoginModuleoptionMap.put("forwardable", "true");

順便說一下,對于 kerberos 約束委派,只需要使用 S4U2Self 生成的模擬用戶票證 TGT 是可轉發的,這僅取決于“?ADS_UF_TRUSTED_TO_AUTHENTICATE_FOR_DELEGATIONTEST”服務帳戶上的標志。

查看完整回答
反對 回復 2023-03-31
  • 2 回答
  • 0 關注
  • 211 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號