c# - 使用 "DirectoryEntry"API 从远程计算机通过 ssl 连接到 LDAP

标签 c# ssl openldap directoryentry

我需要从远程机器通过 SSL 连接到 LDAP;对此有很多讨论,但其中发布的解决方案只能在同一台 Windows Server 域机器上工作;相同的代码无法从远程计算机成功连接;

我试过的代码:

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 域机器上获得结果;但是当我从远程计算机尝试相同的代码时,出现异常“服务器无法运行”

我发现这是由于证书验证失败,即 Windows Server 的证书未在远程机器上验证;但我不知道如何覆盖“DirectoryEntry 对象”的证书验证;

  • post有证书问题的解决方案;但它用于“LdapConnection”

  • 但我需要DirectoryEntry API 的解决方案;

仅供引用;这post对 Java 提出了同样的问题,但没有答案;我的要求是C#

最佳答案

很遗憾,DirectoryEntry 没有可用的证书覆盖。

您必须使用 System.DirectoryServices.Protocols 中的较低级别的 LdapConnectionLdapDirectoryIdentifier 类命名空间。

转换您的代码应该不会太困难,这样做,您将能够处理本地和远程目录资源。我不久前遇到了同样的问题,我写了一篇关于为什么会这样以及如何解决它的广泛帖子 - 检查一下:

Set callback for System.DirectoryServices.DirectoryEntry to handle self-signed SSL certificate?

关于c# - 使用 "DirectoryEntry"API 从远程计算机通过 ssl 连接到 LDAP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31184965/

相关文章:

c# - (NetNative)NetworkInterface.GetNetworkInterfaces() 中的 NotImplementedException Win IoT Core 14393

java - 完全禁用 java net ssl 调试日志记录

sql-server - SQL Server SSL + TDE 与始终加密

python - Django 应用程序 - 将用户名和密码存储在 mysql 数据库或 openldap 中?

openldap - 登录 ldap 根 DN 的问题

c# - 使用运行时多态

c# - 泛型 C# 中的无界类型参数

c# - 如何在 C# 的 JsonNet 中 DeserializeObject 时设置类属性

ssl - `openssl genrsa` 和 `openssl genpkey -algorithm rsa` 之间的区别?

php - 如何使用 ZF2 在 ldap Active Directory(AD) 中添加属性成员/memberOf