kerberos [jdbcドライバ]を介してRedhat7とMSSQLデータベース間の接続を確立する

kerberos [jdbcドライバ]を介してRedhat7とMSSQLデータベース間の接続を確立する

私は、mssqlに接続するためにRedhat 7で作成されたJavaアプリケーションが、当社の自動デバイスによって生成されたキータブに格納されているプリンシパルを解析できないという非常に迷惑な問題を解決しています。プリンシパルは svcAccount/fqdn@RELM キータブに保存されます。

テストのために、次のコマンドを使用してcCacheを作成しました。

kinit -f -c -p FILENAME svcAccount@REALM

この接続構成は、cCacheに格納されているサブジェクトの構文がMicrosoftアプリケーションに対して不安定であるため、うまく機能しますが、使用しているキータブとの接続を確立しようとすると、次のエラーが発生します。

**com.microsoft.sqlserver.jdbc.SQLServerException: Login failed for user 
'domain\ svcAccount/fqdn '**

KRB5.confに "auth_to_local"を追加しようとしましたが、kerberosがこの設定を無視しているようです。

Windowsサーバーでこのプリンシパル名をマッピングする方法を知っていますか?私のJavaアプリケーションでこれを修正する必要がありますか、それとも間違ったKerberos設定ですか?より難しくするには、kadmin権限がなく、キータブを変更することはできません。


Kerberos 構成:

Klist –kte keytab.file:

KVNO Timestamp           Principal

   3 12/31/1969 19:00:00 svcAccount/fqdn@RELM (encryption method)

   3 12/31/1969 19:00:00 svcAccount/fqdn@RELM (encryption method)

   3 12/31/1969 19:00:00 svcAccount/fqdn@RELM (encryption method)

SQLJDBCDriver.conf

SQLJDBCDriver {

com.sun.security.auth.module.Krb5LoginModule required

useKeyTab=true

keyTab="FILE:/home/filename.keytab"

principal=" svcAccount/fqdn@RELM "

storeKye=true

debug=true

credsType=both

doNotPrompt=true;

};

Javaはパラメータで始まります。

JAVA_OPTS="-Dspring.jmx.enabled=false -Dkerberos.client.reference.name=SQLJDBCDriver -Djava.security.auth.login.config=/etc/path/SQLJDBCDriver.conf -Djavax.security.auth.useSubjectCredsOnly=false -Dsun.security.krb5.debug=true -Djava.security.krb5.conf=/etc/krb5.conf -Dspring.profiles.active=uat"

接続文字列:

url: jdbc:sqlserver://serverName:2431;databaseName=DB_NAME;integratedSecurity=true;authenticationScheme=JavaKerberos;serverSpn=MSSQLSvc/fqdn:2431@DOMAIN

KRB5.CONF

[libdefaults]

  default_realm = DOMAIN.COM

  default_ccache_name = KEYRING:persistent:%{uid}

  dns_lookup_realm = true

  dns_lookup_kdc = true

  noaddresses = true

  kdc_timesync = 0

  rdns = false

  kdc_timeout = X

  max_retries = X

  ticket_lifetime = XX

  renew_lifetime = XX



[realms]

    DOMAIN.COM = {

    }



[domain_realm]

   domain.com = DOMAIN.COM

[appdefaults]

       pam = {

               validate = true

               keytab = /etc/krb5.keytab

               banner = login

               minimum_uid = X

               addressless = X

               use_shmem = tX

               ignore_unknown_principals = X

       }

       kinit = {

               renewable = true

               forwardable= true

       }

ベストアンサー1

**com.microsoft.sqlserver.jdbc.SQLServerException: Login failed for user
'domain\ svcAccount/fqdn '**

前後にスペースがあることを確認してくださいsvcAccount/fqdn

SQLJDBCDriver.confでは、これらのスペースは二重引用符内にも存在します。

principal=" svcAccount/fqdn@RELM "

svcAccountはと同じではなく、<space>svcAccount同じRELM<space>ではありませんRELM。余分なスペースを削除してSQLJDBCDriver.confもう一度やり直してください。

さらに、ファイル[domain_realm]のこの部分には、krb5.conf次の行のいずれかまたは両方が必要な場合と必要がない場合があります。

domain = RELM
.domain = RELM

おすすめ記事