首页 > 解决方案 > 通过安全 LDAP 以编程方式创建 AD 帐户

问题描述

目前,我正在使用 PrincipalContext 通过 LDAP 连接通过 C# 成功创建 AD 帐户。我创建了一个新的 UserPrincipal,根据需要应用各种属性并调用 save()

基本上是这样的

using(var pc = new PrincipalContext(ContextType.Domain))
{
  using(var up = new UserPrincipal(pc))
  {
    up.SamAccountName = "whatever";
    up.EmailAddress = "test@example.com";
    up.SetPassword(password);
    up.Enabled = true;
    up.Save();
  }
}

一切正常,但现在我们需要通过安全的 LDAP 连接做同样的事情,我正在努力在网上找到任何关于如何做到这一点的细节的信息。这让我觉得可能与我目前的做法没有什么不同,相反,我需要做的只是确保服务器支持 LDAPS 并配置为使用它。

也许 SO 是错误的论坛,如果是这样,我很高兴将问题转移到不同的论坛。

标签: c#active-directoryldap

解决方案


LDAP 的默认 TCP 端口是 389。如果您不另行说明,则使用该端口。要使用 LDAPS,您必须指定 LDAPS 端口 636。例如:

using(var pc = new PrincipalContext(ContextType.Domain, "example.com:636"))

example.com你的域名在哪里。

但是,使用 LDAPS 要求您的计算机信任服务器使用的 SSL 证书。有时会使用自签名证书,这会导致失败。PrincipalContext不报告证书错误。它报告它好像无法联系服务器。因此,如果您在那里遇到问题,可以使用此 PowerShell 脚本下载证书并进行检查:

$webRequest = [Net.WebRequest]::Create("https://example.com:636")
try { $webRequest.GetResponse() } catch {}
$cert = $webRequest.ServicePoint.Certificate
$bytes = $cert.Export([Security.Cryptography.X509Certificates.X509ContentType]::Cert)
set-content -value $bytes -encoding byte -path "certificate.cer"

将第一行更改为您的域名。如果可行,将有一个名为的文件certificate.cer,您可以双击并检查它。如果您的计算机不信任它,您将看到这样的消息。如果这是一个问题,您可能只需要在您的计算机上安装根证书作为“受信任的根证书”。


推荐阅读