You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何阻止配置AD认证的Apache Tomcat JNDI Realm跳转至云域控制器

问题:Tomcat JNDI Realm连接AD时跳转至云域控制器导致认证失败

问题背景

使用供应商提供的Apache Tomcat配置,通过JNDI Realm对接本地Active Directory(AD)做用户认证,配置中明确指定connectionURL和alternateURL指向本地域控制器。但在Tomcat 9.0.68 + Eclipse Adoptium 11.0.17+8环境下,认证请求会意外跳转到AWS/Azure的云域控制器,而企业防火墙未开放该流量的进出权限。

WireShark抓包显示应用服务器确实向配置的本地域控制器636端口发起了出站流量,但Panorama防火墙日志却记录流量实际发往云域控制器的636端口,应用日志报错如下:

Aug 03, 2023 2:55:27 PM org.apache.catalina.realm.JNDIRealm authenticate
SEVERE: Exception performing authentication
javax.naming.PartialResultException [Root exception is javax.naming.CommunicationException: cpr.ca:636 [Root exception is java.net.SocketTimeoutException: connect timed out]]

已尝试排查动作

  • 与供应商研发团队协作排查配置逻辑
  • 联系域管理员确认AD架构与域控制器配置
  • 和网络/防火墙团队核对流量规则

以上均未找到根因,现需:

  1. 阻止流量跳转到云域控制器的方案
  2. 更多排查手段(如调试日志、Realm配置参数等)

现有server.xml中JNDI Realm配置片段

<Realm className="com.bmc.bcan.catalina.realm.BNALockOutRealm"
             failureCount="5"
             lockOutTime="86400"
             cacheSize="1000"
             cacheRemovalWarningTime="3600">
        <Realm className="com.bmc.bcan.catalina.realm.BNAJNDIRealm"
               connectionURL="ldaps://<FQDN1>:636"
               alternateURL="ldaps://<FQDN2>:636"
               connectionName="CN=*****,OU=*****,OU=*****,OU=*****,OU=*****,OU=*****,DC=**,DC=**"
               connectionPassword="<password>"
               userBase="DC=**,DC=**"
               userSearch="(sAMAccountName={0})"
               userSubtree="true"
               referrals="follow"
         />
      </Realm>
      <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="false">
        <Valve className="org.apache.catalina.valves.ErrorReportValve" showReport="false" showServerInfo="false" />
      </Host>
</Engine>

排查与解决建议

一、阻止跳转的核心配置调整

  1. 关闭LDAP引用跟随
    当前配置中referrals="follow"是导致跳转的关键:AD查询时可能返回指向云域控制器的引用,Tomcat会自动跟随。将该参数改为referrals="ignore",强制只使用配置的本地域控制器:

    referrals="ignore"
    

    注意:若AD架构确实需要跨域查询,此调整可能影响正常认证,需结合实际AD结构判断。

  2. 硬绑定本地域控制器DNS解析
    临时修改应用服务器的hosts文件,将<FQDN1>和<FQDN2>绑定到本地域控制器IP,验证是否还会跳转:

    # 示例hosts条目
    192.168.1.100 <FQDN1>
    192.168.1.101 <FQDN2>
    

二、开启调试日志获取详细信息

  1. 开启Tomcat JNDI Realm调试日志
    在conf/logging.properties中添加以下配置,获取JNDI连接、查询、引用处理的详细日志:

    org.apache.catalina.realm.JNDIRealm.level = FINE
    org.apache.catalina.realm.JNDIRealm.handlers = java.util.logging.ConsoleHandler
    javax.naming.level = FINE
    javax.naming.handlers = java.util.logging.ConsoleHandler
    

    重启Tomcat后,查看localhost.log或控制台输出,可追踪LDAP连接的每一步操作,包括是否触发引用跳转及跳转来源。

  2. 排查BMC自定义Realm日志
    由于使用的是com.bmc.bcan.catalina.realm.BNAJNDIRealm(非原生Tomcat JNDIRealm),需查看供应商文档,开启BMC相关组件的调试日志,排查是否存在自定义跳转逻辑。

三、额外排查点

  • 直接验证LDAPS连接
    用ldp.exe(Windows)或ldapsearch(Linux)从应用服务器测试连接配置的<FQDN1>:636,确认返回的是本地AD数据,无云域引用。
  • 检查AD站点配置
    联系域管理员,确认本地AD站点是否配置正确,是否存在指向云域控制器的自动站点跳转规则。
  • 清空LDAP连接池
    若启用了LDAP连接池,可能存在旧连接指向云节点的情况。可添加connectionPool="false"到BNAJNDIRealm配置关闭连接池,或重启Tomcat清空连接池。

内容的提问来源于stack exchange,提问作者Greg M

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 01:24:56