【发布时间】:2017-05-23 19:17:16
【问题描述】:
我正在尝试使用 DirectoryEntry .NET 类连接到 AD。但我收到一个错误
参数不正确
尝试访问时
DirectoryEntry.NativeObject
为了强制认证。
任何人都可以提出这个错误的原因,或者如何识别这里的问题吗?
代码sn-p:
Dim deRoot As New System.DirectoryServices.DirectoryEntry
deRoot = New DirectoryEntry("LDAP://SERVERNAME:PORT/DOMAINSTRING", "USER_NAME", "PASSWORD", AuthenticationTypes.SecureSocketsLayer)
Dim obj As Object = deRoot.NativeObject
执行第 3 行时会出现问题。
注意:这同样适用于许多 LDAP 服务器。需要知道这个服务器有什么不同或确定需要传递什么才能使这个工作。
问候
【问题讨论】:
-
你是用636端口还是3269端口?即使使用它,我发现指定
AuthenticationTypes.SecureSocketsLayer也不是必须的。它弄清楚了。尝试删除它。 -
请注意,
New DirectoryEntry实际上并没有建立连接。它会等到您实际对对象执行某些操作后,才会实际连接到 DC。这就是为什么你会在第 3 行得到错误。 -
它最终是导致问题的证书。我们得到这个错误。 从远程服务器收到的证书不包含预期的名称。因此无法确定我们是否连接到正确的服务器。我们期望的服务器名称是 [servername]。 SSL 连接请求失败。附加的数据包含服务器证书但是当我们添加一个主机条目时,这工作正常。但问题是它是一个动态 IP,而且 IP 不断变化。使用
DirectoryEntry类时有没有办法绕过这个? -
我在某处读到
LDAPConnection类具有绕过此证书错误的能力,但在应用程序中实现这一点非常困难。或者有没有办法在网络服务器中进行一些更改,以便主机条目始终指向更新的动态 IP? -
我遇到过使用域名连接的情况,但证书有域控制器的全名。在这些情况下,我使用域控制器名称进行连接。你能做同样的事情吗?证书使用的是DC的名称而不是域名吗?
标签: .net active-directory ldap directoryentry