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名稱改為小寫會導致這個問題

相關內容