【问题标题】:Failing Kerberos Authentication with kinit on Windows (error: Network is unreachable)在 Windows 上使用 kinit 失败的 Kerberos 身份验证(错误:网络无法访问)
【发布时间】:2021-07-08 10:40:44
【问题描述】:

我在 Windows Server 2019 虚拟机上运行 Active Directory,并且我登录到属于域的 Windows 10 虚拟机。

我想使用 kinit.exe(JDK 16 提供)生成 Kerberos TGT

  • 为端口 88 配置 KDC
  • UDP 和 TCP 端口均已启用
  • Windows Server 域防火墙已关闭
  • Windows 10 域防火墙已关闭
  • 使用相同主体的 LDAP 身份验证工作正常

问题:

[命令提示符]

C:\Users\eugen>kinit
Password for eugen@EXAMPLE.COM:
Exception: java.net.SocketException: Network is unreachable: connect
java.io.UncheckedIOException: java.net.SocketException: Network is unreachable: connect
        at java.base/sun.nio.ch.DatagramSocketAdaptor.connect(DatagramSocketAdaptor.java:120)
        at java.base/java.net.DatagramSocket.connect(DatagramSocket.java:341)
        at jdk.naming.dns/com.sun.jndi.dns.DnsClient.doUdpQuery(DnsClient.java:408)
        at jdk.naming.dns/com.sun.jndi.dns.DnsClient.query(DnsClient.java:214)
        at jdk.naming.dns/com.sun.jndi.dns.Resolver.query(Resolver.java:81)
        at jdk.naming.dns/com.sun.jndi.dns.DnsContext.c_getAttributes(DnsContext.java:434)
        at java.naming/com.sun.jndi.toolkit.ctx.ComponentDirContext.p_getAttributes(ComponentDirContext.java:235)
        at java.naming/com.sun.jndi.toolkit.ctx.PartialCompositeDirContext.getAttributes(PartialCompositeDirContext.java:141)
        at java.naming/com.sun.jndi.toolkit.url.GenericURLDirContext.getAttributes(GenericURLDirContext.java:103)
        at java.security.jgss/sun.security.krb5.KrbServiceLocator.lambda$getKerberosService$1(KrbServiceLocator.java:166)
        at java.base/java.security.AccessController.doPrivileged(AccessController.java:691)
        at java.base/java.security.AccessController.doPrivileged(AccessController.java:865)
        at java.security.jgss/sun.security.krb5.KrbServiceLocator.getKerberosService(KrbServiceLocator.java:164)
        at java.security.jgss/sun.security.krb5.Config.getKDCFromDNS(Config.java:1344)
        at java.security.jgss/sun.security.krb5.Config.getKDCList(Config.java:1230)
        at java.security.jgss/sun.security.krb5.KdcComm.send(KdcComm.java:216)
        at java.security.jgss/sun.security.krb5.KdcComm.send(KdcComm.java:198)
        at java.security.jgss/sun.security.krb5.KrbAsReqBuilder.send(KrbAsReqBuilder.java:345)
        at java.security.jgss/sun.security.krb5.KrbAsReqBuilder.action(KrbAsReqBuilder.java:498)
        at java.security.jgss/sun.security.krb5.internal.tools.Kinit.acquire(Kinit.java:248)
        at java.security.jgss/sun.security.krb5.internal.tools.Kinit.<init>(Kinit.java:134)
        at java.security.jgss/sun.security.krb5.internal.tools.Kinit.main(Kinit.java:96)
Caused by: java.net.SocketException: Network is unreachable: connect
        at java.base/sun.nio.ch.Net.connect0(Native Method)
        at java.base/sun.nio.ch.Net.connect(Net.java:576)
        at java.base/sun.nio.ch.DatagramChannelImpl.connect(DatagramChannelImpl.java:1243)
        at java.base/sun.nio.ch.DatagramSocketAdaptor.connectInternal(DatagramSocketAdaptor.java:91)
        at java.base/sun.nio.ch.DatagramSocketAdaptor.connect(DatagramSocketAdaptor.java:118)
        ... 21 more

我认为问题在于请求没有到达服务器。关于如何识别问题的任何想法?

非常感谢!

【问题讨论】:

    标签: active-directory kerberos windows-server-2019


    【解决方案1】:

    我找到了解决问题的方法。

    如何确定原因:

    运行“ping example.com”会返回这个

    C:\Users\eugen>ping example.com
           Pinging example.com [12.0.12.200] with 32 bytes of data:    Reply from 12.0.12.200: bytes=32 time<1ms TTL=128 Reply from
       10.0.10.185: bytes=32 time<1ms TTL=128 Reply from 12.0.12.200: bytes=32 time<1ms TTL=128 Reply from 12.0.12.200: bytes=32 time<1ms    TTL=128
           Ping statistics for 12.0.12.200:    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss), Approximate round trip times in milli-seconds:    Minimum = 0ms, Maximum = 0ms, Average = 0ms
    

    但运行“nslookup example.com”会返回:

    C:\Users\eugen>nslookup example.com
    Server:  UnKnown
    Address:  2001:477:1a02:1:64ff:fe63:41a9:5600
    
    *** UnKnown can't find example.com: No response from server
    

    ^ 我认为这意味着 DNS 服务器知道如何将域解析为 IPv4 地址,而不是它更喜欢解析为 IPv6 的 IPv6 AND(也许有一个设置在那里使其表现得像这样)。请指出我的逻辑中的任何缺陷。

    问题是如何解决的:

    转到控制面板->查看网络状态和任务->单击活动连接->属性->取消选中“Internet协议版本6(TCP / IPv6)

    在此之后,再次运行 kinit,我成功收到了 TGT。

    【讨论】:

    • DNS 服务器不“喜欢”事物。如果要求他们提供 IPv4 地址(A 类型记录),他们将返回 IPv4 地址。如果要求他们提供 IPv6(AAAA 查询类型),他们将返回 IPv6。如果客户端操作系统同时具有 IPv4 和 IPv6 连接,它将发出两个查询并根据客户端的偏好合并结果。 (如果服务器的管理员不希望 DNS 返回 IPv6 地址,他们就不应该将该地址添加到 DNS...)
    • @user1686 更有意义。谢谢你分享这个
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-24
    • 1970-01-01
    相关资源
    最近更新 更多