проблема с использованием аутентификации Active Directory LDAPS с ASP. NET членством - PullRequest
0 голосов
/ 14 июля 2020

Я использую asp. net framework 4.8 Я пытаюсь использовать класс членства с поставщиком Active Directory. группа безопасности настаивает на использовании протокола LDAPS с сертификатом CA, поэтому я установил конфигурацию следующим образом:

web.config

  <connectionStrings>
    <add name="ADService" connectionString="LDAPS://ipaddress:636/OU=ou,DC=dc,DC=dc"/> (censored)
  </connectionStrings>

  <system.web>
    <membership defaultProvider="AspNetActiveDirectoryMembershipProvider">
      <providers>
        <add name="AspNetActiveDirectoryMembershipProvider"
          type="System.Web.Security.ActiveDirectoryMembershipProvider"
             connectionStringName="ADService"
              connectionUsername="MYUSERNAME"
              connectionPassword="MYPASSWORD "
             connectionProtection="Secure"/>
      </providers>
    </membership>
  </system.web>

Когда я пытаюсь использовать членство .GetUser () Я получаю следующее исключение:

{"Ошибка HRESULT E_FAIL была возвращена из вызова компонента COM. (C: \ Projects \ \ project \ web.config line 83) "}

Я устал выполнять следующие шаги: Ошибка HRESULT E_FAIL возвращена из вызова COM-компонента VS2012 при отладке

I смог подключиться к активному каталогу с помощью браузера LDAP, но не через мой код.

Когда я пытаюсь подключиться к другому активному каталогу в моем локальном домене, который не защищен (LDAP на порту 389), он работает .

есть предложения?

1 Ответ

0 голосов
/ 14 июля 2020

LDAP через SSL следует тем же правилам, что и HTTP через SSL (HTTPS). Двумя наиболее важными частями являются:

  1. Доменное имя, которое вы используете для подключения, должно соответствовать одному из доменных имен в сертификате.
  2. Сертификат SSL должен быть выпущен организацией, которая ваш компьютер доверяет, и

Правило № 1 означает, что вы не можете использовать IP-адрес для подключения, что, похоже, вы пытаетесь сделать. Вы должны использовать доменное имя. Это может быть вашей единственной проблемой.

Для правила № 2 вы можете проверить сертификат, загрузив его на свой компьютер с помощью этого сценария PowerShell:

$webRequest = [Net.WebRequest]::Create("https://example.com:636")
try { $webRequest.GetResponse() } catch {}
$cert = $webRequest.ServicePoint.Certificate
$bytes = $cert.Export([Security.Cryptography.X509Certificates.X509ContentType]::Cert)
set-content -value $bytes -encoding byte -path "certificate.cer"

Измените example.com на свой домен name (вы можете использовать здесь IP-адрес, поскольку он просто загружает сертификат, а не оценивает, будет ли он доверенным). После его запуска у вас будет файл certificate.cer, который вы можете дважды щелкнуть и просмотреть. Он явно скажет вам, является ли сертификат ненадежным. В этом случае вам нужно будет установить сертификат root в качестве доверенного Root сертификата на свой компьютер.

Чтобы помочь с правилом № 1, вы также можете просмотреть все домены, перечисленные в сертификат, просмотрев вкладку «Подробности» и выбрав «Альтернативное имя субъекта» в списке. Может быть только один, но может быть и больше. Если их несколько, просто убедитесь, что вы используете этот DNS-сервер для разрешения на правильный IP-адрес.

...