连接到端口 636 时出现 LDAP 连接错误 ("The server is not operational.")

LDAP Connection error ("The server is not operational.") when connecting to port 636

我正在尝试使用端口 636 连接到 LDAP,但出现错误 "The server is not operational" 但是如果我尝试连接到端口 389,它会正常连接并获取数据

这是我正在使用的代码

DirectoryEntry entry = new DirectoryEntry("LDAP://ldap.domain.com:636/ou=**,ou=**,dc=**,dc=**", "uid=user,OU=**,OU=**,DC=**,DC=**", "password", AuthenticationTypes.None);

有了这个,如果我尝试连接,我会收到错误 "The server is not operational"

但是如果我把代码改成这个

DirectoryEntry entry = new DirectoryEntry("LDAP://ldap.domain.com:389/ou=**,ou=**,dc=**,dc=**", "uid=user,OU=**,OU=**,DC=**,DC=**", "password", AuthenticationTypes.None);

或者甚至删除端口(默认情况下我认为使用 389 端口)

DirectoryEntry entry = new DirectoryEntry("LDAP://ldap.domain.com/ou=**,ou=**,dc=**,dc=**", "uid=user,OU=**,OU=**,DC=**,DC=**", "password", AuthenticationTypes.None);

然后就可以正常连接并获取数据了

任何人都可以帮助我通过 636 端口连接 LDAP 因为在测试服务器环境中我需要通过 636 连接不能使用 389。

要使 LDAP over SSL 正常工作,需要发生三件事:

  1. 您需要网络连接(没有防火墙)。要对此进行测试,您可以使用 PowerShell 的 Test-NetConnection:
Test-NetConnection ldap.domain.com -Port 636
  1. 您需要信任该证书。如果它使用的是自签名证书,那么它可能不受您下载它的计算机的信任。有一些 PowerShell 代码 here 可以下载证书,以便您可以检查它。我修改了它以供在这里使用(只需将 $domain 更改为实际域):
$domain = "ldap.domain.com"
$webRequest = [Net.WebRequest]::Create("https://$($domain):636")
try { $webRequest.GetResponse() } catch {}
$cert = $webRequest.ServicePoint.Certificate
$bytes = $cert.Export([Security.Cryptography.X509Certificates.X509ContentType]::Cert)
set-content -value $bytes -encoding byte -path "~\Downloads$domain.cer"

这会将证书放入您的 "Downloads" 文件夹中。打开 .cer 文件,它会立即告诉您它是否在您的机器上受信任。如果没有,那么您将需要获取根证书并将其作为受信任的根证书安装在运行此代码的任何计算机上。

  1. 您用于连接到 AD 的完全限定域名必须与 SSL 证书完全匹配(或证书的 "Subject Alternative Names" 之一)。有时,证书将以域控制器的名称颁发(例如 dc1.domain.com),在这种情况下,您必须针对特定的 DC("LDAP://dc1.domain.com:636")而不仅仅是域的名称。