W jaki sposób mogę sprawdzić wiarygodność danych usługi Active Directory w LDAP + SSL?

Próbuję użyć .NET 3.5System.DirectoryServices.AccountManagement przestrzeń nazw do sprawdzania poświadczeń użytkownika na naszym serwerze LDAP Active Directoryprzez szyfrowane połączenie SSL LDAP. Oto przykładowy kod:

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

Ten kod działa poprawnie w przypadku niezabezpieczonego LDAP (port 389), jednak wolałbym nie przekazywać kombinacji użytkownik / przepustka w postaci czystego tekstu. Ale po zmianie na LDAP + SSL (port 636) otrzymuję następujący wyjątek:

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)

Port 636 działa dla innych działań, takich jak wyszukiwanie informacji bez hasła dla tego wpisu LDAP / AD ...

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

... więc wiem, że nie jest to konfiguracja SSL mojego serwera LDAP, ponieważ działa ona na SSL dla innych wyszukiwań.

Czy ktoś dostałValidateCredentials(...) zadzwonić do pracy przez SSL? Czy możesz wyjaśnić, jak to zrobić? Czy może istnieje inny / lepszy sposób bezpiecznego sprawdzania poświadczeń AD / LDAP?

questionAnswers(4)

yourAnswerToTheQuestion