【问题标题】:Is Password transmitted securely using DirectoryEntry密码是否使用 DirectoryEntry 安全传输
【发布时间】:2014-08-12 11:15:56
【问题描述】:

我正在审查通过创建DirectoryEntry 对象来针对 LDAP 服务器验证用户凭据的代码,如下所示

DirectoryEntry entry = new DirectoryEntry(_path, domainAndUsername, pwd);

try
{
    object obj = entry.NativeObject;
}
catch (Exception ex)
{
throw new Exception("Error authenticating user. " + ex.Message);
}

如果未引发异常,则代码假定用户凭据正常..

代码运行良好,但我的问题与它的安全性有关。使用了 SSL,所以客户端和 web 服务器之间的通信是安全的,但是 webserver 和 ldap 服务器之间的通信是否存在漏洞?

DirectoryEntry 构造函数还有另一个重载参数,称为AuthenticationType。因为在上面的代码中没有指定参数,所以它使用AuthenticationType = None,这相当于基本身份验证。

使用AuthenticationType = Secure 或AuthenticationType = SecureSocketsLayer 或AuthenticationType = Encryption 或者它们的按位组合会更好吗?

迈克尔

【问题讨论】:

    标签: .net authentication active-directory ldap directoryentry


    【解决方案1】:

    默认情况下,当构造函数中没有提供 AuthenticationType 时使用 AuthenticationType.Secure。此选项已加密密码,因为它使用 NTLM/Kerberos 进行身份验证。

    您还可以指定 Sealing 标志(与 Secure 一起)来加密所有流量(不仅仅是身份验证)。这需要 Kerberos。

    您要连接到 AD 的 LDAP 服务器是? 我验证了上述适用于 AD。 (流量被加密,如wireshark所示)

    【讨论】:

    • 我尝试设置 Secure,Sealing,Encryption 来绑定一个安全的 DirectoryEntry;但我遇到异常“服务器不愿意处理请求。”;我不能同时使用所有 3 种类型吗?
    • 从未尝试将所有 3 个放在一起。但是仅通过 Secure+Sealing,流量已经被加密并验证了完整性(通过加密校验和)。添加加密标志你想实际实现什么?
    • 通过设置2个标志,如果它已经加密,那么对我来说没问题;
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-10
    • 2011-02-02
    • 2013-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多