我有一些 C# 代码System.DirectoryServices.AccountManagement
用于允许用户更改其 Active Directory 用户帐户密码。它目前正在使用 LDAP (:389),出于安全目的,我想将其切换到 LDAPS (:636)。但是,当我切换到 LDAPS 时,返回给我的错误消息会发生变化并且变得不那么有用。
简而言之,这是问题:
如果我使用 LDAP (:389) 连接,我使用以下 ConextOptions
ContextOptions.Negotiate | ContextOptions.ServerBind | ContextOptions.Signing
如果我使用 LDAPS (:636) 连接,我使用以下 ContextOptions
ContextOptions.Negotiate | ContextOptions.ServerBind | ContextOptions.SecureSocketLayer
如果用户提供正确的当前密码和有效的新密码,则任一版本都可以更改密码。但是,例如,在用户输入了错误的当前密码的情况下,我收到的错误消息是不同的,并且在 LDAPS 的情况下不太有用:
LDAP(:389):
指定的网络密码不正确。(来自 HRESULT 的异常:0x80070056)
LDAPS(:636):
发生约束冲突。(来自 HRESULT 的异常:0x8007202F)
差异的关键似乎是ContextOptions.Signing
- 如果我没有指定 LDAP(:389) 连接,我会收到与 LDAPS(:636) 相同的错误消息。但是,如果我ContextOptions.Signing
为 LDAPS 指定 DC 拒绝响应。
ContextOptions.Signing
使用 LDAPS 时有什么方法可以使用吗?- 有没有其他方法可以在不使用的情况下获得更有意义的错误消息
ContextOptions.Signing
? ContextOptions.Sealing
说它使用 Kerberos 加密数据 - 我可以在 :389 上使用此选项来获得与使用 LDAPS 相同级别的安全性吗?文档的细节很少