通过负载平衡器通过SSL的OAUTH2 LDAP无法实现握手

问题描述

我有一个使用OAUTH2和SSL的spring boot应用程序。 域控制器的证书已安装到我的证书存储中,并且我使用的端口等正确。

现在,如果我直接连接到域控制器,那么一切正常,握手就可以了,因为我要直接进行操作

javax.net.ssl | DEBUG | 4A | RMI TCP Connection(5)-10.81.64.12 | 2020-10-28 10:11:36.950 GMT | ClientHello.java:653 |产生的ClientHello握手消息( “ ClientHello”:{ “客户端版本”:“ TLSv1.2”, “压缩方法”:“ 00”, “扩展名”:[ “ server_name(0)”:{ 类型=主机名(0),值= DOMAINCTL1.mydomain.com }

但是,如果我通过域控制器上的负载平衡器,那么它将使用平衡器地址,该地址不是证书所包含的地址,因为证书位于域控制器而不是负载平衡器上。

javax.net.ssl | DEBUG | 4E | Thread-11 | 2020-10-28 10:17:02.340 GMT | ClientHello.java:653 |产生的ClientHello握手消息( “ ClientHello”:{ “客户端版本”:“ TLSv1.2”, “扩展名”:[ “ server_name(0)”:{ type = host_name(0),值= ad-dev.mydomain.com }

关于如何将域控制器识别为证书检查而非负载平衡器的任何想法。

org.springframework.ldap.CommunicationException:简单绑定失败:ad-dev.mydomain.com:636;嵌套异常是javax.naming.CommunicationException:简单绑定失败:ad-dev.mydomain.com:636 [根本异常是java.net.socketException:连接或出站已关闭]

解决方法

证书在域控制器上,而不在负载平衡器上

证书必须在进行SSL握手的任何地方。如果它是负载均衡器(可能是),那么它必须在那儿。

如何将域控制器识别为证书检查

这是不可能的,并且会完全破坏安全性。您需要一个在正确位置具有正确证书的系统。如果希望DC进行握手,则需要一个TCP级别的负载平衡器。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...