首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有密码的SPNEGO身份验证问题

带有密码的SPNEGO身份验证问题
EN

Stack Overflow用户
提问于 2017-02-28 00:11:36
回答 1查看 1.7K关注 0票数 2

我已经将我的应用程序配置为通过SPNEGO和Websphere使用Kerberos身份验证。

以下是细节

krb5.conf

代码语言:javascript
复制
[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

代码语言:javascript
复制
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性质

代码语言:javascript
复制
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

当我访问我的应用程序时,我会得到以下错误

代码语言:javascript
复制
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)

命令创建keytab文件。

代码语言:javascript
复制
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是丢失的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-28 03:52:15

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

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

参考资料:在WebSphere应用服务器中管理SPNEGO :使用Kerberos服务主体名称的技巧

编辑:

KRB5.

您的krb5.conf内部似乎有问题。只有这两行显示为支持RC4-HMAC:

代码语言:javascript
复制
default_tkt_enctypes = rc4-hmac des-cbc-md5
default_tgs_enctypes = rc4-hmac des-cbc-md5

若要完全启用RC4-HMAC加密类型,请在下面添加附加行:

代码语言:javascript
复制
permitted_enctypes = rc4-hmac des-cbc-md5

(顺便提一句,没有人再使用des-cbc-md5加密类型了,但我把它留在了那里)

DNS域名需要在整个文件中保持一致。为了简单起见,DNS域名和Kerberos领域名称应该匹配(除了在大写中指定的Kerberos域名外)。它们不一定要匹配,但是当它们不匹配时,会使故障排除数量级更加困难。

既然您澄清了您的AD域名是abc.mycompany.com,我建议使用一个krb5.conf文件,如下所示:

代码语言:javascript
复制
[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

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

SPNs

在任何给定的Kerberos领域中,所有SPN都必须是唯一的。如果SPN重复,请运行以下命令查找注册重复SPN的AD帐户,并从未使用SPN的帐户中删除SPN。这方面的提示是,生成keytab的AD帐户上的SPN是应该注册SPN的唯一位置。因此,在这种情况下,只有AD帐户wasMyServer应该有SPN /TEST.abc.mycompany.com。若要在目录中查找所有重复的SPN,请在与AD域连接的计算机上的Windows命令Shell中运行以下命令:

代码语言:javascript
复制
setspn -X

输出将列出注册重复SPN的所有AD帐户,您可以根据我的指导采取纠正措施。命令:

代码语言:javascript
复制
setspn -D HTTP/TEST.abc.mycompany.com wasMyServer

...will从AD帐户名称中删除重复的SPN。或者您也可以在AD用户和计算机GUI中删除它。在重新创建keytab之前,每次运行上述命令来清除AD帐户。

  1. 随时重新启动WebSphere应用程序服务,随时替换keytab。
  2. 通过运行以下命令验证WAS服务器上的keytab。验证从KDC中提取Kerberos票证,因此如果成功,这意味着keytab没有任何问题。

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

注意: kinit不是随Windows一起提供的,但是它附带了Java /JDK,所以您需要将keytab的副本放在kinit存在的同一个目录中,或者确保<JAVA HOME>在系统路径中,以便成功地运行命令。

网络浏览器

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

Internet Explorer:

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

参考资料:为自动登录配置Internet

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42498111

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档