Java 带有密码的SPNEGO身份验证问题
我已将我的应用程序配置为通过SPNEGO和Websphere使用Kerberos身份验证 详情如下 krb5.confJava 带有密码的SPNEGO身份验证问题,java,active-directory,websphere,kerberos,spnego,Java,Active Directory,Websphere,Kerberos,Spnego,我已将我的应用程序配置为通过SPNEGO和Websphere使用Kerberos身份验证 详情如下 krb5.conf [libdefaults] default_realm = ABC.MYCOMPANY.COM default_keytab_name = FILE:C:\IBM\WebSphere\AppServer\kerberos\MyServer.keytab default_tkt_enctypes = rc4-hmac des-cbc-md5 def
[libdefaults]
default_realm = ABC.MYCOMPANY.COM
default_keytab_name = FILE:C:\IBM\WebSphere\AppServer\kerberos\MyServer.keytab
default_tkt_enctypes = rc4-hmac des-cbc-md5
default_tgs_enctypes = rc4-hmac des-cbc-md5
forwardable = true
renewable = true
noaddresses = true
clockskew = 300
[realms]
ABC.MYCOMPANY.COM = {
kdc = TEST.abc.mycompany.com:88
default_domain = mycompany.com
}
[domain_realm]
.mycompany.com = ABC.MYCOMPANY.COM
login.conf
spnego-client {
com.sun.security.auth.module.Krb5LoginModule required;
};
spnego-server {
com.sun.security.auth.module.Krb5LoginModule required
storeKey=true
useKeyTab=true
keyTab="MyServer.keytab";
};
spnego属性
Spnego properties:
spnego.allow.basic=false
spnego.allow.localhost=false
spnego.allow.unsecure.basic=false
spnego.login.client.module=spnego-client
spnego.login.server.module=spnego-server
spnego.prompt.ntlm=false
spnego.allow.delegation=true
spnego.logger.level=1
当我访问我的应用程序时,我得到以下错误
Config missing param value for: spnego.preauth.password Stack Trace : java.lang.NullPointerException: Config missing param value for: spnego.preauth.password at net.sourceforge.spnego.SpnegoAuthenticator$1.getInitParameter(SpnegoAuthenticator.java:218) at net.sourceforge.spnego.SpnegoFilterConfig.<init>(SpnegoFilterConfig.java:145) at net.sourceforge.spnego.SpnegoFilterConfig.getInstance(SpnegoFilterConfig.java:316) at net.sourceforge.spnego.SpnegoAuthenticator.<init>(SpnegoAuthenticator.java:206)
我没有使用spnego密码,我希望它使用keytab,我不明白为什么它会抛出错误,说param丢失。虽然你没有用Active Directory标记你的问题,但你必须运行它,因为你试图使用RC4-HMAC-NT,这曾经是Microsoft Active Directory的主要加密算法。我说过去是,因为从WindowsServer2008R2开始,AES26-SHA1成为默认的加密算法。也就是说,需要将Active Directory帐户wasMyServer配置为符合Kerberos协议。根据WebSphere设置说明,它应该是一个用户帐户,而不是计算机帐户,并为您提供在应用服务器上正确运行Kerberized服务的灵活性。也就是说,在用户帐户“wasMyServer”的“Account”选项卡上:
default_tkt_enctypes = rc4-hmac des-cbc-md5
default_tgs_enctypes = rc4-hmac des-cbc-md5
要完全启用RC4-HMAC加密类型,请在下面添加额外的行:
permitted_enctypes = rc4-hmac des-cbc-md5
(顺便说一句,没有人再使用des-cbc-md5加密类型了,但我把它放在那里了)
DNS域名需要在此文件中保持一致。为简单起见,DNS域名和Kerberos领域名称应该匹配(除了以大写形式指定Kerberos领域名称)。它们不必匹配,但当它们不匹配时,这会使故障排除变得更加困难
由于您澄清了您的广告域名是abc.mycompany.com,因此我建议使用一个krb5.conf文件,该文件如下所示:
[libdefaults]
default_realm = ABC.MYCOMPANY.COM
default_keytab_name = FILE:C:\IBM\WebSphere\AppServer\kerberos\MyServer.keytab
default_tkt_enctypes = rc4-hmac des-cbc-md5
default_tgs_enctypes = rc4-hmac des-cbc-md5
permitted_enctypes = rc4-hmac des-cbc-md5
forwardable = true
renewable = true
noaddresses = true
clockskew = 300
[realms]
ABC.MYCOMPANY.COM = {
kdc = TEST.abc.mycompany.com:88
default_domain = abc.mycompany.com
}
[domain_realm]
.abc.mycompany.com = ABC.MYCOMPANY.COM
abc.mycompany.com = ABC.MYCOMPANY.COM
参考:
SPN
在任何给定的Kerberos领域中,所有SPN都必须是唯一的。如果存在重复的SPN,请运行以下命令以查找注册了重复SPN的AD帐户,并从未使用SPN的帐户中删除SPN。提示是,生成keytab的AD帐户的SPN是SPN应该注册的唯一位置。因此,对于这种情况,只有AD帐户wasMyServer应该具有SPN HTTP/TEST.abc.mycompany.com。要查找目录中的所有重复SPN,请在加入AD域的计算机上的Windows命令行程序中运行以下命令:
setspn -X
输出将列出注册了重复SPN的所有AD帐户,您可以根据我的指导采取纠正措施。命令:
setspn -D HTTP/TEST.abc.mycompany.com wasMyServer
…将从AD帐户名称中删除重复的SPN。或者您也可以在AD用户和计算机GUI中删除它。每次在重新创建keytab之前,运行上述命令以清除AD帐户
Keytab
位于系统路径中,以便成功运行该命令
网络浏览器
确保将web浏览器配置为自动将Windows凭据(基本上是包含Kerberos服务票证的SPNEGO令牌)发送到应用程序服务器。要执行此操作,请按照以下说明操作
Internet Explorer:
参考资料:您是否还拥有用于生成键表的命令语法?如果您这样做,请用这些信息编辑您的问题,因为这将提供一个重要的线索。@T-Heron-我编辑了这个问题。WAS内置了对SPNEGO的支持,您是否试图在错误参考
net.sourceforge.SPNEGO.SpnegoAuthenticator
时包含您自己的实现?可能您没有在WAS中正确配置SPNEGO,因为您不应该提供login.conf和任何SPNEGO.properties文件。正如T-Heron提到的,您必须检查LDAP端允许的加密类型,并确保您使用的帐户已检查不需要Kerberos预身份验证
@Gas-是的,我们正在使用我们自己的实现,通过该实现我们提供了spnego pro
setspn -D HTTP/TEST.abc.mycompany.com wasMyServer