KrbException:无法创建凭据。 (63) - 没有服务信用

KrbException:无法创建凭据。 (63) - 没有服务信用

我正在使用 Oracle Java 1.8.0_91-b14(不是openjdk)在 Ubuntu 16.04 上设置 Tomcat 8.0.35,以便在对 Microsoft SQL 数据库进行身份验证时使用 Kerberos 身份验证。我遇到的问题是,在使用kinit适当的开关以适当的用户身份运行后:

sudo -u tomcat8 kinit -k -t /etc/tomcat8/tomcat8.keytab HTTP/[email protected]

我在 Tomcat 的本地主机日志中收到此错误:

Caused by: GSSException: No valid credentials provided (Mechanism level: Fail to create credential. (63) - No service creds)
Caused by: KrbException: Fail to create credential. (63) - No service creds

当我跑步时

sudo -u tomcat8 klist

我得到了预期的回应:

root@linux-test2:/home/tbourne# sudo -u tomcat8 klist
Ticket cache: FILE:/tmp/krb5cc_111
Default principal: HTTP/[email protected]

Valid starting       Expires              Service principal
06/23/2016 14:33:10  06/24/2016 00:33:10  krbtgt/[email protected]
        renew until 06/24/2016 14:33:07

当我在 Tomcat 启动期间捕获数据包时,我看到传递的服务/实例名称为krbtgt/OUR.DOMAIN.LOCAL.我期望这是上面提到的默认主体。当我serverSpn在数据库连接字符串中设置选项时,我得到了上述结果。

当我删除该serverSpn选项时,它使用不同的主体名称。不幸的是,我无法使用该名称,因为每个 Tomcat 实例都需要唯一的登录名(因此也需要唯一的 SPN)。MSSQLSvc/[email protected]

我们的数据库连接字符串如下所示:

property.db.driverClassName=com.microsoft.sqlserver.jdbc.SQLServerDriver
property.db.jdbcUrl=jdbc:sqlserver://sql-server.our.domain.local:1434;databaseName=DBAUTH2;integratedSecurity=true;authenticationScheme=JavaKerberos;serverSpn="HTTP/[email protected]"

我已经下载了 Microsoft JDBC 驱动程序版本 4.2 并且 Tomcat 正在使用它。

我不明白为什么 Tomcat 在向数据库进行身份验证时没有发送正确的主体名称。任何见解将不胜感激。

如果有帮助的话,我可以发布krb5.iniTomcat 的 、krb5.conf、和任何其他配置。jaas.conf

答案1

Kerberos配置文件( /etc/krb5.conf)区分大小写,将default_realm名称更改为小写会导致这个问题

相关内容