1

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

我刚刚找到了许多有关如何连接到安全 ldap 服务器的信息,但找不到如何设置安全 ldap 服务器。任何人都可以提供一些建议吗?

4

2 回答 2

1

LDAPS 连接如何工作

LDAPS 是一个非官方的协议。LDAP 之于 HTTPS 之于 HTTP,即在与端口 636(默认情况下)的安全 SSL(“安全套接字层”)连接上运行的完全相同的协议(但在本例中为 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 选项,并将验证选项设置为“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。

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

于 2012-09-05T04:18:26.697 回答
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

于 2012-09-05T11:16:20.857 回答