首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法在docker上从javaKerberos Server连接中定位默认领域

无法在docker上从javaKerberos Server连接中定位默认领域
EN

Stack Overflow用户
提问于 2020-08-24 13:51:13
回答 1查看 5.4K关注 0票数 1

我正在尝试通过javaKerberos连接到一个sql server实例。我可以让它在Windows (非对接者)和非docker Linux实例上工作,但我一直在Linux上得到一个“无法定位默认领域”的错误。请注意,我运行的是Amazon对接映像,因为最终我试图让它在ECS上工作,尽管目前im正在我的Desktop for Windows上测试这一点。

你们中有谁对尝试什么有什么建议吗?我已经尝试过许多krb5.conf和各种java命令行标志的组合,但是还没有成功。

下面是我一直使用的所有相关kerberos配置项。

命令在码头实例上运行jar

代码语言:javascript
复制
java -jar app.jar  -Djava.security.krb5.conf=/opt/krb5.conf  -Djava.security.auth.login.config=/opt/jaas.conf -Djavax.security.auth.useSubjectCredsOnly=false

异常

代码语言:javascript
复制
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.

代码语言:javascript
复制
[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

代码语言:javascript
复制
Client {
  com.sun.security.auth.module.Krb5LoginModule required
  useKeyTab=false
  useTicketCache=true
  doNotPrompt=true;
};

连接字符串

代码语言:javascript
复制
spring.datasource.url =jdbc:sqlserver://DBSERVER\\SERVER_DEV;databaseName=DB1;authenticationScheme=JavaKerberos;integratedSecurity=true;userName=user@US.TEST.COM;password=P@SSW0RD
EN

回答 1

Stack Overflow用户

发布于 2020-10-05 07:55:30

您可以始终检查的一件事是krb5.conf文件的编码。

我们在自动将编码设置为UTF-8-BOM时遇到了问题。显然,有些系统无法处理这个问题,因此无法读取krb5.conf。这将触发KrbException: Cannot locate default realm

将编码更改为UTF-8对我起了作用。

如果这不起作用,我建议检查krb5.conf文件是否由于其他原因无法读取。根据我的经验,这个错误通常是由读取文件的问题引起的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63562425

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档