1. 程式人生 > >《HttpClient官方文件》4.8 SPNEGO/Kerberos驗證

《HttpClient官方文件》4.8 SPNEGO/Kerberos驗證

原文連結 譯者:Edenpan

SPNEGO(簡單並且受保護的GSSAPI協商機制)被設計為當兩端都不知道他人可以提供,或使用什麼時所提供的驗證服務。它可以包裝其他的機制,但是目前HttpClient4.2是按照Kerbros單獨設計的。

4.8.1SPNEGO在HttpClient中的支援

SPNEGO驗證方案被Sun Java 1.5以上版本相容。1.6以上的Java版本被強烈推薦,因為它已經完全支援了SPNEGO驗證。
Sun JRE 提供了相關支援類來處理幾乎所有的Kerb er和SPNEGO的令牌。這意味著很多步驟是關於GSS類的。SPNegoScheme 是一個簡單的處理解析令牌並且對頭進行讀和寫的類。
最好的開始的方式是抓示例中KerberosHttpClient.java檔案,並且嘗試使它工作。這會由很多問題會產生,但是如果幸運的話它會沒有多大問題的工作。它也提供了一些輸出用來除錯。
在Windows中它預設使用登入憑證;它可以被覆蓋通過使用’knit’ 比如$JAVA_HOME\bin\knit

[email protected] 對測試和除錯非常有幫助。刪除kinit建立的快取檔案退回到windows的Kerberos快取。

4.8.2 GSS/JAVA Kerberos 步驟

4.8.3 login.conf 檔案

接下來是Windows XP針對IIS和JBoss Negotiation 模組的配置。
系統屬性java.security.auth.login.config可以用來指定login.conf檔案。
login.conf檔案看起來應該像下面這樣:

com.sun.security.jgss.login {
com.sun.security.auth.module.Krb5LoginModule required     client=TRUE useTicketCache=true;
};
com.sun.security.jgss.initiate {
com.sun.security.auth.module.Krb5LoginModule required client=TRUE useTicketCache=true;
};
com.sun.security.jgss.accept {
com.sun.security.auth.module.Krb5LoginModule required client=TRUE useTicketCache=true;
};

4.8.5 krb5.conf / krb5.ini 檔案

如果沒有特別指定,將會使用系統預設值。通過設定系統屬性java.security.krb5.conf來指定一個使用者krb5.conf檔案。krb5.conf檔案看起來像是下面這樣:

[libdefaults]
default_realm = AD.EXAMPLE.NET
udp_preference_limit = 1
[realms]
AD.EXAMPLE.NET = {
    kdc = KDC.AD.EXAMPLE.NET
}
[domain_realms]
.ad.example.net=AD.EXAMPLE.NET
ad.example.net=AD.EXAMPLE.NET

4.8.5 Windows特殊配置

為了允許Windows使用當前使用者的憑證,系統屬性javax.security.auth.useSubjectCredsOnly必須被設定為false 並且應該新增並且正確設定Windows的登錄檔項allowtgtsessionkey來使會話憑證在Kerberos Ticket-Granting票中傳送。
下面是在Windows Server 2003 和 Windows 2000 SP4中要求的登錄檔項設定:

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Lsa\Kerberos\Parameters
Value Name: allowtgtsessionkey
Value Type: REG_DWORD
Value: 0x01

下面是在Windows XP SP2中要求的登錄檔項設定:

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Lsa\Kerberos\
Value Name: allowtgtsessionkey
Value Type: REG_DWORD
Value: 0x01