tomcat 中的 SPNEGO 总是提示输入密码
SPNEGO in tomcat always prompting password
我的 SPNEGO 配置似乎不起作用,并且在我的 tomcat8 中总是提示输入密码。
Installation/Configuration
SPNEGO install guide
我将库 spnego-r9.jar 添加到“tomcat\lib”文件夹。
还添加了 .conf 文件。
这里是 krb5.conf:
[libdefaults]
dns_lookup_realm = false
ticket_lifetime = 24h
renew_lifetime = 7d
forwardable = true
rdns = false
default_ccache_name = KEYRING:persistent:%{uid}
udp_preference_limit = 1
default_realm=EXAMPLE.COM
default_tkt_enctypes = aes256-cts aes128-cts des3-cbc-sha1 des-cbc-md5 des-cbc-crc aes256-cts-
hmac-sha1-96 rc4-hmac
default_tgs_enctypes = aes256-cts aes128-cts des3-cbc-sha1 des-cbc-md5 des-cbc-crc aes256-cts-
hmac-sha1-96 rc4-hmac
permitted_enctypes = aes256-cts aes128-cts des3-cbc-sha1 des-cbc-md5 des-cbc-crc aes256-cts-
hmac-sha1-96 rc4-hmac
[realms]
EXAMPLE.COM = {
default_domain=example.com
kdc=dc2.example.com:88
}
[domain_realm]
.example.com=EXAMPLE.COM
example.com=EXAMPLE.COM
然后将 SpnegoHttpFilter 添加到 web.xml。
最后但同样重要的是,我联系了我们的管理员并将以下内容添加到在 SpnegoHttpFilter
中注册的用户
setspn.exe -A HTTP/ourserver01.example.com/projectXY exampleUser
setspn.exe -A HTTP/ourserver01/projectXY exampleUser
结果是密码提示,即使我的访问用户登录到 EXAMPLE.COM 域。据我所知,这不应该发生。我登录到我们的服务器,发现它的域是一个工作组(使用 wmic 计算机系统在 cmd 中获取域)这可能是个问题,我该如何解决这个问题?
编辑:
这里是第二个 .conf 文件:
spnego-client {
com.sun.security.auth.module.Krb5LoginModule required;
};
spnego-server {
com.sun.security.auth.module.Krb5LoginModule required
storeKey=true
isInitiator=false;
};
我通过 wireshark 检查了包,发现了 unknown pricipalname 错误。
感谢提示@Samson Scharfrichter
正确的 spn 注册是 setspn.exe -A HTTP/ourserver01.example.com 没有项目本身的 exampleUser。
我的 SPNEGO 配置似乎不起作用,并且在我的 tomcat8 中总是提示输入密码。
Installation/Configuration SPNEGO install guide
我将库 spnego-r9.jar 添加到“tomcat\lib”文件夹。 还添加了 .conf 文件。 这里是 krb5.conf:
[libdefaults]
dns_lookup_realm = false
ticket_lifetime = 24h
renew_lifetime = 7d
forwardable = true
rdns = false
default_ccache_name = KEYRING:persistent:%{uid}
udp_preference_limit = 1
default_realm=EXAMPLE.COM
default_tkt_enctypes = aes256-cts aes128-cts des3-cbc-sha1 des-cbc-md5 des-cbc-crc aes256-cts-
hmac-sha1-96 rc4-hmac
default_tgs_enctypes = aes256-cts aes128-cts des3-cbc-sha1 des-cbc-md5 des-cbc-crc aes256-cts-
hmac-sha1-96 rc4-hmac
permitted_enctypes = aes256-cts aes128-cts des3-cbc-sha1 des-cbc-md5 des-cbc-crc aes256-cts-
hmac-sha1-96 rc4-hmac
[realms]
EXAMPLE.COM = {
default_domain=example.com
kdc=dc2.example.com:88
}
[domain_realm]
.example.com=EXAMPLE.COM
example.com=EXAMPLE.COM
然后将 SpnegoHttpFilter 添加到 web.xml。 最后但同样重要的是,我联系了我们的管理员并将以下内容添加到在 SpnegoHttpFilter
中注册的用户setspn.exe -A HTTP/ourserver01.example.com/projectXY exampleUser
setspn.exe -A HTTP/ourserver01/projectXY exampleUser
结果是密码提示,即使我的访问用户登录到 EXAMPLE.COM 域。据我所知,这不应该发生。我登录到我们的服务器,发现它的域是一个工作组(使用 wmic 计算机系统在 cmd 中获取域)这可能是个问题,我该如何解决这个问题?
编辑: 这里是第二个 .conf 文件:
spnego-client {
com.sun.security.auth.module.Krb5LoginModule required;
};
spnego-server {
com.sun.security.auth.module.Krb5LoginModule required
storeKey=true
isInitiator=false;
};
我通过 wireshark 检查了包,发现了 unknown pricipalname 错误。 感谢提示@Samson Scharfrichter
正确的 spn 注册是 setspn.exe -A HTTP/ourserver01.example.com 没有项目本身的 exampleUser。