C#:如何在启用 SSL 的情况下连接到 Active Directory?
Posted
技术标签:
【中文标题】C#:如何在启用 SSL 的情况下连接到 Active Directory?【英文标题】:C#: How to connect to Active Directory with SSL enabled? 【发布时间】:2009-08-04 17:54:32 【问题描述】:我正在进行的项目将与客户的 Active Directory 集成,以便对用户进行身份验证。我一直在尝试编写一些代码来检索用户密码,并且我知道 Active Directory 只会通过端口 636 上的 SSL 连接公开相关属性。
以下代码在不使用 SSL 的情况下以编程方式连接,但我看不到密码属性:
static void Main(string[] args)
DirectoryEntry entry = new DirectoryEntry(@"LDAP://<IP>/CN=LDAP Test,CN=Users,DC=customer,DC=com");
entry.AuthenticationType = AuthenticationTypes.None;
entry.Username = "CN=LDAP Test,CN=Users,DC=customer,DC=com";
entry.Password = "<password>";
if (entry != null)
foreach (Object propName in entry.Properties.PropertyNames)
Console.WriteLine((String)propName);
当我将代码更改为使用 SSL 时,我收到一个异常声明:未知错误 (0x80005000)'。
我在托管 Active Directory 的服务器上启用了 SSL,在同一台服务器上安装了 Microsoft CA,并从 CA 获得了证书。
我可以使用 Apache Directory Studio 通过 SSL 连接到 Active Directory,但不显示密码属性。
以下代码显示了我一直在尝试使用 SSL 进行连接:
static void Main(string[] args)
DirectoryEntry entry = new DirectoryEntry(@"LDAPS://<IP>:636/CN=LDAP Test,CN=Users,DC=customer,DC=com");
entry.AuthenticationType = AuthenticationTypes.SecureSocketsLayer;
entry.Username = "CN=LDAP Test,CN=Users,DC=customer,DC=com";
entry.Password = "<password>";
if (entry != null)
foreach (Object propName in entry.Properties.PropertyNames)
Console.WriteLine((String)propName);
我不知道该怎么做,我们将不胜感激。
【问题讨论】:
相关:***.com/questions/287100/… ADAM 常见问题解答在这里:microsoft.com/windowsserver2003/adam/ADAMfaq.mspx#EOD 这个问题的标题具有误导性,应该类似于“如何从 Active Directory 中检索用户密码?”它与“启用 SSL 连接到 Active Directory?”无关? 【参考方案1】:我一直在尝试编写一些代码 这将检索用户密码...
这与您的 SSL 问题无关,但我认为从 Active Directory 检索用户密码是不可能的。它只存储一个哈希值,这就是为什么您在查询用户属性时没有收到任何类型的“密码”属性。
更新答案
阅读您的评论后,您似乎正在寻找包含安全哈希的 unicodePwd 属性。根据MSDN information,写入该属性需要特殊的 SSL 连接,但您仍然无法读取它,因为它是只写属性。
具体来自 MSDN:
LDAP 搜索永远不会返回 unicodePwd 属性。
这也是我发现的一个论坛帖子,似乎在说同样的事情:
用户的密码存储在 Active Directory 中的用户对象 unicodePwd 属性。这 属性可以写在 限制条件,但不能 出于安全原因阅读。 (Source)
【讨论】:
这是我所追求的哈希值。我承认我的帖子本来可以更清楚地说明这一点。目的是比较或授权从另一个系统接收到的哈希与存储在 Active Directory 中的哈希。【参考方案2】:尝试将服务器的证书和根证书添加到本地存储。最简单的方法是使用 IE 连接到https://your.domain.contoller:636。然后点击所有证书屏幕并将它们添加到您的商店。
【讨论】:
以上是关于C#:如何在启用 SSL 的情况下连接到 Active Directory?的主要内容,如果未能解决你的问题,请参考以下文章
如何在启用 tls 的情况下连接到 nomad/consul UI?
C# - 在没有许可证的情况下连接到 DB2 z/os 大型机
如何在不使用 *** 映像的情况下连接到 docker 中的 ***?