AD LDS服务帐户作为本地pipe理员以允许SSL连接?

我正在Windows 2012虚拟机上安装Active Directory轻型目录服务(AD LDS,又名ADAM)。 最后得到目录和同步处​​理的configuration后,我现在遇到了一个有趣的问题。 我已经在线研究了几个小时,我可以使用一些专家的build议。

当我使用“networking服务”帐户作为我的LDS实例的服务帐户时,我无法在SSL端口(我默认保留为636)上启动连接。 我们可以连接到389的非SSL端口。域服务帐户“ADLDSSRVC”也是如此。

当我使用我的个人域凭据作为服务帐户时,我们可以在非SSL端口上使用非SSL连接,在SSL端口上使用SSL连接。 在SSL连接上,我们可以通过代理绑定redirect使用AD DS帐户绑定到LDS。 我的域帐户在主机上具有本地pipe理员权限。

我需要使域服务帐户,“ADLDSSRVC”本地pipe理员? 如果我不能只给予我需要的权限,我的老板只想作为最后的手段。 更具体地说,我想知道,如果可能的话,服务帐户需要什么权限,以便我可以将SSL ldap连接到我的AD LDS实例。 Technet文章指出,ADLDS服务帐户需要创build,读取和修改对%ProgramFiles%\ Microsoft ADAM \ instancename \ data的访问,但是对于打开端口636来说,这似乎没有什么区别。

Blog.uvm.edu告诉您执行以下操作:打开“AD用户和计算机”工具,find安装实例的计算机对象。 给LDS服务帐户“创build所有子对象”到计算机对象。 我不是域pipe理员,所以我不能这样做。 这基本上是相同的,使服务帐户本地pipe理员?

在我看来,AD LDS服务无法访问设置LDAPS所需的证书,当您将AD LDS设置为使用无权使用本地计算机\个人证书存储的服务帐户时。

从Microsoft KB :

对于AD LDS,将证书放入与AD LDS实例对应的服务(而不是NTDS服务)的个人证书存储中。

所以使用MMC并添加证书pipe理单元。 select“服务帐户”作为证书存储区以查看并select安装在该计算机上的AD LDS服务。 您的SSL证书需要安装在那里。

基于Ryan Ries的回答,下面是我如何解决这个问题,而不是使“域\ adldssrvc”pipe理员帐户:

为本地计算机证书授予服务帐户权限

运行mmc并添加本地计算机的“证书”pipe理单元,打开证书存储区。

证书商店

右键单击Certificates (Local Computer)\Personal\Certificates\然后selectAll Tasks\Manage Private Keys

证书的上下文菜单

这拉起了一个正常的权限屏幕。 只需添加适当的用户并完全控制这些私钥。

私钥的权限

请记住在做这个改变后重置LDS服务! (SERVICES.MSC)

请参考这篇文章

https://stackoverflow.com/questions/36402069/solved-using-ad-lds-over-ssl-user-password-changing-with-principalcontext

我已经完成了先configuration企业CA,然后在此页面上使用指导

http://social.technet.microsoft.com/wiki/contents/articles/2980.ldap-over-ssl-ldaps-certificate.aspx#Reasons

按以下顺序

  1. 发布支持服务器身份validation的证书

    在这一步的第5点

    “5.在”复制模板“对话框中,保留选定的默认选定Windows Server 2003 Enterprise,然后单击”确定“。

    仔细select你的相关操作系统,教程说默认它,但我使用的是Windows Server 2012 R2,所以我select了一个我正在使用的。 select你的相关操作系统

  2. 导出LDAPS证书并导入以用于AD DS

  3. validationLDAPS连接

为什么我需要通过SSL进行ADLDS连接?

因为我希望用户更改他/她的ADLDS密码,所以使用PrincipalContext的非SSL连接不允许我这样做。 所以现在我正在使用下面的代码,在全能的安拉的帮助和恩典之下,它像魅力一样工作。

 PrincipalContext pc = new PrincipalContext( ContextType.ApplicationDirectory, "YourServerUrl:YourSSLPort", "CN=YourPartitionName,DC=partition,DC=com", ContextOptions.SimpleBind | ContextOptions.SecureSocketLayer, "FullDistinguisedNameOfUser", "PasswordOfUser"); bool IsUserValidated = pc.ValidateCredentials( "FullDistinguisedNameOfUser", "PasswordOfUser", ContextOptions.SimpleBind | ContextOptions.SecureSocketLayer); if (IsUserValidated) { UserPrincipal up = UserPrincipal.FindByIdentity( "FullDistinguisedNameOfUser", "PasswordOfUser"); up.ChangePassword("UserOldPassword", "UserNewPassword"); }