原文链接 译者: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 testuser@AD.EXAMPLE.NET 对测试和调试非常有帮助。删除kinit创建的缓存文件退回到windows的Kerberos缓存。
4.8.2 GSS/JAVA Kerberos 步骤
这个文档假定你使用的是Windows系统,但是大部分的信息在Unix上也适用。
org.ietf.jgss 类有很多可配置的参数,主要是在 krb5.conf/krb5.ini文件中。更多的信息可以查看:http://web.mit.edu/kerberos/krb5-1.4/krb5-1.4.1/doc/krb5-admin/krb5.conf.html.
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
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/114007.html