在Perl上通过安全连接设置LDAP服务器的任何方法?

时间:2012-09-05 03:18:31

标签: perl ldap

目前我使用Net :: LDAP :: Server来设置我的服务器,但它不够安全。 是否有任何模块或方法可以通过TLS或其他安全连接设置LDAP服务器?

我刚刚找到了很多关于如何连接到安全ldap服务器的信息,但是无法找到如何设置安全的ldap服务器。 任何人都可以给出一些建议吗?

2 个答案:

答案 0 :(得分:1)

LDAPS连接如何工作

LDAPS是一种非官方协议。它是LDAP的HTTP是什么,即通过安全的SSL(“安全套接字层”)连接到端口636(默认情况下)运行的完全相同的协议(但在这种情况下是LDAPv2或LDAPv3)。

并非所有服务器都配置为侦听LDAPS连接,但如果这样,它通常位于与普通纯文本LDAP端口不同的端口上。

使用LDAPS可以潜在地解决上述漏洞,但是您应该知道,简单地“使用”SSL并不是一个自动使您的系统“安全”的神奇子弹。

首先,LDAPS可以解决验证您是否连接到正确服务器的问题。当客户端和服务器连接时,它们执行特殊的SSL“握手”,其中一部分涉及服务器和客户端交换加密密钥,这些密钥使用X.509证书进行描述。如果客户端希望确认它已连接到正确的服务器,则需要做的就是验证在握手中发送的服务器证书。这有两种方式:

检查证书是否由您信任的人签名(信任),并且证书尚未被撤销。例如,服务器的证书可能已由Verisign(www.verisign.com)签署,您决定要信任Verisign签署合法证书。 检查服务器证书的DN中最不重要的cn RDN是否是创建LDAPS对象时连接到的主机名的完全限定主机名。例如,如果服务器是,则要检查的RDN是cn = ldap.example.com。 您可以在创建Net :: LDAPS对象时使用cafile和capath选项,并将verify选项设置为'require'来执行此操作。

为防止黑客“嗅探”您的连接上的密码和其他信息,您还必须确保SSL连接使用的加密算法足够好。这也是由SSL握手决定的 - 如果客户端和服务器无法就可接受的算法达成一致,则不会建立连接。

默认情况下,Net :: LDAPS将使用OpenSSL副本中内置的所有算法,但被认为使用“低”强度加密的算法和使用导出强度加密的算法除外。使用“ciphers”选项创建Net :: LDAPS对象时,可以覆盖此项。

一旦建立了安全连接,您还应该检查实际使用的加密算法是否是您认为可接受的算法。在现场观察到破坏的服务器“故障转移”并给你一个未加密的连接,所以你应该检查它。

LDAP和TLS如何工作

SSL是许多网络安全问题的良好解决方案,但它不是标准。 IETF纠正了SSL机制中的一些缺陷,并发布了一个名为RFC 2246的标准,该标准描述了TLS(“传输层安全性”),它只是一个清理和标准化的SSL版本。

您只能将TLS与LDAPv3服务器一起使用。这是因为LDAP和TLS的标准(RFC 2830)要求正常的LDAP连接(即,在端口389上)可以根据需要从纯文本切换到TLS连接。切换机制使用特殊的扩展LDAP操作,由于这些操作在LDAPv2中不合法,因此您只能在LDAPv3连接上切换到TLS。

因此,对LDAPv3使用TLS的方式是使用Net :: LDAP :: new()创建正常的LDAPv3连接,然后使用Net :: LDAP :: start_tls()执行切换。 start_tls()方法与Net :: LDAPS :: new()的参数几乎相同,因此请查看上面的详细信息。

答案 1 :(得分:1)

好吧,也许LDAPS不是RFC,但是说它不是标准或安全肯定是一种延伸。

所有LDAP服务器供应商都支持LDAPS。 LDAPS至少与HTTPS一样安全。 与所有SSL(或TLS)一样,安全弱点是证书的处理方式。

当然,LDAP服务器供应商和客户端比TLS更支持LDAPS。 Active Directory作为一个示例,不支持TLS。查询supportedExtention 1.3.6.1.4.1.1466.20037的rootDSE将(应该)显示任何特定LDAP服务器是否支持TLS。

我们有一些例子: http://ldapwiki.willeke.com/wiki/Perl%20LDAP%20Samples