我跟随本文创建了一个用于测试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服务器)。
您有什么建议吗?
答案 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