密码的SPNEGO身份验证问题

时间:2017-02-28 00:11:37

标签: 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
    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/TEST.abc.mycompany.com@ABC.MYCOMPANY.COM -mapUser wasMyServer -mapOp set -pass mypassword -crypto RC4-HMAC-NT -pType KRB5_NT_PRINCIPAL

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

1 个答案:

答案 0 :(得分:3)

虽然您没有使用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 分配给该帐户。
  3. 参考: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

    所有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. 随时更换密钥表时重新启动WebSphere应用程序服务。
    2. 运行以下命令验证WAS服务器上的keytab。验证从KDC中提取Kerberos票证,因此如果成功,则表示keytab没有任何问题。
    3.   

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

      注意:kinit不附带Windows,但它带有Java JRE / JDK,因此您需要将keytab的副本放在kinit所在的同一目录中,否则确保<JAVA HOME>处于系统PATH,以便成功运行命令。

      网络浏览器

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

      Internet Explorer:

      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身份验证”(这是默认设置)。
      10. 在“Internet选项”对话框中,单击“确定”。
      11. 参考:Configuring Internet Explorer for Automatic Logon