如何解决在Docker Linux上无法从javaKerberos Sql Server连接找到默认领域
我正在尝试通过javaKerberos连接到sql服务器实例。我可以使它在Windows(非docker)和非docker Linux实例上运行,但是在Linux docker上我始终收到“无法找到默认领域”错误。请注意,我正在运行Amazon Linux docker映像,因为最终我试图使它在ECS上运行,尽管此刻我正在Windows的Docker桌面上对其进行测试。
你们中的任何人对尝试什么有任何建议吗?我尝试了krb5.conf和各种Java命令行标志的许多组合,但是还没有任何效果。
下面是我一直在使用的所有相关kerberos配置项。
在docker实例上运行jar的命令
java -jar app.jar -Djava.security.krb5.conf=/opt/krb5.conf -Djava.security.auth.login.config=/opt/jaas.conf -Djavax.security.auth.useSubjectCredsOnly=false
EXCEPTION
Caused by: org.ietf.jgss.GSSException: Invalid name provided (Mechanism level: KrbException: Cannot locate default realm)
at sun.security.jgss.krb5.Krb5NameElement.getInstance(Krb5NameElement.java:129) ~[na:1.8.0_252]
at sun.security.jgss.krb5.Krb5MechFactory.getNameElement(Krb5MechFactory.java:95) ~[na:1.8.0_252]
at sun.security.jgss.GSSManagerImpl.getNameElement(GSSManagerImpl.java:203) ~[na:1.8.0_252]
at sun.security.jgss.GSSNameImpl.getElement(GSSNameImpl.java:477) ~[na:1.8.0_252]
at sun.security.jgss.GSSNameImpl.init(GSSNameImpl.java:201) ~[na:1.8.0_252]
at sun.security.jgss.GSSNameImpl.<init>(GSSNameImpl.java:170) ~[na:1.8.0_252]
at sun.security.jgss.GSSNameImpl.<init>(GSSNameImpl.java:151) ~[na:1.8.0_252]
at sun.security.jgss.GSSManagerImpl.createName(GSSManagerImpl.java:128) ~[na:1.8.0_252]
at com.microsoft.sqlserver.jdbc.KerbAuthentication.intAuthInit(KerbAuthentication.java:58) ~[mssql-jdbc-7.4.1.jre8.jar!/:na]
krb5.conf
[libdefaults]
default_realm = US.TEST.COM
dns_lookup_kdc = true
dns_lookup_realm = true
ticket_lifetime = 86400
renew_lifetime = 604800
forwardable = true
default_tgs_enctypes = rc4-hmac
default_tkt_enctypes = rc4-hmac
permitted_enctypes = rc4-hmac
udp_preference_limit = 1
[realms]
US.TEST.COM = {
kdc = crldap1.us.test.com
admin_server =crldap1.us.test.com
}
[domain_realm]
.us.test.com = US.TEST.COM
us.test.com = US.TEST.COM
[default_realm]
.us.test.com = US.TEST.COM
us.test.com = US.TEST.COM
jaas.conf
Client {
com.sun.security.auth.module.Krb5LoginModule required
useKeyTab=false
useTicketCache=true
doNotPrompt=true;
};
连接字符串
spring.datasource.url =jdbc:sqlserver://DBSERVER\\SERVER_DEV;databaseName=DB1;authenticationScheme=JavaKerberos;integratedSecurity=true;userName=user@US.TEST.COM;password=P@SSW0RD
解决方法
您始终可以检查的一件事是krb5.conf文件的编码。
我们无法将编码自动设置为UTF-8-BOM
。
显然,某些系统无法处理该问题,因此无法读取krb5.conf。这将触发KrbException: Cannot locate default realm
。
将编码更改为UTF-8
对我来说很成功。
如果这不起作用,我建议您检查krb5.conf文件是否由于其他原因而无法读取。以我的经验,此错误通常是由读取文件时的问题引起的。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。