连接到端口 636 时出现 LDAP 连接错误(“服务器无法运行。”)

Ari*_*Das 1 ldap active-directory ldapconnection

我正在尝试使用端口 636 连接到 LDAP,但出现错误“服务器无法运行”,但如果我尝试连接到端口 389,则它可以正常连接并获取数据

这是我正在使用的代码

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

有了这个,如果我尝试连接,我会收到错误“服务器无法运行”

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

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

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

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

然后它正常连接并获取数据。

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

Gab*_*uci 5

LDAP over SSL 需要做三件事才能工作:

  1. 您需要网络连接(没有防火墙)。要对此进行测试,您可以使用 PowerShell 的Test-NetConnection:
Test-NetConnection ldap.domain.com -Port 636
Run Code Online (Sandbox Code Playgroud)
  1. 您需要信任该证书。如果它使用自签名证书,那么它可能不受您下载它的计算机的信任。有一些PowerShell代码在这里,可以下载一个证书,这样就可以检查它。我修改了它以在此处使用(只需将其更改$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"
Run Code Online (Sandbox Code Playgroud)

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

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