Используйте SSL для подключения к LDAP с .Net DirectoryServices - PullRequest
0 голосов
/ 25 сентября 2019

У меня есть некоторый рабочий код .NET (как в качестве настольного приложения, так и в качестве развертывания IIS) для чтения данных из LDAP:

string ldapUrl = "LDAP://myLdapUrl.example/ou=user,dc=MyDC";
AuthenticationTypes auth = AuthenticationTypes.None;
using (DirectoryEntry directoryEntry = new DirectoryEntry(
   ldapUrl,
   "cn=ldap_user,ou=user,dc=MyDC",
   "NotMyTruePassword",
   auth)
{
   using (DirectorySearcher directorySearcher = new DirectorySearcher(directoryEntry))
   {
       directorySearcher.PropertiesToLoad.AddRange(new[] { "uid", "givenname", "sn", "middlename", "description", "memberof" });
       directorySearcher.Filter = String.Format("(&(objectclass=person)(cn={0}))", user);
       directorySearcher.SearchScope = SearchScope.OneLevel;
       directorySearcher.SizeLimit = 10;
       SearchResult searchResult = directorySearcher.FindOne();
   }
}

Но когда я пытаюсь подключиться к порту LDAPS (636), происходит сбой с

System.Runtime.InteropServices.COMException (0x8007203A): сервер не работает.

Замечания:

  • Я добавил сервер CA в свою учетную запись через MMC.

  • После этого я могу подключиться к порту LDAPS с помощью LdapAdmin.

  • Я попробовал следующие изменения:

    1. Просто добавив порт к URL-адресу сервера 1 :

      string ldapUrl = "LDAP://myLdapUrl.example:636/ou=user,dc=MyDC";
      
    2. Добавление порта и изменение authTypes на SecureSocketsLayer 2 :

      string ldapUrl = "LDAP://myLdapUrl.example:636/ou=user,dc=MyDC";
      AuthenticationTypes auth = AuthenticationTypes.SecureSocketsLayer;
      
    3. Добавление порта и изменение authType на Secure2 :

      string ldapUrl = "LDAP://myLdapUrl.example:636/ou=user,dc=MyDC";
      AuthenticationTypes auth = AuthenticationTypes.Secure;
      

И я всегда получаю одинаковые результаты.

Я нашел несколько примеров, использующих непосредственно соединения LDAP(из System.DirectoryServices.Protocols) но я бы предпочел не менять код, так как он уже заработал.

1 Я часто вижу, что некоторые люди утверждают, что я должен изменить LDAP:// на LDAPS:, но кажется, что это не так, как работает DirectoryServices.И в любом случае это тоже не удается.

2 Я почти уверен, что эти два варианта предназначены для аутентификации, а не для настройки SSL-соединения, но я все равно попробовал их.

1 Ответ

0 голосов
/ 25 сентября 2019

Для защищенного соединения мы не можем использовать AuthenticationType.None.
Не могли бы вы попробовать с приведенным ниже.
AuthenticationTypes authType = AuthenricationTypes.Secure;

...