Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 尝试使用DirectoryEntry连接到AD时,参数不正确_.net_Active Directory_Ldap_Directoryentry - Fatal编程技术网

.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作为端口。然后单击“查询服务器”。有两件事需要寻找:

  • 主题名称
  • 证书是否可信
  • 您必须使用证书上的“使用者名称”才能连接到AD。例如:

    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的名称而不是域名?