11
votes

Erreur inconnue (0x80005000) avec connexion LDAPS

J'ai été coincé pendant les deux dernières heures sur un bit Active Directory gênant.

Ce que j'essaie d'accomplir est connecté à un actif via LDAP sur SSL. Le type d'authentification est anonyme. J'utilise .NET Framework 4.0, C # et Visual Studio 2010. P>

Le code suivant devrait fonctionner selon diverses ressources en ligne. Mais il continue à atteindre l'incroyable explicite auto-explicite: 'Erreur inconnue (0x80005000)'. P>

DirectoryEntry entry = new DirectoryEntry();
entry.Path = "LDAPS://some.ldap.server:636";
entry.AuthenticationType = AuthenticationTypes.SecureSocketsLayer;

DirectorySearcher searcher = new DirectorySearcher();
searcher.searchRoot = entry;
searcher.Filter = "(&(objectCategory=person)(objectClass=user))";

SearchResultCollection results = searcher.FindAll();


4 commentaires

Le type d'authentification est anonyme . Ce n'est pas le cas, vous l'avez défini à authentificationTypesPes.securesocketsLayer. Ce qui identifie l'expéditeur pour mieux définir le nom d'utilisateur + le mot de passe également.


Salut Hans, j'ai essayé de me connecter à une annonce à l'aide d'un outil appelé JXplorer . Cela a fonctionné bien lorsque vous êtes défini sur SSL et aucun nom d'utilisateur ou mot de passe spécifié ..


Eh bien, gardez vos yeux sur la balle. Avez-vous toujours E_FAIL lorsque vous spécifiez un utilisateur valide? Est-ce que ça marche lorsque vous spécifiez l'authentificationTypesPes.Anonymous? Si cela se sent alors libre de supposer que JXplorer fait quelque chose comme il suffit de revenir à Anonyme ou à l'utilisation d'informations d'identification de l'utilisateur connectées lorsque aucun utilisateur n'est spécifié.


Hans, j'ai essayé à la fois de spécifier un utilisateur valide et de spécifier d'authentificationTypes.Anonymous. Toujours la même erreur non descriptive. Toute autre astuce dans vos manches?


3 Réponses :


2
votes

Autant que je me souvienne que cette erreur signifie qu'il y a un problème avec le nom du chemin de répertoire.

  1. Assurez-vous que "Server.DomainName" est le CN dans le certificat de votre serveur d'annonces.
  2. Assurez-vous que "Certains.DomainName" est bien résolu, ajoutez la résolution dans votre fichier d'hôtes pour le test
  3. Assurez-vous que le "domaineName" est bien résolu, ajoutez la résolution dans votre fichier d'hôtes pour le test
  4. Assurez-vous que la KE publique de l'autorité de certification qui émet un certificat de serveur se trouve dans votre ordinateur d'autorité de certification de la racine de confiance.
  5. Essayez de faire comme ça:
    xxx

3 commentaires

Bonjour, le code fonctionne sans erros lorsque je l'exécute dans la même machine de serveur Windows; Mais je dois travailler avec DirectoryENTry de la machine distante; Dans ce cas, il ne fonctionne pas; Toute autre modification que je dois faire?


"Ça ne fonctionne pas" ne suffit pas pour moi de vous aider.


S'excuser; J'exécute le même code dans une machine distante et je reçois "serveur n'est pas opérationnel" comme message d'exception; J'ai trouvé que Widows Server Certificat n'est pas validé dans la machine distante; Pour valider un certificat avec une API 'LDAPConnection', le code est dans ce "POST, Stackoverflow.com/Questtions/12621256/... "; Mon besoin est que je dois valider le certificat et utiliser l'API "DirectoryRyRy" identique comme vous;



1
votes

Selon la manière dont votre serveur d'annuaire (ou vos éléments de votre réseau est configuré), un changement simple, tel que celui-ci fonctionnera (LDAP vs LDAPS, mais laissez le numéro de port)

entry.Path = "LDAP://some.ldap.server:636";


2 commentaires

Cela m'a aidé mais je ne sais pas quelle est cette configuration d'annonce spécifique qui provoque un tel comportement. Un autre comportement intéressant est que cela ne fonctionne pas lorsque vous donnez un nom de protocole LDAP en minuscule dans l'URL, c'est-à-dire "LDAP: //some.ldap.server: 636" fonctionne mais "LDAP: //some.ldap.server : 636 "ne pas. J'ai été paniqué sur cette question spécialement.


Aussi, cela a fonctionné pour moi sans définir la propriété AuthenticationType sur l'objet DirectyENTry dans l'authentificationTypesPes.securesocketsLayer, mais je ne sais pas si même cela sera cohérent dans tous les environnements et topologies.



13
votes

Enfin!

Il semble que une application ASP.NET n'a pas les droits (ni ne sait pas comment) examiner le magasin de certificats de confiance au niveau de la machine. Étant donné que le certificat était auto-signé, l'application ASP.NET a refusé d'établir une connexion. P>

J'ai corrigé le problème à l'aide de la validation du certificat personnalisé. Le code suivant a fait l'astuce: p> xxx pré>

car je suis sûr que le certificat est valide, la méthode ServerCallback ressemble à ceci: p>

System.DirectoryServices.DirectoryEntry


3 commentaires

+1, j'ajouterai également à quelqu'un qui vient ici est de vous assurer que vous n'avez pas besoin de crédits pour vous connecter au serveur LDAP, car vous pourriez. De plus, pour interroger le LDAP, vous devrez utiliser les classes SearchRequest et SearchResponse, et SearchResponse n'a pas de tri, vous devrez donc mettre en œuvre cela seul. J'ai utilisé ce non-b / c de la validation des certificats personnalisés, mais DirectoryRyRY échouait dans WinPe, je ne sais pas pourquoi, mais cela a fonctionné, de sorte que ce qui ...


Vous pouvez accorder des droits ASP.NET pour accéder à un certificat dans le magasin de machine en ouvrant le composant logiciel enfichable Certificat MMC pour le magasin de machines, recherchant le cert que vous souhaitez utiliser, cliquez avec le bouton droit de la souris sur les tâches> Gérer les clés privées et le service de réseau de subventions. droit. Ceci est utile pour tout ce qui utilise des certs, par exemple une base d'identité, etc.


Je trouve votre réponse aujourd'hui, j'ai eu le même problème. L'exception projetée n'est pas intuitive et une perte de temps perdue pour trouver cette solution. Cet article est très utile, +1 ou cours.