Ошибка 36870: Код ошибки, возвращенный модулем шифрования 0x8009030D

Обновлено 08.12.2022

0x8009030D

Добрый день! Уважаемые читатели и гости IT портала Pyatilistnik. В прошлый раз мы с вами устраняли ошибку подключения "Код ошибки 0x907. Расширенный код ошибки 0x0". В сегодняшней статье мы рассмотрим еще одну ошибку RDP, которая не дает людям любые подключения "Произошла неустранимая ошибка при обращении к закрытому ключу учетных данных TLS server. Код ошибки, возвращенный модулем шифрования: ошибка 0x8009030D. Внутреннее состояние ошибки". Данную проблему я стал получать массово в декабре 2022. Давайте покажу куда нужно смотреть.

Описание ошибки 0x8009030D

У меня есть RDS ферма состоящая из 50 RDSH хостов, в какой-то момент люди начали массово на двух хостах получать ошибку "An internal error has occurred". Я долго искал проблему, и таки отыскал ее.

внутренняя ошибка rdp error 0x4

Ей оказалась ошибка появляющаяся каждый раз при попытке подключения ID Schannel 36870:

Произошла неустранимая ошибка при обращении к закрытому ключу учетных данных TLS server. Код ошибки, возвращенный модулем шифрования: ошибка 0x8009030D. Внутреннее состояние ошибки (A fatal error occurred while accessing the private key of the TLS server credential. Error code returned by encryption module: error 0x8009030D. Internal error state)

A fatal error occurred while accessing the private key of the TLS server credential. Error code returned by encryption module: error 0x8009030D. Internal error state

Вот так это массово выглядит.

Произошла неустранимая ошибка при обращении к закрытому ключу учетных данных TLS server. Код ошибки, возвращенный модулем шифрования: ошибка 0x8009030D. Внутреннее состояние ошибки

В 99% случаев у вас просто не хватает прав на доступ к нужному SSL сертификату, который используется при RDP сессии.

Устранение ошибки ID 36870

Как я и писал ранее, чтобы убрать ошибку 0x907, я на всех участниках RDS ферму, установил нормальный Wildcard сертификат. Все стало нормально. Но, то что теперь я стал получать ошибку с кодом 0x8009030D, стало означать, с проблемой прав доступа к файлу. То есть у учетной записи NETWORK SERVICE отсутствуют разрешения на файл в C:\ProgramData\Microsoft\Crypto\RSA\MachineKey.

Каталог MachineKeys хранит пары ключей сертификатов для пользователей и компьютеров. Эта папка используется службами сертификации и Internet Explorer, другими браузерами. В этой директории и в ее поддиректориях размещаются файлы, связанные с сертификатами и ключами контейнерами.

Папка MachineKey

Для того чтобы понять, что происходит я вам советую скачать утилиту из пакета Sysinernals под названием Process Monitor.

https://docs.microsoft.com/en-us/sysinternals/downloads/procmon

  • ✅Далее делаем себе фильтр по событию 36870, чтобы мониторить его появление

Фильтрация события 356870

  • ✅И запускаем Procmon.exe или Procmon64.exe, чтобы спарсить текущие события. Как только событие появилось, вам нужно остановить захват (CTRL+E) и сохранить этот лог в CSV файл.

Запуск Procmon64 для устранения 0x8009030D

Обратите внимание, что если у вас Procmon запущен давно, то лог файл может быть весьма внушительного размера.

Procmon64 сохранение CSV файла

Далее вам нужно поискать события подобные этому:

"17:07:32,2856463","lsass.exe","912","CreateFile"," C:\ProgramData\Microsoft\Crypto\Keys\ eed523a12125737e6733ccef353672ce_02129252-b210-4f5d-a8a1-2febf0b00564","ACCESS DENIED","Desired Access: Generic Read, Disposition: Open, Options: Sequential Access, Synchronous IO Non-Alert, Non-Directory File, Attributes: n/a, ShareMode: Read, AllocationSize: n/a, Impersonating: NT AUTHORITY\NETWORK SERVICE"

Как видно, учетная запись NETWORK SERVICE не смогла прочитать ключ  eed523a12125737e6733ccef353672ce_02129252-b210-4f5d-a8a1-2febf0b00564.

"17:07:32,2856463","lsass.exe","912","CreateFile","C:\ProgramData\Microsoft\Crypto\Keys\eed523a12125737e6733ccef353672ce_02129252-b210-4f5d-a8a1-2febf0b00564","ACCESS DENIED","Desired Access: Generic Read, Disposition: Open, Options: Sequential Access, Synchronous IO Non-Alert, Non-Directory File, Attributes: n/a, ShareMode: Read, AllocationSize: n/a, Impersonating: NT AUTHORITY\NETWORK SERVICE"

Как предоставить права на сертификат

  • ✅Нажмите сочетание клавиш Win+R и вызовите оснастку mmc.

Вызов mmc оснастки

Далее Вам нужно нажать CTR:+M. Найдите оснастку "Сертификаты" и переместите ее вправо. Там выберите пункт "Учетной записи компьютера".

Добавление оснастки сертификаты, учетной записи компьютера

Кажем, что это будет локальный компьютер, но можно сделать и удаленного, если нет доступа по RDP.

Добавление сертификата локального компьютера

Найдите в личном контейнере компьютера, нужный сертификат, который используется при подключении. В контекстном меню выберите пункт "Управление закрытыми ключами".

Управление закрытыми ключами

Далее в открывшемся ACL вам нужно дать права чтения для NETWORK SERVICE.

Предоставление прав на сертификат

Права для NETWORK SERVICE

  • ✅Второй метод, это использовать утилиту командной строки:

icacls "C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys\eed523a12125737e6733ccef353672ce_02129252-b210-4f5d-a8a1-2febf0b00564" /grant *S-1-5-20:RX

Примечание: вам может потребоваться стать владельцем файла, если вы не можете изменить его разрешения.

takeown /F "C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys\filename"

На этом у меня все. Ошибку я устранил, уровень защищенности сохранил. С вами был Иван Сёмин, автор и создатель IT портала Pyatilistnik.org.

Сброс разрешения для папки MachineKeys

Для сброса разрешений на данную папку, выполните в консоли в режиме администратора.

Md C:\temp

icacls C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys /t /c > c:\temp\BeforeScript_permissions.txt

takeown /f "C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys" /a /r

icacls C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys /t /c /grant "NT AUTHORITY\System:(F)"

icacls C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys /t /c /grant "NT AUTHORITY\NETWORK SERVICE:(R)"

icacls C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys /t /c /grant "BUILTIN\Administrators:(F)"

icacls C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys /t /c > c:\temp\AfterScript_permissions.txt

Где хранится самоподписный сертификат в реестре

Это больше для себя, где лежит отпечаток сертификата:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\ Control\Terminal Server\WinStations

Самоподписный сертификат в реестре

Дополнительные ссылки

  • https://meta.stackexchange.com/questions/8231/are-answers-that-just-contain-links-elsewhere-really-good-answers/8259#8259
  • https://learn.microsoft.com/en-US/troubleshoot/windows-server/remote/custom-server-authentication-certificate-for-tls
  • https://serverfault.com/questions/541364/how-to-fix-rdp-on-windows-server-2012
  • https://learn.microsoft.com/ru-ru/troubleshoot/azure/virtual-machines/troubleshoot-rdp-internal-error
Автор - Сёмин Иван

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *