none
LDAPS - Fehler 0x80005000 oder Server down RRS feed

  • Frage

  • Hallo.

    Ich versuche schon eine Weile per LDAPS auf ein AD zuzugreifen. Aber ich erhalte nur Meldungen wie "Server ist down" oder "Error 0x80005000".
    Ich habe bereits eine Lösung basierend auf LDAP geschrieben, diese funktioniert problemlos. Aber an dem "S" hinter "LDAP" beisse ich mir gerade die Zähne aus. Habe auch viel im WWW gesucht, dabei wenig vernünftiges gefunden, und nichts führte zu einem positiven Ergebnis. Auch die vielen Bücher in die ich investiert habe, helfen nicht weiter.

    Wo liegt der Trick? Kann mir irgendjemand weiter helfen?

    Ich programmiere ein Konsolenprogramm, welches die Daten aus dem AD liest, und eine Oracle Datenbank abgleicht. Sowohl Oracle, AD als auch mein Programm befinden sich an verscheidenen Orten.
    Der grobe Aufbau ist wie folgt:
    DirectoryEntry entry = new DirectoryEntry("LDAPS://" + server, username, password, AuthenticationTypes.SecureSocketLayer);
    DirectorySearcher search = new DirectorySearcher(entry);
    search.Filter = "(objectClass=user)";
    SearchResultCollection searchResults = null;
    searchResults = search.FindAll();

    Ich habe verschiedene Variationen benutzt: LDAP:, LDAPS:, mit Port 636 oder ohne, auch die Kombination LDAP://LDAPS:// und verschiedene AuthenticationTypes.

    In einem anderen Programm habe ich vor kurzem den Zugriff per HTTPS geschafft, aber die Methode die ich dort verwendete (mit networkCredential) bekomme ich nicht an die DirectoryServices gekoppelt.

    Ich bin kein absoluter Spezi, bitte habt Nachsicht falls ich hier irgendetwas stümperhaft ausgedrückt habe.

    Vielen Dank im Vorraus!
    mfg Heiko

    PS: Falls es eine (freie oder kommerzielle) Bibliothek geben sollte, die mein Problem löst, bin ich auch für Tipps dankbar. Denke dabei an ChilKat, aber weiss nicht recht ob das wirklich funzt.

    Freitag, 2. Juli 2010 13:15

Antworten

Alle Antworten

  • Hallo Heiko,

    Für LDAPS ist es in vielen Fällen besser, über die [LdapConnection] zuzugreifen (nicht DirectoryEntry), wobei man speziell darauf achten sollte, die SecureSocketLayer - Eigenschaft auf true zu setzen (sonst findet kein LDAPS statt). Hier besteht u.a. die Möglichkeit, das Zertifikat selber zu validieren.
    Für Details siehe u.a. auch: [Authentication using LdapConnection and custom certificate validation]


    ciao Frank
    Samstag, 3. Juli 2010 17:08
  • Hallo Frank,

    vielen Dank für die Info.
    Hast du evtl. noch andere weiterführende Links wo ich mich belesen kann, ich komme nicht so recht weiter wie ich die bestehende LdapConnection dann nutzen kann falls sie denn einmal steht.
    Vielleicht stelle ich mich nur zu dusslig an, keine Ahnung. Will keinesfalls eine fertige Lösung von dir oder jemand anderem hier gepostet haben, ein oder zwei weiterführende Links sollten reichen um mir selbst auf die Sprünge helfen.

    Oder muss ich alles über DirectoryResponse / DirectoryRequest abwickeln? Kam ich grad eben drauf, aber bin unsicher ob das der richtige Weg ist...

    Heiko

    Montag, 5. Juli 2010 09:44
  • wie ich die bestehende LdapConnection dann nutzen kann

    scheint üblich wie:
     using connection { connection.Bind() ...use Directory... }

    http://www.codeproject.com/KB/system/eDirectoryAuthentication.aspx

    http://www.codeproject.com/KB/cs/SunOneLDAP_NET.aspx

    • Als Antwort markiert Heiko Scholze Dienstag, 6. Juli 2010 15:41
    Montag, 5. Juli 2010 10:08
  • Hallo Heiko,

    also Beispiele, wie man das umsetzt, waren ja schon durch einige (von anderen jetzt auch wiederholte) Links gegeben. Aber vielleicht noch weitere:
    [Cool Solutions: Using .NET C# LDAP Library]
    [Re: Active Directory "login" from C# application]
    Bereits von mir gepostet: [eDirectory Authentication using LdapConnection and custom certificate validation]

    Wo man sonst ja leicht auch mal Fehler machen kann, bzw. was nicht immer gleich intuitiv ist, ist die Query Syntax:
    [LDAP Query Basics] / [Search Filter Syntax (Windows)]


    ciao Frank
    • Als Antwort markiert Heiko Scholze Dienstag, 6. Juli 2010 15:40
    Montag, 5. Juli 2010 11:09
  • Nur zur Info: Ich habe es gepackt :-) und wieder ne Menge dazu gelernt.

    Danke für die Tipps!

    Freitag, 9. Juli 2010 08:49
  • Hallo Heiko

    Ich habe gerade ähnliche Probleme wie du gehabt hast. Da es ja bei Dir dazumal funktioniert hat, würde mich schon interessieren, was es dazu gebraucht hat. Hat es mit DirectoryEntry funktioniert, oder schliesslich nur mit System.DirectoryServices.Protocols.LdapConnection ?

    Vielen Dank schon mal.

    Freitag, 6. Januar 2012 16:21
  • Hallo Bruno.

    Ich habe die komplette Lösung auf SDS.Protocols aufgebaut.

    Hat zwar recht lange gedauert, da es kaum Literatur gibt, aber am Ende läuft alles recht zuverlässig.

    Wichtig ist, die Grundlagen zu verstehen. Die findest du im Dokument "Introduction to System.DirectoryServices.Protocols (S.DS.P)" auf MSDN. Ansonsten die Links hier im Thread checken. Viel mehr hatte ich auch nicht.

    Gruss Heiko

    Freitag, 13. Januar 2012 08:35
  • Hallo Heiko

    Danke für den Input. Inzwischen hab ich's auch hingekriegt - mit S.DS.Protocols. Entscheidend war, dass auf die Überprüfung des Serverzertifikats mit einer Callbackfunktion reagiert werden kann. So kann selbst entschieden werden, ob überhaupt und mit welchem Zertifikat verglichen wird. Die Anwendung von S.DS.P ist aber um einiges mühsamer als mit S.DS, da bspw. bei einem Change eines Attributs zuerst überprüft werden muss, ob es schon existiert, und dann entweder ein Add oder Modify gemacht werden muss.

    Gruss Bruno

    Freitag, 20. Januar 2012 16:55