Java的Kerberos身份验证在外部网络上超时

时间:2019-03-10 15:22:38

标签: java kerberos

我跟随本文创建了一个用于测试kerberos身份验证的Java程序:https://docs.oracle.com/javase/jndi/tutorial/ldap/security/gssapi.html

我唯一更改的是配置文件。

当我将Windows客户端的DNS设置指向内部Windows DNS / Kerb服务器时,该程序运行良好,但是当我使用单独的公共DNS服务器时,该超时,即使: 1.我的内部服务器的端口tcp / udp 88打开 2.我的外部服务器具有所需的SRV记录(端口88上的_kerberos._tcp和_kerberos._udp) 3.无论我是否使用Windows服务器的DNS,不是的iPad,无论有没有用户证书,我都能实现kerberos身份验证。

iPad和我的其他客户端都使用相同的网络(我的家庭wifi),并且我还尝试通过手机共享数据连接。

鉴于上面的#3以及Java程序可以从使用我的内部DNS的客户端运行的事实,我有点困惑为什么我的Java程序不能在两种情况下都可以工作(即使用内部或外部) DNS服务器)。

您有什么建议吗?

1 个答案:

答案 0 :(得分:1)

来自GitBook Hadoop和Kerberos:门外的疯狂 部分 Error Messages to Fear

  

将Kerberos切换为使用TCP而不是UDP会使 [有些奇怪   问题] 消失...
注意,UDP超时也慢很多...   Kerberos等待约90秒才能超时,这是很长的时间   注意有问题...

     

/etc/krb5.conf

[libdefaults]
  udp_preference_limit = 1

PS:“超时前〜90秒” 可能专门指Java-specific defaults,即

kdc_timeout = 30000
max_retries = 3


一般来说,UDP似乎是许多奇怪的Kerberos问题的根本原因,请参见。例如How to save Kerberos Service Ticket using a Windows Java client?
系统地禁用它可能是一种“好习惯”。