Contacter Active Directory avec SSL

J’ai une méthode qui valide les informations d’identification de l’utilisateur par rapport à Active Directory. J’aimerais utiliser cette méthode avec SSL mais je ne parviens pas à la faire fonctionner.

Le problème principal est que j’ai un serveur qui est en dehors de notre réseau (est-ce qu’on l’appelle DMZ?). Et à partir de là, je veux contacter mon annuaire actif, c’est pourquoi je veux utiliser SSL.

Lorsque je l’utilise sur mon ordinateur local (pas à partir de DMZ), j’obtiens cette erreur:

System.DirectoryServices.AccountManagement.PrincipalServerDownException: le serveur n’a pas pu être contacté. —> System.DirectoryServices.Protocols.LdapException: le serveur LDAP n’est pas disponible.
à System.DirectoryServices.Protocols.LdapConnection.Connect ()
sur System.DirectoryServices.Protocols.LdapConnection.SendRequestHelper (demande DirectoryRequest, Int32 & messageID)
sur System.DirectoryServices.Protocols.LdapConnection.SendRequest (demande DirectoryRequest, TimeSpan requestTimeout)
at System.DirectoryServices.Protocols.LdapConnection.SendRequest (demande DirectoryRequest)
sur System.DirectoryServices.AccountManagement.PrincipalContext.ReadServerConfig (Ssortingng serverName, ServerProperties & properties)

— Fin de trace de stack d’exception interne —
sur System.DirectoryServices.AccountManagement.PrincipalContext.ReadServerConfig (Ssortingng serverName, ServerProperties & properties)
sur System.DirectoryServices.AccountManagement.PrincipalContext.DoServerVerifyAndPropResortingeval ()
sur System.DirectoryServices.AccountManagement.PrincipalContext..ctor (ContextType contextType, nom de chaîne, conteneur de chaîne, options ContextOptions, chaîne de nom d’utilisateur, mot de passe de chaîne)
sur System.DirectoryServices.AccountManagement.PrincipalContext..ctor (contextType de ContextType, nom de chaîne, conteneur de chaîne, options de ContextOptions)
at Authorization.AuthorizeAD.ValidateCredentials (nom d’utilisateur de la chaîne, mot de passe de la chaîne)

J’ai pensé qu’il serait bien de le faire fonctionner avec SSL depuis local avant de l’essayer depuis notre serveur.

Ma méthode:

public bool ValidateCredentials(ssortingng username, ssortingng password) { using ( var context = new PrincipalContext(ContextType.Domain, ContextName, ContextContainer, ContextOptions.Negotiate | ContextOptions.Signing | ContextOptions.Sealing | ContextOptions.SecureSocketLayer)) { return context.ValidateCredentials(username, password); } } 

Comme dit précédemment, sans ContextOptions.SecureSocketLayer cela fonctionne très bien (les trois autres le sont par défaut si le paramètre est null)

Est-ce que quelqu’un sait comment utiliser PrincipalContext correct avec SSL?

Êtes-vous sûr qu’il prend en charge SSL et que le pare-feu est ouvert pour permettre cette connexion?

LDAP utilise le port 389. LDAPS utilise le port 636.

Si le client telnet est installé, vous pouvez l’utiliser pour vérifier la connectivité:

 telnet yourdomain.com 636 

Si vous obtenez un écran vide, cela fonctionne. S’il ne peut pas se connecter, il vous le dira.

Si cela est ouvert et que cela ne fonctionne toujours pas, il se peut qu’il utilise un certificate SSL auto-signé. Recherchez dans le journal des événements Windows les erreurs liées aux certificates.

J’ai également utilisé Chrome pour vérifier le certificate. Vous devez exécuter chrome comme ceci:

 chrome.exe --explicitly-allowed-ports=636 

Ensuite, accédez à https://yourdomain.com:636 et voyez si cela vous donne des erreurs de certificate. Ensuite, vous pouvez réellement voir le certificate. Si tel est le problème, vous pourrez peut-être importer le certificate et lui faire explicitement confiance.