C#:如何在启用SSL的情况下连接到Active Directory?
我正在从事的项目将与客户的Active Directory集成,以便对用户进行身份验证。我一直在尝试编写一些代码来检索用户密码,我知道Active Directory只会通过端口636上的SSL连接公开相关属性 以下代码在不使用SSL的情况下以编程方式连接,但我看不到密码属性:C#:如何在启用SSL的情况下连接到Active Directory?,c#,ssl,active-directory,C#,Ssl,Active Directory,我正在从事的项目将与客户的Active Directory集成,以便对用户进行身份验证。我一直在尝试编写一些代码来检索用户密码,我知道Active Directory只会通过端口636上的SSL连接公开相关属性 以下代码在不使用SSL的情况下以编程方式连接,但我看不到密码属性: static void Main(string[] args) { DirectoryEntry entry = new DirectoryEntry(@"LDAP://<IP>/CN=LDAP Te
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);
}
}
}
static void Main(字符串[]args)
{
DirectoryEntry=new DirectoryEntry(@“LDAP:///CN=LDAP测试,CN=Users,DC=customer,DC=com”);
entry.AuthenticationType=AuthenticationTypes.None;
entry.Username=“CN=LDAP测试,CN=Users,DC=customer,DC=com”;
entry.Password=“”;
if(条目!=null)
{
foreach(entry.Properties.PropertyNames中的对象propName)
{
Console.WriteLine((String)propName);
}
}
}
当我将代码更改为使用SSL时,我得到一个异常声明;未知错误(0x80005000)”
我在托管Active Directory的服务器上启用了SSL,在同一服务器上安装了Microsoft CA,并从CA获得了证书
我可以使用ApacheDirectoryStudio通过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);
}
}
}
static void Main(字符串[]args)
{
DirectoryEntry=新的DirectoryEntry(@“LDAPS://:636/CN=LDAP测试,CN=Users,DC=customer,DC=com”);
entry.AuthenticationType=AuthenticationTypes.SecureSocketsLayer;
entry.Username=“CN=LDAP测试,CN=Users,DC=customer,DC=com”;
entry.Password=“”;
if(条目!=null)
{
foreach(entry.Properties.PropertyNames中的对象propName)
{
Console.WriteLine((String)propName);
}
}
}
我不知道该怎么办,非常感谢您的帮助。尝试将服务器的证书和根证书添加到本地存储中。最简单的方法是使用IE连接到。然后单击所有证书屏幕并将其添加到您的应用商店中 我一直在尝试写一些代码 这将检索用户密码 这与SSL问题无关,但我认为从Active Directory检索用户密码是不可能的。它只存储一个散列,这就是为什么在查询用户属性时没有收到任何类型的“密码”属性 更新的答案 在阅读您的评论之后,您似乎正在查找包含安全哈希的unicodePwd属性。根据,写入该属性需要特殊的SSL连接,但您仍然无法读取它,因为它是一个只写属性 特别是MSDN: LDAP搜索从不返回unicodePwd属性 这里还有一个论坛帖子,我发现它似乎说了同样的话: 用户的密码存储在 中用户对象上的Active Directory unicodePwd属性。这 属性可以写在下面 限制条件,但它不能 由于安全原因无法读取。 ()
相关:ADAM常见问题解答在这里:这个问题的标题有误导性,应该是“如何从Active Directory检索用户密码?”它与“启用SSL连接到Active Directory”无关,而是我想要的哈希值。我承认我的帖子本可以更清楚地说明这一点。其目的是将从另一个系统接收的哈希与存储在Active Directory中的哈希进行比较或授权。