1

我正在尝试使用端口 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);

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

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

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。

4

1 回答 1

5

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

  1. 您需要网络连接(没有防火墙)。要对此进行测试,您可以使用 PowerShell 的Test-NetConnection
Test-NetConnection ldap.domain.com -Port 636
  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"

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

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