使用 "DirectoryEntry" API 从远程计算机通过 ssl 连接到 LDAP
Connect to LDAP over ssl from remote machine using "DirectoryEntry" API
我需要通过 SSL 从 远程计算机 连接到 LDAP;对此有很多讨论,但其中发布的解决方案只能在同一 Windows 服务器域机器上工作;相同的代码无法从远程计算机成功连接;
我试过的代码:
DirectoryEntry entry = new DirectoryEntry("LDAP://fqdn:636/DC=aa,DC=bb", "username", "password");
DirectorySearcher searcher = new DirectorySearcher();
searcher.SearchRoot = entry;
searcher.SearchScope = SearchScope.Subtree;
searcher.Filter = "(&(objectCategory=person)(objectClass=user))";
SearchResultCollection results = searcher.FindAll();
再说一遍,我可以从同一个 WindowsServer 域机器上得到结果;但是当我从远程机器尝试相同的代码时出现异常 "Server is not operational";
我发现这是由于证书验证失败,即 Windows 服务器的证书未在远程机器上验证;但我不知道如何覆盖 'DirectoryEntry object' 的证书验证;
这个post有证书问题的解决方案;但它是 'LdapConnection'
但我需要 DirectoryEntry API;
的解决方案
仅供参考; post 提出了与 Java 相同的问题,但没有答案;我的要求是 C#
遗憾的是,没有可用于 DirectoryEntry
的证书覆盖。
您必须使用 System.DirectoryServices.Protocols 命名空间中的较低级别 LdapConnection
和 LdapDirectoryIdentifier
类。
转换您的代码应该不会太困难,这样做,您将能够处理本地和远程目录资源。我 运行 不久前遇到了同样的问题,并且我写了一篇详尽的 post 来解释为什么会这样,以及如何解决它 - 检查一下:
Set callback for System.DirectoryServices.DirectoryEntry to handle self-signed SSL certificate?
我需要通过 SSL 从 远程计算机 连接到 LDAP;对此有很多讨论,但其中发布的解决方案只能在同一 Windows 服务器域机器上工作;相同的代码无法从远程计算机成功连接;
我试过的代码:
DirectoryEntry entry = new DirectoryEntry("LDAP://fqdn:636/DC=aa,DC=bb", "username", "password");
DirectorySearcher searcher = new DirectorySearcher();
searcher.SearchRoot = entry;
searcher.SearchScope = SearchScope.Subtree;
searcher.Filter = "(&(objectCategory=person)(objectClass=user))";
SearchResultCollection results = searcher.FindAll();
再说一遍,我可以从同一个 WindowsServer 域机器上得到结果;但是当我从远程机器尝试相同的代码时出现异常 "Server is not operational";
我发现这是由于证书验证失败,即 Windows 服务器的证书未在远程机器上验证;但我不知道如何覆盖 'DirectoryEntry object' 的证书验证;
这个post有证书问题的解决方案;但它是 'LdapConnection'
但我需要 DirectoryEntry API;
的解决方案
仅供参考; post 提出了与 Java 相同的问题,但没有答案;我的要求是 C#
遗憾的是,没有可用于 DirectoryEntry
的证书覆盖。
您必须使用 System.DirectoryServices.Protocols 命名空间中的较低级别 LdapConnection
和 LdapDirectoryIdentifier
类。
转换您的代码应该不会太困难,这样做,您将能够处理本地和远程目录资源。我 运行 不久前遇到了同样的问题,并且我写了一篇详尽的 post 来解释为什么会这样,以及如何解决它 - 检查一下:
Set callback for System.DirectoryServices.DirectoryEntry to handle self-signed SSL certificate?