如何确保 Liferay 使用 TLS 进行身份验证

如何确保 Liferay 使用 TLS 进行身份验证

请注意,这是关于 Liferay 和 LDAP 服务器之间的通信,而不是用户浏览器和 Liferay 之间的通信

我在这里问这个问题是因为我在 liferay 论坛上 30 分钟内没有得到任何浏览量(除了我自己的),如果可能的话我想今天解决这个问题......

我看过:

http://www.liferay.com/community/wiki/-/wiki/Main/LDAP

http://www.liferay.com/community/wiki/-/wiki/Main/LDAP+integration

我也读过这个:

http://www.liferay.com/documentation/liferay-portal/6.1/user-guide/-/ai/ldap

我进行了大量搜索,发现许多人都在设置 CAS 并在他们的帖子中提到 LDAP。

问题是我(目前)还没有兴趣实施 CAS。我想为大家设置一个演示服务器,并允许他们使用其 LDAP/AD 凭据登录。我选择绑定,因为我无权访问允许我(以及 liferay)查看所述密码的登录名。

我知道这很疯狂,但我也不想让他们的密码以明文形式发送。:)

所有 liferay 文档都没有讨论如何确保 liferay 启动 TLS。我不是 LDAP 专家,所以也许这通常是由 LDAP 或 AD 服务器强制执行的,但即使在这种情况下,如果文档中能提到如何确保恶意员工或恶意网络入侵者不能简单地监听 life-ray 登录请求来访问每个人的东西,那就太好了。

据我所知,当前 LDAP 实现的正确做法是让客户端针对敏感查询启动 TLS 通信

http://docs.oracle.com/javase/jndi/tutorial/ldap/ext/starttls.html

那么 Liferay 可以做到这一点吗?我需要配置任何额外内容来启用它吗?

事实是http://issues.liferay.com/browse/LEP-4225当我用谷歌搜索时,出现了这个问题,我对 Liferay 中是否实现了这个功能产生了很大的怀疑(但我注意到这是违反“旧版 Liferay”的……)

基本上,我是在寻求一个真正了解的人,来弄清楚什么是/不可用的,以及我是否需要做任何事情来启用与 LDAP/AD 的安全通信。

请注意,我目前对客户端证书或以其他方式向 LDAP 服务器验证客户端 (liferay) 不感兴趣。只是安全地将身份验证委托给 LDAP/AD。

编辑:我刚刚确认(使用 wireshark),在默认配置中,“测试连接”以明文形式发送我的密码,所以这似乎是一个真正的问题

编辑2:还确认登录尝试以明文形式发送密码。显然,加密解决方案是必要的。

答案1

更正我原来的答案在我似乎误读了这个问题之后 - 编辑后更清楚地表明了 LDAP 连接的意思。

不幸的是,我现在无法给出一个很好的答案,但希望能够提供一些有用的指示:

当您通过 SSL 使用 LDAP 连接时,您需要确保 tomcat(连接的发起者)信任 LDAP 服务器提供的证书。此证书很可能不是由已知且受信任的机构颁发的(例如,它可能是自签名的)。

请记住,SSL 不仅意味着加密,还意味着信任另一端,相信它是它声称的那个:如果任何中间人可以让你连接到加密的自己,那么依赖加密就是愚蠢的。因此,您需要一些您连接的一方的身份证明。

当您在 Google 上搜索“LDAP SSL Java”时,您会得到很多结果,这些结果提供了有关如何配置 tomcat 虚拟机(及其密钥库)的很好示例和说明。是的,您需要将信任配置到该虚拟机。http://docs.oracle.com/javase/jndi/tutorial/ldap/security/ssl.html包含基本指针(在介绍段落中),说明

安装并配置 JSSE 后,您需要确保客户端信任您将要使用的 LDAP 服务器。您必须在 JRE 的受信任证书数据库中安装服务器的证书(或其 CA 的证书)。以下是示例。

# cd JAVA_HOME/lib/security
# keytool -import -file server_cert.cer -keystore jssecacerts

有关如何使用安全工具的信息,请参阅 Java 教程的 Java 2 平台安全跟踪。有关 JSSE 的信息,请阅读 JSSE 参考指南

基本上:如果您没有使用 keytool,您可能没有在 Liferay VM 中设置对 LDAP 服务器证书的信任。请记住,您还没有完成,您仍然需要将使用 keytool 操作的密钥库包含到您的 VM 中。我希望日志文件中出现与信任相关的错误消息。由于您既没有提供日志文件,也没有提供您建立了何种信任的信息,请提供或让我知道您是否需要更多信息

原始答案(在澄清 LDAP 连接的含义之前):

检查 Liferay 的 portal.properties 默认配置,并在 $LIFERAY_HOME/portal-ext.properties 中覆盖它。在那里你会找到默认值

#
# Set this to true to ensure users login with https. If this is set to true
# and you want your HTTP session to contain your credentials after logging
# in, then the property "session.enable.phishing.protection" must be set to
# false or your credentials will only be available in the HTTPS session.
#
company.security.auth.requires.https=false

如果将其设置为 true,那么您可能就会拥有想要的一切。

当然,这假设你已经设置并正确运行了 https(例如,如果你访问https://本地主机/或者你的服务器所在的位置(或https://本地主机:8443如果您使用自定义端口 8443)。如何执行此操作取决于配置应用程序服务器。一旦 Liferay 在您通过 https 访问时正确响应,您就可以执行其余操作。

答案2

应用必须通过安全连接以明文形式传输密码以进行密码更改和身份验证,因为现代专业质量的目录服务器具有检查密码质量和密码历史记录的能力。预编码密码无法检查其质量或历史记录。因此,正确配置的目录服务器不会接受预编码密码。

相关内容