KrbException: 資格情報の作成に失敗しました。(63) - サービス資格情報がありません

KrbException: 資格情報の作成に失敗しました。(63) - サービス資格情報がありません

私は、Oracle Java 1.8.0_91-b14 (not ) を搭載した Ubuntu 16.04 上で Tomcat 8.0.35 を設定し、openjdkMicrosoft SQL データベースへの認証時に Kerberos 認証を使用するように取り組んでいます。私が遭遇している問題は、kinit適切なスイッチを使用して適切なユーザーとして実行した後、次のようになります。

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

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/[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名前を小文字に変更します。この問題を引き起こす

関連情報