Wie überprüfe ich Active Directory-Creds über LDAP + SSL?

Ich versuche, .NET 3.5 zu verwendenSystem.DirectoryServices.AccountManagement Namespace, um Benutzeranmeldeinformationen für unseren Active Directory-LDAP-Server zu validierenüber eine SSL-verschlüsselte LDAP-Verbindung. Hier ist der Beispielcode:

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

Dieser Code funktioniert problemlos über ungesichertes LDAP (Port 389), ich möchte jedoch lieber keine Benutzer / Pass-Kombination im Klartext übertragen. Wenn ich jedoch zu LDAP + SSL (Port 636) wechsle, erhalte ich die folgende Ausnahme:

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 kann für andere Aktivitäten verwendet werden, z. B. zum Suchen von Nicht-Passwort-Informationen für diesen LDAP / AD-Eintrag.

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

... daher weiß ich, dass dies nicht das SSL-Setup meines LDAP-Servers ist, da es für andere Suchvorgänge über SSL funktioniert.

Hat jemand das bekommen?ValidateCredentials(...) anrufen um über SSL zu arbeiten? Kannst du erklären wie? Oder gibt es eine andere / bessere Möglichkeit, AD / LDAP-Anmeldeinformationen sicher zu überprüfen?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage