目前我正在使用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是错误的论坛,如果是这样的话,我很乐意将问题转移到另一个论坛
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
的文件,您可以双击并检查它。如果你的计算机不信任它,你会看到一条消息。如果这是一个问题,你可能只需要将根证书作为"受信任的根证书"安装在你的计算机上。