请注意,这是关于Liferay和LDAP服务器之间的通信,而不是用户浏览器和Liferay之间的通信
我在这里问了这个问题,因为我在30分钟的时间里,在liferay论坛中得到了0个观点(除了我自己的观点),如果可能的话,我想今天解决这个问题。
我看过:
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
我做了一堆search,发现许多人build立了CAS并在他们的post中提到了LDAP。
问题是我没有(但?)有兴趣实施CAS。 我想为人们设置一个演示服务器,并允许他们用他们的LDAP / AD凭证login。 我select了绑定,因为我没有访问一个login,允许我(因此liferay)看到上述密码。
我知道这是疯狂的,但我也不希望他们的密码发送清楚。 🙂
liferay文档没有讨论如何确保liferay启动TLS。 我不是LDAP专家,所以也许这通常是由LDAP或AD服务器强制执行的,但即使在这种情况下,如果文档说了一些关于如何确保邪恶的员工或恶意networking入侵者可以不要只是听取生活射线login请求访问每个人的东西。
从我读过的内容来看,当前LDAP实现的正确之处在于客户端为敏感查询启动TLS通信
http://docs.oracle.com/javase/jndi/tutorial/ldap/ext/starttls.html
Liferay是这样做的吗? 我需要configuration任何额外的启用它吗?
事实上,当我谷歌的时候出现http://issues.liferay.com/browse/LEP-4225这个事实,甚至在Liferay中都引发了这个问题,但是我注意到这是针对“老的liferay”的。 ..)
基本上我要求一个真正知道的人来清理什么是不可用的,以及是否需要做任何事情来启用与LDAP / AD的安全通信。
请注意,我对客户端证书不感兴趣,或者目前不authentication客户端(liferay)到LDAP服务器。 只需将身份validation安全地委派给LDAP / AD。
编辑:我刚刚确认(与wireshark),在默认configuration“testing连接”发送我的密码在明文,所以这似乎是一个真正的问题
编辑2:也确认login尝试以明文forms发送密码。 encryption解决scheme显然是必要的。
在我看来误解了这个问题之后, 纠正了我的原始答案 – 在编辑之后,LDAP连接的意思就更清楚了。
不幸的是我现在不能给出一个好的答案,但希望有一些有用的指针:
当通过SSL使用LDAP连接时,您需要确保tomcat(连接的发起者)信任LDAP服务器提供的证书。 很有可能这个证书不是由一个已知和可信的机构发出的(例如,它可能是自签名的)。
请记住,SSL不仅仅意味着encryption,而且还相信另一端是它所声称的那样:如果任何中间人都可以让你连接到自己,encryption,那么依靠encryption将是愚蠢的。 所以你需要一些你连接到的身份certificate。
当你谷歌“LDAP SSL爪哇”,你会得到很多的点击给出了很好的例子,并解释如何configurationtomcat的虚拟机(及其密钥库)。 是的,这是您需要configuration信任的虚拟机。 http://docs.oracle.com/javase/jndi/tutorial/ldap/security/ssl.html包含基本指针(在介绍性段落中),陈述
一旦安装并configuration了JSSE,您需要确保客户端信任您要使用的LDAP服务器。 您必须将服务器的证书(或其CA证书)安装在JRE的可信证书数据库中。 这是一个例子。
# cd JAVA_HOME/lib/security # keytool -import -file server_cert.cer -keystore jssecacerts有关如何使用安全工具的信息,请参阅Java教程的Java 2平台安全性跟踪。 有关JSSE的信息,请阅读“JSSE参考指南”
基本上:如果您没有使用keytool,那么您的Liferay VM中可能没有build立对LDAP服务器证书的信任。 请记住,您尚未完成,您仍需要将使用keytool操作的密钥库包含到虚拟机中。 我希望日志文件中的信任相关的错误消息。 由于您既不提供日志文件,也不提供您build立的信任关系,请这样做或让我知道您是否需要进一步的信息
原始答案 (在澄清LDAP连接的意思之前):
检查Liferay的portal.properties默认configuration,并在$ LIFERAY_HOME / portal-ext.properties中覆盖它。 在那里你会find默认值
# # 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:// localhost /或者你的服务器在哪里(或者如果你使用自定义的端口8443),那么你的https已经设置和运行了( https:// localhost: 8443)。你如何做到这一点是configuration你的应用程序服务器的问题。一旦Liferay通过https访问它,你就可以强制执行。
应用程序必须通过安全的连接传输密码,以便更改密码和进行身份validation,因为现代专业的质量目录服务器具有检查密码质量和密码历史logging的function。 预编码密码无法检查质量或历史logging。 由于这个原因,正确configuration的目录服务器将不接受预编码的密码。