密码的SPNEGO身份validation问题

我已将我的应用程序配置为通过SPNEGO与Websphere一起使用Kerberos身份validation。

这是细节

的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.(SpnegoFilterConfig.java:145) at net.sourceforge.spnego.SpnegoFilterConfig.getInstance(SpnegoFilterConfig.java:316) at net.sourceforge.spnego.SpnegoAuthenticator.(SpnegoAuthenticator.java:206) 

用于创建keytab文件的命令

 C:\IBM\WebSphere\AppServer\java>ktpass -out c:\temp\MyServer.keytab -princ HTTP/TEST.abc.mycompany.com@ABC.MYCOMPANY.COM -mapUser wasMyServer -mapOp set -pass mypassword -crypto RC4-HMAC-NT -pType KRB5_NT_PRINCIPAL 

我没有使用spnego密码,我希望它使用keytab,我不明白为什么抛出错误说param缺失。

虽然您没有使用Active-Directory标记您的问题,但您必须运行它,因为您尝试使用RC4-HMAC-NT,它曾经是Microsoft Active Directory的主要加密算法。 我曾经说过,因为从Windows Server 2008 R2开始,AES26-SHA1成为默认的加密算法。 也就是说,Active Directory帐户wasMyServer需要配置为符合Kerberos协议。 根据WebSphere安装说明,它应该是用户帐户,而不是计算机帐户,并且可以灵活地在应用程序服务器上正确运行Kerberized服务。 也就是说,在用户帐户“wasMyServer”的“帐户”标签上:

  1. 确保未选中所有帐户选项(密码永不过期)。
  2. 确保已将 SPN HTTP / TEST.abc.mycompany.com分配给该帐户。

参考: 在WebSphere Application Server中管理SPN​​EGO:有关使用Kerberos服务主体名称的提示

EDITS:

的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 

参考: 使用更强加密算法的安全通信

结节

所有SPN在任何给定的Kerberos领域中必须是唯一的。 如果出现重复的SPN,请运行以下命令以查找已注册重复SPN的AD帐户,并从未使用SPN的帐户中删除SPN。 对此的提示是,生成密钥表的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中删除它。 每次重新创建密钥表之前,请运行以上命令清理AD帐户。

密钥表

  1. 每次更换keytab时都要重新启动WebSphere应用程序服务。
  2. 通过运行以下命令validationWAS服务器上的keytab。 validation从KDC中提取Kerberos票证,因此如果成功,则表示keytab没有任何问题。

kinit -k -t MyServer.keytab HTTP / TEST.abc.mycompany.com

注意:kinit不附带Windows,但它附带Java JRE / JDK,因此您需要将keytab的副本放在存在kinit的同一目录中,否则确保位于系统PATH中为了成功运行命令。

网页浏览器

确保将Web浏览器配置为自动将Windows凭据(实质上是包含Kerberos服务票证的SPNEGO令牌)发送到应用程序服务器。 为此,请按照以下说明操作。

IE浏览器:

  1. 通过从“控制面板”或Internet Explorer的“工具”菜单中选择“Internet选项”,打开“Internet选项”对话框。
  2. 在“Internet选项”对话框的“安全”选项卡上,选择“本地Intranet”,然后单击“自定义级别”。
  3. 在“安全设置”对话框的“登录”下,选择“仅在Intranet区域中自动登录”,然后单击“确定”。
  4. 在“安全设置”选项卡上的“Internet选项”对话框中,仍然选中“本地Intranet”,单击“站点”。
  5. 在“本地Intranet”对话框中,单击“高级”。
  6. 在下一个对话框(也称为“本地Intranet”)中,在“将该网站添加到区域中”框中键入您的网站的URL(例如, http://test.abc.mycompany.com ),然后单击添加。
  7. 在“本地Intranet”对话框中,单击“确定”。
  8. 在原始的“本地Intranet”对话框中,单击“确定”。
  9. 在“高级”选项卡下,确保启用“启用集成Windows身份validation”(这是默认设置)。
  10. 在“Internet选项”对话框中,单击“确定”。

参考: 配置Internet Explorer以进行自动登录