.net 尝试使用DirectoryEntry连接到AD时,参数不正确
我正在尝试使用.net 尝试使用DirectoryEntry连接到AD时,参数不正确,.net,active-directory,ldap,directoryentry,.net,Active Directory,Ldap,Directoryentry,我正在尝试使用DirectoryEntry.NET类连接到广告。但是我犯了个错误 参数不正确 尝试访问时 DirectoryEntry.NativeObject 以强制进行身份验证 有人能提出这个错误的原因是什么,或者如何确定这里的错误吗 代码段: Dim deRoot As New System.DirectoryServices.DirectoryEntry deRoot = New DirectoryEntry("LDAP://SERVERNAME:PORT/DOMAINSTRING"
DirectoryEntry
.NET类连接到广告。但是我犯了个错误
参数不正确
尝试访问时
DirectoryEntry.NativeObject
以强制进行身份验证
有人能提出这个错误的原因是什么,或者如何确定这里的错误吗
代码段:
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
问题发生在执行第三行时
注意:这同样适用于许多LDAP服务器。需要了解此服务器中的区别,或者确定需要传递什么才能使其正常工作
由于某些原因,它不喜欢您的证书 第一步是检查证书。您可以使用DigiCert中的实用程序: 运行它并单击“工具”选项卡,然后单击“检查安装”。对于“服务器地址”,请输入您的域名,然后输入636作为端口。然后单击“查询服务器”。有两件事需要寻找:
deRoot = New DirectoryEntry("LDAP://{SubjectName}:PORT/DOMAINSTRING", "USER_NAME", "PASSWORD", AuthenticationTypes.SecureSocketsLayer)
该“Subject Name”可能是您的一个域控制器的名称,如server1.domain.com。如果你能用这个,太好了。如果不能按原样使用,则可以修改主机文件,以便“主题名称”中显示的任何域名都指向IP。这并不理想,但可能会奏效
如果负载平衡器后面的每台服务器都提供不同的证书,那么hosts文件技巧将不起作用。如果真是这样,那你就倒霉了
此外,证书必须是可信的。例如,它可能是自签名的。在这种情况下,您必须在发出呼叫的机器上安装证书
这方面的一个线索是,每次尝试时,您都会在“Schannel”的Windows系统事件日志中看到这样一个错误:
从远程服务器收到的证书是由
不受信任的证书颁发机构。因此,没有任何数据
可以验证证书中包含的内容。TLS连接
请求失败。所附数据包含服务器证书
此问题的解决方案取决于它实际上是自签名的,还是仅由您的计算机上不受信任的证书颁发机构签名的。如果结果是这样,我可以提供帮助。您是使用端口636还是3269作为端口?即使在使用它时,我发现指定
AuthenticationTypes.SecureSocketsLayer
也不是必需的。它解决了这个问题。请尝试删除它。请注意,newdirectoryEntry
实际上并没有建立连接。它会等到您实际对对象执行某些操作后,才会连接到DC。这就是为什么在第三行出现错误。它最终是导致问题的证书。我们得到了这个错误。从远程服务器收到的证书不包含预期的名称。因此,无法确定我们是否连接到正确的服务器。我们期望的服务器名是[servername]。SSL连接请求失败。附加的数据包含服务器证书,但是当我们添加一个主机条目时,它可以正常工作。但问题是,这是一个动态的IP,IP不断变化。当使用DirectoryEntry
class时,有没有办法绕过这个问题?我在某个地方读到LDAPConnection
class有能力绕过这个证书错误,但要实现这个in-out应用程序将非常困难。或者有没有办法在Web服务器中进行一些更改,以便主机条目始终指向更新的动态IP?我曾经使用域名进行连接,但证书具有域控制器的全名。在这些情况下,我使用域控制器名称进行连接。你也能这样做吗?证书是否使用DC的名称而不是域名?