我正在使用供应商提供的 Apache Tomcat 配置,该配置利用 JNDI 领域连接到 Active Directory 以执行用户身份验证。部分配置包括指定用于用户身份验证的目标的连接 URL 和可选的替代 URL。
通过使用与 Eclipse Adoptium 11.0.17+8 一起运行的 Apache Tomcat v9.0.68.0 捆绑软件的最新版本,连接尝试将被定向到我们基于云的 AD 域控制器以服务身份验证请求。没有防火墙规则允许此流量进出公司网络。当我们使用 WireShark 查看数据包捕获时,我们可以看到从目标端口为 636 (LDAPS) 的应用程序服务器以及在 connectionUrl 和/或 alterUrl 领域选项中定义的本地域控制器的目标服务器发出的流量。
当我们使用 Panorama 查看防火墙日志时,我们会在端口 636 上看到应用程序服务器的源以及 AWS 域控制器或 Azure 域控制器的目标服务器。这些对应于我们在应用程序中看到的日志:
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]]
我与供应商的研发团队以及我们的域管理员和网络/防火墙团队合作,没有人能够提出原因或解决方案来防止这种情况发生。如果不出意外,我希望尝试从该过程中获取更多信息,无论是通过调试日志记录、连接器、引擎、领域等的其他选项还是黑魔法!
这是 server.xml 文件的 JNDI 领域定义的摘录:
<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>```