Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 带有密码的SPNEGO身份验证问题_Java_Active Directory_Websphere_Kerberos_Spnego - Fatal编程技术网

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

Java 带有密码的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

我已将我的应用程序配置为通过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)

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

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

  • 确保未选中所有帐户选项(密码永不过期除外)
  • 确保已将SPN HTTP/TEST.abc.mycompany.com分配给该帐户
  • 参考:

    编辑:

    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领域名称应该匹配(除了以大写形式指定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

  • 只要更换keytab,就可以重新启动websphereapplication服务
  • 通过运行以下命令,验证WAS服务器上的密钥表。验证从KDC中提取Kerberos票证,因此,如果验证成功,则意味着keytab没有任何问题 kinit-k-t MyServer.keytab HTTP/TEST.abc.mycompany.com

    注意:kinit不随Windows提供,但它随Java JRE/JDK提供,因此您需要将keytab的副本放入kinit所在的同一目录中,或者确保
    位于系统路径中,以便成功运行该命令

    网络浏览器

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

    Internet Explorer:

  • 通过从“控制面板”或Internet Explorer的“工具”菜单中选择“Internet选项”,打开“Internet选项”对话框
  • 在“Internet选项”对话框的“安全”选项卡上,选择“本地Intranet”,然后单击“自定义级别”
  • 在“安全设置”对话框的“登录”下,选择“仅在Intranet区域中自动登录”,然后单击“确定”
  • 在“安全设置”选项卡上的“Internet选项”对话框中,在本地Intranet仍处于选中状态时,单击“站点”
  • 在“本地intranet”对话框中,单击“高级”
  • 在下一个对话框(也称为本地intranet)中,在“将此网站添加到区域”框中键入网站的URL(例如),然后单击“添加”
  • 在“本地Intranet”对话框中,单击“确定”
  • 在“原始本地Intranet”对话框中,单击“确定”
  • 在“高级”选项卡下,确保启用了“启用集成Windows身份验证”(这是默认设置)
  • 在“Internet选项”对话框中,单击“确定”

  • 参考资料:

    您是否还拥有用于生成键表的命令语法?如果您这样做,请用这些信息编辑您的问题,因为这将提供一个重要的线索。@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