LdapConnection是否可以安全地在Active Directory中验证用户?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LdapConnection是否可以安全地在Active Directory中验证用户?相关的知识,希望对你有一定的参考价值。

我已经构建了这个函数来验证是否在ActiveDirectory中启用了用户。

LdapConnection传输的数据是加密的吗?

这是使用userpassword传输信息的安全解决方案吗?

try
{
    LdapConnection connection = new LdapConnection(server);

    NetworkCredential credential = new NetworkCredential(user, password);
    connection.Credential = credential;

    connection.Bind();
}
catch (LdapException lexc)
{
   return lexc.Message;
}
catch (Exception exc)
{
   return exc.Message;
}
答案

不是默认情况下,不是。

Active Directory可在多个端口上运行,这些端口执行相关功能:

  1. 389:LDAP(仅限单个域) - 这是默认值
  2. 636:LDAP over SSL
  3. 3268:全局目录(您的AD森林)
  4. 3269:SSL上的全局目录

其他信息:https://msdn.microsoft.com/en-us/library/cc875824.aspx

因此,要使其使用加密连接,您需要告诉它使用端口636或3269,然后告诉它使用SSL,如下所示:

LdapConnection connection = new LdapConnection($"{server}:636");
connection.SessionOptions.SecureSocketLayer=true;

警告:根据我的经验,您可能会在进行此连接时遇到问题,因为默认情况下,域控制器使用自签名证书进行加密,而客户端计算机可能不信任该证书。如果遇到该问题,可以在计算机上安装该证书以使其受信任。

但请记住,证书有两个目的:

  1. 加密传输中的数据,和
  2. 确保您正在与之通话的服务器实际上是您要与之通话的服务器

1将始终与任何证书(甚至自签名)一起发生。 #2是如果证书由不受信任的来源发出,连接失败的原因。

如果您确信您不需要证书用于#2,那么您可以告诉它忽略与不受信任的证书相关的错误,如下所示:

connection.SessionOptions.VerifyServerCertificate =
            new VerifyServerCertificateCallback((con, cer) => true);

以上是关于LdapConnection是否可以安全地在Active Directory中验证用户?的主要内容,如果未能解决你的问题,请参考以下文章

LdapConnection 与 PrincipalContext

在java Spring Boot中,如何在集成测试中将内存中的LDAPConnection对象传递给ldapService?

是否可以*安全地*从函数中返回 TCHAR*?

GSubprocess 可以安全地在线程中使用吗?

安全地在前后端之间传输数据 - 「3」真的安全吗?

如何安全地在两个进程之间交换号码