Как проверить учетные данные Active Directory через LDAP + SSL?

Я пытаюсь использовать пространство имен .NET 3.5 System.DirectoryServices.AccountManagementдля проверки учетных данных пользователя на нашем сервере Active Directory LDAP через SSL-шифрованное соединение LDAP. ]. Вот пример кода:

using (var pc = new PrincipalContext(ContextType.Domain, "sd.example.com:389", "DC=sd,DC=example,DC=com", ContextOptions.Negotiate))
{
    return pc.ValidateCredentials(_username, _password);
}

Этот код отлично работает через незащищенный LDAP (порт 389), однако я бы не хотел передавать комбинацию «пользователь/пароль» в открытом виде. Но когда я переключаюсь на LDAP + SSL (порт 636), я получаю следующее исключение:

System.DirectoryServices.Protocols.DirectoryOperationException: The server cannot handle directory requests.
  at System.DirectoryServices.Protocols.ErrorChecking.CheckAndSetLdapError(Int32 error)
  at System.DirectoryServices.Protocols.LdapSessionOptions.FastConcurrentBind()
  at System.DirectoryServices.AccountManagement.CredentialValidator.BindLdap(NetworkCredential creds, ContextOptions contextOptions)
  at System.DirectoryServices.AccountManagement.CredentialValidator.Validate(String userName, String password)
  at System.DirectoryServices.AccountManagement.PrincipalContext.ValidateCredentials(String userName, String password)
  at (my code)

Порт 636 работает для других действий, таких как поиск информации без пароля для этой записи LDAP/AD...

UserPrincipal.FindByIdentity(pc, IdentityType.SamAccountName, _username)

. ... так что я знаю, что это не настройка SSL моего сервера LDAP, поскольку он работает через SSL для других поисков.

Кто-нибудь получил вызов ValidateCredentials(...)для работы через SSL? Можете ли вы объяснить, как? Или есть другой/лучший способ надежной проверки учетных данных AD/LDAP?

15
задан Nate Sauber 1 June 2012 в 13:04
поделиться