0

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

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

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

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

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

谢谢

4

2 回答 2

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事件查看器(在客户端)并且有关于证书的错误。当我更改为与证书匹配的服务器名称时,它起作用了。

于 2013-09-04T23:37:58.603 回答
0

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

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

于 2012-10-13T11:19:12.693 回答