Назад | Перейти на главную страницу

найти клиента, ответственного за ошибку schannel ldap

где-то в нашей сети клиент ldap запрашивает наши серверы AD без надлежащей информации CA. Это вызывает (на мой взгляд, бесполезное) системное критическое (источник: schannel) событие с идентификатором 36887 в журнале событий контроллеров домена:

Получено следующее фатальное предупреждение: 46.

Как я могу найти неправильно настроенного клиента?

Встроенный, вы не можете легко найти источник сообщения.

Вам понадобится tcpdump, сетевой монитор Microsoft или wirehark, чтобы найти машину, вызывающую ошибку. (многие нити говорили то же самое, там, там или там (См. В комментарии ответ Джорджу о tcpdump))

Если вы можете захватить трафик, поступающий в DC, для анализа, вы можете использовать поиск пакетов Wireshark для поиска представленных сертификатов.

Этот фильтр wirehark ищет обмен сертификатами и отфильтровывает все, что выдано «LDAP SSL test», это позволит вам найти сертификаты, выданные не вашим доменом.

(ssl.handshake.type == 11) && !(x509sat.uTF8String == "LDAP SSL test")

У меня нет примера AD для работы, поэтому я использую стандартный LDAP через TLS pcap со страницы примеров wirehark.

У меня очень мало опыта в администрировании Windows / AD, но мне нравится Linux. Я решил провести трассировку и / или захват пакетов, запустить программу в режиме отладки и т. Д. В аналогичной ситуации с Linux ... поэтому я обнаружил следующее:

Как вы отслеживаете / отлаживаете соединения LDAP с Active Directory?

И это:

https://technet.microsoft.com/en-us/library/cc961809.aspx

Повышение уровня увеличивает детализацию сообщений и количество отправленных сообщений. Установка значения записей в подразделе «Диагностика» больше 3 может снизить производительность сервера и не рекомендуется. Журнал событий приложения быстро заполняется при повышении уровня ведения журнала.

А это может быть:

https://msdn.microsoft.com/en-us/library/windows/desktop/dd815339(v=vs.85).aspx

Трассировка использует трассировку событий для Windows (ETW). Чтобы воспользоваться инструментами трассировки, доступными в Windows Server 2008 R2, установите Microsoft Windows SDK с сайта загрузок MSDN.

Поиск в Google также показывает результаты при выполнении трассировки и тому подобном в службах Windows, но, опять же, я не знаком ни с одним из них. Я полагаю, что наблюдение за сетевым трафиком в одиночку может быть очень трудным, потому что вы видите только трафик и, вероятно, не знаете, что искать, и вы не видите, что происходит внутри службы.

Я понятия не имею, какой результат ожидать от выполнения трассировки на ldap или использования любого из упомянутых инструментов / методов, но похоже, что попробовать стоит.

Удачи

Если вы не хотите обнюхивать пакеты, я бы порекомендовал использовать сценарий PowerShell на всех компьютерах, тестирующих безопасное соединение ldap и регистрирующих неудачные попытки. Вы можете удаленно подключаться к клиентам из контроллера домена или создать сценарий на стороне клиента, который регистрирует сбои на файловом сервере.

Идея сценария - смоделировать безопасное соединение ldap. Он использует платформу .net, которая встроена в Windows 7 с пакетом обновления 1 или выше.

В случае, если вы хотите запускать удаленно с DC, сценарий будет выглядеть следующим образом (требуется разрешение для удаленного PowerShell, которое может быть достигнуто после этой статьи https://www.briantist.com/how-to/powershell-remoting-group-policy/):

Import-Module ActiveDirectory
$domain = "contoso.com"
$user = "Administrator"
$password = "P@ssw0rd"
$IPFilter = "192.168.1.*"

$scriptblock = {
   write-host "$(hostname) - " -NoNewLine
   try {
      $LDAPS = New-Object adsi ("LDAP://$($args[0]):636",$args[1],$args[2],'SecureSocketsLayer')
      Write-Host "Secure LDAP Connection succeeded."
   } Catch {
      Write-Host "Secure LDAP Connection failed." -foregroundcolor red
   }
}

$Computers = Get-ADComputer -filter * -Properties IPv4Address | Where{ $_.IPv4Address -like $IPFilter}

foreach($Computer in $Computers)
{
   try {
      $session = New-PSSession $Computer.Name -ErrorAction Stop
      Invoke-Command -Session $session -ScriptBlock $scriptblock -ArgumentList $domain,$user,$password
   }catch{
      Write-Host "Connection to $($Computer.Name) failed." -foregroundcolor red
   }
}

Или, если вам нужен локальный скрипт, который входит на удаленный сервер:

$domain = "contoso.com"
$user = "Administrator"
$password = "P@ssw0rd"
$LogFile = "\\fileserver\logs\ldapconnection.log"

try {
   $LDAPS = New-Object adsi ("LDAP://$domain:636",$user,$password,'SecureSocketsLayer')
   "$(hostname) - Secure LDAP Connection succeeded."  | Out-File $LogFile -Append
} Catch {
   "$(hostname) - Secure LDAP Connection failed."  | Out-File $LogFile -Append
}

Вывод выполнения удаленной версии (красные - автономные клиенты):