我正在使用OracleJava1.8.0_91-b14(非openjdk)在Ubuntu16.04上设置Tomcat8.0.35,以便在对Microsoft数据库进行身份验证时使用Kerberos身份验证。我遇到的问题是,在以适当的用户身份使用适当的开关运行kinit之后:
sudo -u tomcat8 kinit -k -t /etc/tomcat8/tomcat8.keytab HTTP/linux-test2.our.domain.local@OUR.DOMAIN.LOCAL我从Tomcat获得了localhost日志中的错误:
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/linux-test2.our.domain.local@OUR.DOMAIN.LOCAL
Valid starting Expires Service principal
06/23/2016 14:33:10 06/24/2016 00:33:10 krbtgt/OUR.DOMAIN.LOCAL@OUR.DOMAIN.LOCAL
renew until 06/24/2016 14:33:07当我在Tomcat启动期间捕获数据包时,我看到一个服务/实例名称正在传递给krbtgt/OUR.DOMAIN.LOCAL。我原以为这是上面提到的默认校长。在数据库连接字符串中设置serverSpn选项时,将得到上述结果。
当我删除serverSpn选项时,它使用不同的主体名称MSSQLSvc/sql-server.our.domain.local@OUR.DOMAIN.LOCAL。不幸的是,我不能使用这个名称,因为我将需要每个Tomcat实例的唯一登录(从而是唯一的SPN)。
我们的数据库连接字符串如下所示:
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/linux-test2.our.domain.local@OUR.DOMAIN.LOCAL"我已经下载了Microsoft驱动程序4.2版本,Tomcat正在使用它。
我不明白为什么Tomcat在对数据库进行身份验证时没有发送正确的主体名称。任何洞察力都将不胜感激。
我可以发krb5.ini给Tomcat、krb5.conf、jaas.conf和其他任何有帮助的信息。
发布于 2023-05-05 14:55:51
Kerberos配置文件(/etc/krb5.conf)区分大小写,并将default_realm名称更改为小写会引起这个问题。
https://unix.stackexchange.com/questions/291706
复制相似问题