有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

带有SPNEGO SSO的java Tomcat 6仍会提示输入登录名和密码

我正在尝试使用SPNEGO filter为Tomcat(6)设置Windows Active Directory SSO

我已经按照示例进行了设置,但是当我尝试访问hello_spnego时,仍然会提示我输入登录名和密码。jsp

我可能遗漏了一些东西,所以这是我的配置:

网络。xml(与spnego相关):

<filter>
    <filter-name>SpnegoHttpFilter</filter-name>
    <filter-class>net.sourceforge.spnego.SpnegoHttpFilter</filter-class>
    <init-param>
        <param-name>spnego.allow.basic</param-name>
        <param-value>false</param-value>
    </init-param>
    <init-param>
        <param-name>spnego.allow.localhost</param-name>
        <param-value>false</param-value>
    </init-param>
    <init-param>
        <param-name>spnego.allow.unsecure.basic</param-name>
        <param-value>false</param-value>
    </init-param>
    <init-param>
        <param-name>spnego.login.client.module</param-name>
        <param-value>spnego-client</param-value>
    </init-param>
    <init-param>
        <param-name>spnego.login.server.module</param-name>
        <param-value>spnego-server</param-value>
    </init-param>
    <init-param>
        <param-name>spnego.krb5.conf</param-name>
        <param-value>${catalina.home}\conf\krb5.conf</param-value>
    </init-param>
    <init-param>
        <param-name>spnego.login.conf</param-name>
        <param-value>${catalina.home}\conf\login.conf</param-value>
    </init-param>
    <init-param>
        <param-name>spnego.preauth.username</param-name>
        <param-value>aqw</param-value>
    </init-param>
    <init-param>
        <param-name>spnego.preauth.password</param-name>
        <param-value>pass</param-value>
    </init-param>
    <init-param>
        <param-name>spnego.prompt.ntlm</param-name>
        <param-value>false</param-value>
    </init-param>
    <init-param>
        <param-name>spnego.logger.level</param-name>
        <param-value>1</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>SpnegoHttpFilter</filter-name>
    <url-pattern>*.jsp</url-pattern>
</filter-mapping>

krb5。形态:

    [libdefaults]
default_realm = TEST.LOCAL
default_tkt_enctypes = rc4-hmac,aes256-cts-hmac-sha1-96,aes128-cts-hmac-sha1-96
default_tgs_enctypes = rc4-hmac,aes256-cts-hmac-sha1-96,aes128-cts-hmac-sha1-96
forwardable=true

[realms]
TEST.LOCAL = {
    kdc = SERVER_WITH_AD:88
    default_realm = TEST.LOCAL
}

[domain_realm]
dev.local = TEST.LOCAL
.dev.local = TEST.LOCAL

登录。形态:

spnego-client {
    com.sun.security.auth.module.Krb5LoginModule required;
};

spnego-server {
    com.sun.security.auth.module.Krb5LoginModule required
    storeKey=true
    isInitiator=false
    useKeyTab=true
    keyTab="C:\Osys\QuartisTools\Tomcat\conf\aqw.keytab"
    ;
};

编辑:以下是我所做的:

  • 我在我的服务器上创建了一个用户(aqw),服务器是带有广告的
  • 我使用以下命令设置他的SPN:

    setspn-一个HTTP/SERVER_和_AD.Test。本地aqw

  • 我使用以下命令为他创建了一个keytab文件:

    ktpass/out c:\aqw。keytab/mapuseraqw@Test.local/princhhttp/TOMCAT_SERVER@Test.local/pass*/kvno 0

  • 我将keytab文件传输到Tomcat/conf。

  • 我添加了登录名。conf和krb5。conf到Tomcat/conf
  • 我编辑了我的用户帐户(在AD的用户界面上)以接受AES 128位加密
  • 我将JCE JAR添加到jdk1中。7.0_51/jre/lib/security fromthis page在从另一个问题上找到信息之后

其他信息:
-带有广告的服务器运行Windows SERVER 2012(x64)
-TOMCAT_服务器运行Windows7Ultimate(x64)

编辑2: 正如Whome所建议的,我将地址添加到了受信任站点的列表中

在某个时候,我不再看到用户名/登录提示,但我现在在Tomcat中遇到错误(显示为HTTP 500错误):
KrbException:无效参数(400)-找不到适当类型的密钥,无法使用HMAC SHA1-96解密AP REP-AES256 CTS模式
所以它可能找不到我的键盘


共 (1) 个答案

  1. # 1 楼答案

    在出现“找不到密钥”错误后,我重新读取了conf文件,Whome建议将文件名改为Unix样式。然后我把它们移到conf文件旁边,以获得尽可能短的路径。我还添加了一个主体as in the server keytab testing procedure described here:,以便登录。配置文件是:

    spnego-client {
        com.sun.security.auth.module.Krb5LoginModule required;
    };
    
    spnego-server {
        com.sun.security.auth.module.Krb5LoginModule required
        useKeyTab=true
        keyTab="appserver.keytab"
        principal=aqw
        storeKey=true;
    };  
    

    这给了我一个校验和错误,所以我重新生成了我的keytab文件

    这又显示了一个不同的错误:
    javax。安全啊。登录。LoginException:没有可用于从用户获取身份验证信息的回调处理程序

    所以我编辑了我的网站。xml允许不安全、基本、NTLM提示符和本地主机。就像这样:

        <init-param>
            <param-name>spnego.prompt.ntlm</param-name>
            <param-value>true</param-value>
        </init-param>
    
        <init-param>
            <param-name>spnego.allow.basic</param-name>
            <param-value>true</param-value>
        </init-param>
    
        <init-param>
            <param-name>spnego.allow.localhost</param-name>
            <param-value>true</param-value>
        </init-param>
    
        <init-param>
            <param-name>spnego.allow.unsecure.basic</param-name>
            <param-value>true</param-value>
        </init-param>
    

    奇怪的是,这显示了另一个例外:
    javax。安全啊。登录。LoginException:没有可用于从用户获取身份验证信息的回调处理程序

    我说得很奇怪,因为我的理解是,通过允许NTLM提示符,我授权了另一种身份验证方法

    最奇怪的是,今天早上,它起作用了。我不知道为什么。重新启动服务器后,它仍能工作。我收到“你好用户!”向正确的用户发送消息。但是the HelloKeytab test class不起作用

    编辑:最后,它停止工作,无法让它工作。我一直收到一个校验和错误。所以我最终使用了Waffle