《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
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