目录条目 |使用加密或 SSL 时出错

Directory entry | Error when using Encryption or SSL

我正在尝试使用以下代码加密我的 Active Directory 访问权限:

// Already tried different paths (LDAP://domain.com, LDAPS://domain.com etc.)
string path = "LDAP://domain.com:636";
var ldapConnection = new DirectoryEntry(path, "loginName", "password");

ldapConnection.AuthenticationType = AuthenticationTypes.Secure; // Works perfectly
ldapConnection.AuthenticationType = AuthenticationTypes.Encryption; // Doesn't work
ldapConnection.AuthenticationType = AuthenticationTypes.SecureSocketsLayer; // Doesn't work

两种无效的身份验证类型抛出相同的异常:

System.DirectoryServices.DirectoryServicesCOMException (0x8007052E): The username or password is incorrect.

首先我发现我的 AD DS 上缺少证书服务器并安装了它。但是安装后我得到了同样的错误。我可能需要 install/configure 更多东西。如果是这样,请分享需要做的资源。

我的问题: 我是否需要任何先决条件(e.x。在 AD DS 上)才能使用 AuthenticationTypes.EncryptionAuthenticationTypes.SecureSocketsLayer?还是我需要不同的用户才能使用此身份验证类型?
非常感谢任何帮助。

试试这个:

ldapConnection.AuthenticationType = AuthenticationTypes.Secure | AuthenticationTypes.SecureSocketsLayer;

Secure 定义使用的身份验证类型,而 SecureSocketsLayer 定义连接类型。它们有不同的用途,因此可以一起使用。

但实际上,您不需要指定任何内容。默认值为 Secure,如果您指定端口 636,它将使用 SSL,因为这是服务器接受该端口连接的唯一方式。这就是当您仅指定 Secure.

时它起作用的原因

如果您单独指定 SecureSocketsLayer,这也是它失败的原因。一旦您指定了任何内容,默认值 (Secure) 将被丢弃,并且仅使用您指定的内容。如果没有 Secure,它将尝试基本身份验证(又名“简单绑定”),这可能在您的域上被禁用。

更多阅读 AuthenticationTypes Enum 的文档。