我按照这篇文章创建了一个用于测试kerberos身份验证的java程序:https://docs.oracle.com/javase/jndi/tutorial/ldap/security/gssapi.html
我唯一改变的是配置文件。
当我将Windows客户端的DNS设置指向我的内部Windows DNS / Curb服务器时,该程序工作正常,但是当我使用单独的公共DNS服务器时它会超时,即使:1。我的内部服务器有端口tcp / udp 88打开2.我的外部服务器需要SRV记录(端口88上的_kerberos._tcp和_kerberos._udp)3。我可以使用不使用我的Windows服务器的iPad,使用和不使用用户证书来实现kerberos身份验证DNS
iPad和我的其他客户都使用相同的网络(我的家庭wifi),我也尝试通过手机共享数据连接。
鉴于上面的#3以及java程序使用我的内部DNS的客户端的事实,我有点困惑为什么我的java程序在两种情况下都不起作用(即使用内部或外部DNS服务器) 。
你有什么建议吗?
从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