Grails 3 和 Spring 安全 LDAP 未加密流量

Grails 3 and Spring Security LDAP Unencrypted Traffic

我是 运行 Tomcat 8 上的 Grails 3 应用程序。我开发的应用程序正在通过 HTTPS,并使用 grails spring 安全 LDAP 插件进行身份验证。 (插件提供的默认登录页面,没有任何自定义)Tomcat 启用仅使用 HTTPS,禁用 HTTP。

我的 application.groovy 文件还包含以下 spring 安全代码:

grails.plugin.springsecurity.ldap.context.server = 'ldap://192.168.3.4:389/DC=MY_DOMAIN,DC=Net'
grails.plugin.springsecurity.password.algorithm = 'SHA-256'

(其他的只是查询内容的配置参数等)

这是我的测试场景:

我有一台 Windows 机器运行应用程序,托管在 Ubuntu 机器上。 ubuntu 机器向 AD (Active Directory) 机器发出 LDAP 请求。 作为参考,这里是 IP:

Windows Machine: 192.168.1.1
Tomcat Ubuntu Machine: 192.168.1.10
AD Machine: 192.168.3.4

监控来自.1(windows机器)的TCP流量后,一切都是乱码,无法读取。当嗅探从 .10 到 .4(Tomcat 到 AD)的数据包时,LDAP 数据包是明文的。当然,我不认为这应该是这样的。我是否需要在 tomcat 中执行一些额外的步骤来确保 ldap 流量被加密?

您需要使用安全 LDAP,它使用端口 636 and/or 前缀 ldaps://。

我一直在阅读 this post,结果证明我们可以 运行 LDAP 本身通过 ssl。所以我们的连接字符串来自:

'ldap://192.168.3.4:389/DC=MY_DOMAIN,DC=Net'

'ldaps://192.168.3.4:636/DC=MY_DOMAIN,DC=Net'

注意,除此之外,您还需要确保将根证书添加到Java中的信任列表中。对我来说,以下命令似乎可以解决问题:

keytool -import -noprompt -trustcacerts -alias myAdCert -file /location_of_cert/adcert.cer -keystore $JAVA_HOME/jre/lib/security/cacerts -storepass changeit