Arhn - архитектура программирования

Подключение или доступ к интерфейсу LDAP Okta с помощью клиента c # .NET

У меня есть клиент, который использует интерфейс Okta LDAP. У нас есть инструмент LDAP v3, который подключается к AD, Open LDAP и другим серверам, поддерживающим LDAP v3.

Мы хотим интегрировать интерфейс Okta LDAP в наш инструмент, поскольку он совместим с LDAPv3. Наш код основан на .NET framework + C Sharp.

Мы столкнулись с некоторыми проблемами / проблемами при подключении к интерфейсу Okta LDAP.

В настоящее время мы используем библиотеку System.DirectoryServices от Microsoft, предоставляемую Microsoft. Но столкнулись с проблемами с интерфейсом LDAP.

Для StartTLS / 389

Я получаю сообщение об ошибке:

Нежелание выполнять. Код ошибки LDAP 53

Подробнее: Невозможно установить безопасное соединение. Администратору: эта услуга требует TLS. LDAP

Для SSL / 636

Ошибка: Сервер не работает.

Ссылки:

https://docs.microsoft.com/en-us/dotnet/api/system.directoryservices?view=netframework-4.8

https://docs.microsoft.com/en-us/dotnet/api/system.directoryservices.directoryentry?view=netframework-4.8

https://ldapwiki.com/wiki/LDAP_UNWILLING_TO_PERFORM

var oktaLDAPPath = "LDAP://dev-506668.ldap.oktapreview.com:636/ou=users,dc=dev-506668,dc=oktapreview,dc=com";
        var un = "uid=*******,dc=dev-506668,dc=oktapreview,dc=com";
        var pass = "*******";
        var filter = "((objectClass=*))";
        try
        {
            using (var userDirectoryEntry = new DirectoryEntry(oktaLDAPPath, un, pass,AuthenticationTypes.SecureSocketsLayer))
            { 
                using (var directorySearcher = new DirectorySearcher(userDirectoryEntry, filter) { PageSize = 100 })
                {
                    directorySearcher.FindOne();
                }
            }
        }
        catch (DirectoryServicesCOMException dex)
        {

        }
        catch (Exception ex)
        {

        }

Спасибо


Ответы:


1

Обновление. Итак, я провел небольшое тестирование для себя. Я вижу, что происходит.

Если вы выполните поиск DNS на _1 _, вы получите результат CNAME для op1-ldapi-fb96b0a1937080bd.elb.us-east-1.amazonaws.com.

Браузер будет использовать IP-адрес CNAME, но по-прежнему будет делать запрос с именем хоста, которое вы ему изначально дали. Однако по какой-то причине при запуске соединения LDAP Windows использует CNAME для инициации соединения.

Другими словами, Windows изменяет запрос на LDAP://op1-ldapi-fb96b0a1937080bd.elb.us-east-1.amazonaws.com:636. Но затем он получает сертификат SSL с именем *.ldap.oktapreview.com и паникует, потому что он не совпадает с именем, которое он использовал для запроса (op1-ldapi-fb96b0a1937080bd.elb.us-east-1.amazonaws.com).

Я проверил все это с помощью Wireshark, отслеживая трафик на порту 636. SSL Client Hello использует op1-ldapi-fb96b0a1937080bd.elb.us-east-1.amazonaws.com вместо dev-506668.ldap.oktapreview.com.

Я не знаю, как заставить его этого не делать. DirectoryEntry также не может изменить способ проверки сертификата SSL. LdapConnection делает, что вы можете видеть здесь, но работать с ним может быть немного сложнее. Я никогда этим не пользовался. (вам, вероятно, следует выполнить некоторую проверку самостоятельно, а не просто возвращать true, как в этом примере).

В любом случае вы можете поделиться этим со службой поддержки Okta.


Исходный ответ:

Похоже, ваш компьютер не доверяет сертификату SSL, который используется на сервере. Чтобы убедиться в этом, я использую Chrome. Вам нужно запустить Chrome так:

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

Затем вы можете поместить это в адресную строку:

https://dev-506668.ldap.oktapreview.com:636

Если сертификат не является доверенным, вы получите сообщение об этом с большой ошибкой. Вы можете нажать кнопку «Дополнительно», чтобы узнать причину, по которой Chrome не доверяет ему. Но Chrome также позволит вам проверить сертификат, щелкнув «Небезопасно» в адресной строке слева от адреса, а затем щелкнув «Сертификат».

Есть несколько причин, по которым ему нельзя доверять:

  1. Полное доменное имя, которое вы используете (dev-506668.ldap.oktapreview.com), не соответствует тому, что указано в сертификате. В этом случае вы можете просто изменить используемое доменное имя, чтобы оно соответствовало сертификату.
  2. Сертификат не выпущен доверенным центром. Это может быть самоподписанный сертификат. В этом случае при просмотре сертификата вы должны увидеть кнопку «Установить сертификат», которую можно использовать для явного доверия сертификату. См. здесь для скриншотов, начиная с шага 3. Это применимо только к текущему компьютеру.
23.07.2019
  • Привет, спасибо за ответ. Имя сертификата - * .ldap.oktapreview.com, и он отлично работает с другими клиентскими приложениями, совместимыми с LDAPv3, такими как Apache Directory Studio и LDAPAdmin. 23.07.2019
  • Сертификат отображается как надежный на компьютере, на котором вы его тестируете? 23.07.2019
  • Да, он отображается как надежный, я поместил его в доверенные корневые центры сертификации 24.07.2019
  • help.okta.com/en/prod/Content/Topics/ Каталог / Это и есть LDAP-интерфейс Okta. 24.07.2019
  • * - это подстановочный знак, означающий, что его можно использовать с любым .ldap.oktapreview.com. 26.07.2019
  • Брандмауэра точно нет в пути? (вы можете проверить соединение в PowerShell с помощью Test-NetConnection dev-506668.ldap.oktapreview.com -Port 636) Есть ли что-нибудь в средстве просмотра событий Windows после сбоя подключения? (Журналы приложений или системы) 26.07.2019
  • Результаты тестирования Powershell в TcpTestSucceeded: True 27.07.2019
  • И получите это в системных журналах - сертификат, полученный с удаленного сервера, не содержит ожидаемого имени. Поэтому невозможно определить, подключаемся ли мы к правильному серверу. Ожидаемое имя сервера - op1-ldapi-fb96b0a1937080bd.elb.us-east-1.amazonaws.com. Запрос на подключение TLS не удался. Прилагаемые данные содержат сертификат сервера. 27.07.2019
  • Это означает, что сертификат не содержит доменного имени, к которому вы подключаетесь. Это сработает. 27.07.2019
  • Да, я связался со службой поддержки Okta, и они ответили, что могут предоставить только шаблонный сертификат. Это грустно 29.07.2019
  • Как я могу двигаться дальше? Какие-либо предложения 29.07.2019
  • Я обновил свой ответ. Я проверил себя и вижу, что происходит. 29.07.2019
  • Спасибо @Gabriel Luci. Да, я планирую реализовать ссылку, которую вы предоставили на данный момент, как это единственное решение, и поделиться ею с поддержкой Okta Dev. Надеюсь, они найдут решение этой проблемы. Я очень ценю вашу помощь. Большое тебе спасибо. 29.07.2019
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..