【问题标题】:Authentication using Secure LDAP (ie LDAPS) in C#在 C# 中使用安全 LDAP(即 LDAPS)进行身份验证
【发布时间】:2013-09-13 11:23:20
【问题描述】:

我能够使用以下代码针对 Active Directory 验证用户并且它工作正常:

bool authentic = false;
PrincipalContext pc = new PrincipalContext(ContextType.Domain, domain);
// validate the credentials against domain
authentic = pc.ValidateCredentials(userName, password);

但是,用户名和密码以纯文本形式发送到网络。我被告知要使用 ContextOptions.SecureSocketLayerValidateCredentials 但它会引发异常

服务器无法处理目录请求。

任何人都可以帮我解决这个问题,以便我可以安全地使用 LDAP 服务器进行身份验证。

谢谢

【问题讨论】:

    标签: c# ldap


    【解决方案1】:

    我也需要知道这一点。我认为(但尚未测试) ContextOptions.Negotiate 将使用 SSL。您可能需要将端口强制为 636,例如

    PrincipalContext pc = new PrincipalContext(ContextType.Domain, domain + ":636", ContextOptions.Negotiate);
    

    PrincipalContext pc = new PrincipalContext(ContextType.Domain, domain + ":636", ContextOptions.Negotiate | ContextOptions.Signing | ContextOptions.Sealing);
    

    编辑 我现在有这个工作(如上所述)。我遇到的唯一问题是我试图连接 IP 地址。这不起作用,但直到我查看 Windows Event Viewer (在客户端)并且证书出现错误时我才知道为什么。当我更改为与证书匹配的服务器名称时,它起作用了。

    【讨论】:

      【解决方案2】:

      LDAP 客户端应始终使用 SSL 或通过 StartTLS 扩展操作提升为安全连接的非安全连接 - 现代、专业品质的服务器能够拒绝非安全连接上的操作,但旧版服务器通常缺乏此功能特征。 LDAP 被编码,而不是加密,用于传输。

      与目录服务器管理员核实以确保服务器支持 SSL(或 StartTLS),检查所涉及的证书是否有效。考虑使用openssl s_client -connect host:port 来验证连接。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-05-04
        • 1970-01-01
        • 2014-02-28
        • 2011-08-09
        • 2017-07-07
        • 1970-01-01
        • 2013-03-15
        • 1970-01-01
        相关资源
        最近更新 更多