我已将我的应用程序配置为通过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
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)
创建密钥表文件的命令
C:\IBM\WebSphere\AppServer\java>ktpass -out c:\temp\MyServer.keytab -princ HTTP/[email protected] -mapUser wasMyServer -mapOp set -pass mypassword -crypto RC4-HMAC-NT -pType KRB5_NT_PRINCIPAL
我没有使用spnego密码,我希望它使用keytab,但我不明白为什么它会抛出错误,提示缺少参数。
最佳答案
虽然没有用Active-Directory标记问题,但您必须运行它,因为您正尝试使用RC4-HMAC-NT,它曾经是Microsoft Active Directory的主要加密算法。我曾经说过,因为从Windows Server 2008 R2开始,AES26-SHA1成为默认的加密算法。也就是说,Active Directory帐户wasMyServer需要配置为符合Kerberos协议。根据WebSphere设置说明,它应该是用户帐户,而不是计算机帐户,并为您提供了在应用程序服务器上正确运行Kerberized服务的灵活性。也就是说,在用户帐户“ wasMyServer”的“帐户”选项卡上:
确保未选中所有帐户选项(密码永不过期)。
确保将SPN HTTP / TEST.abc.mycompany.com分配给该帐户。
参考:Administering SPNEGO within WebSphere Application Server: Tips on using Kerberos service principal names
编辑:
KRB5.CONF
您的krb5.conf内部似乎存在问题。您只有这两行显示为支持RC4-HMAC:
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领域名称应匹配(除了在UPPER情况下指定的Kerberos领域名称)。它们不必匹配,但是如果不匹配,则使疑难解答数量级增加。
由于您澄清了AD域名为
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
参考:Secure Communications Using Stronger Encryption Algorithms
SPN
在任何给定的Kerberos领域中,所有SPN都必须是唯一的。如果存在重复的SPN,请运行以下命令以查找已注册重复SPN的AD帐户,然后从未使用SPN的帐户中删除SPN。提示是,生成密钥表所用的AD帐户的SPN是应该注册SPN的唯一位置。因此,在这种情况下,仅AD帐户wasMyServer应该具有SPN HTTP / TEST.abc.mycompany.com。要在目录中查找所有重复的SPN,请在加入AD域的计算机上的Windows Command Shell中运行以下命令:
setspn -X
输出将列出注册了重复SPN的所有AD帐户,您可以根据我的指导采取纠正措施。命令:
setspn -D HTTP/TEST.abc.mycompany.com wasMyServer
...将会从广告帐号中删除重复的SPN。或者,您也可以在“ AD用户和计算机” GUI中将其删除。在重新创建密钥表之前,每次都运行上述命令来清理AD帐户。
键表
每次更换密钥表时,请重新启动WebSphere Application Service。
通过运行以下命令来验证WAS服务器上的密钥表。验证会从KDC中提取Kerberos票证,因此,如果成功,则意味着密钥表没有任何问题。
kinit -k -t MyServer.keytab HTTP / TEST.abc.mycompany.com
注意:kinit不随Windows一起提供,但随Java JRE / JDK一起提供,因此您需要将keytab的副本放置到kinit存在的同一目录中,否则请确保
<JAVA HOME>
依次位于系统PATH中成功运行命令。网页浏览器
确保将Web浏览器配置为自动将Windows凭据(实质上是包含Kerberos服务票证的SPNEGO令牌)发送到应用程序服务器。为此,请按照以下说明进行操作。
IE浏览器:
通过从控制面板或Internet Explorer的“工具”菜单中选择“ Internet选项”,打开“ Internet选项”对话框。
在“ Internet选项”对话框的“安全性”选项卡上,选择“本地Intranet”,然后单击“自定义级别”。
在“安全设置”对话框的“登录”下,选择“仅在Intranet区域中自动登录”,然后单击“确定”。
在“安全设置”选项卡上的“ Internet选项”对话框中,仍然选择“本地Intranet”,单击“站点”。
在“本地Intranet”对话框中,单击“高级”。
在下一个对话框(也称为“本地Intranet”)中,在“将此网站添加到区域中”框中键入网站的URL(例如http://test.abc.mycompany.com),然后单击“添加”。
在“本地Intranet”对话框中,单击“确定”。
在原始的本地Intranet对话框中,单击“确定”。
在“高级”选项卡下,确保已启用“启用集成Windows身份验证”(这是默认设置)。
在“ Internet选项”对话框中,单击“确定”。
参考:Configuring Internet Explorer for Automatic Logon