Рейтинг:0

Как вручную обойти ловушку-22 сертификата AD FS

флаг mx

Я не могу запустить службу AD FS. Это связано с тем, что он настроен с сертификатом с неправильным набором излишне сложных расширений X509. Это приводит к сбою службы с ошибкой 102, которая является исключением нулевого аргумента. Тихо.

Детали исключения: 
System.ArgumentNullException: значение не может быть нулевым.
Имя параметра: сертификат
   в System.IdentityModel.Tokens.X509SecurityToken..ctor (сертификат X509Certificate2, идентификатор строки, логический клон, логический одноразовый)
   в Microsoft.IdentityServer.Service.Configuration.MSISSecurityTokenServiceConfiguration.Create (логическое значение forSaml, логическое значение forPassive)
   в Microsoft.IdentityServer.Service.Policy.PolicyServer.Service.ProxyPolicyServiceHost.ConfigureWIF()
   в Microsoft.IdentityServer.Service.SecurityTokenService.MSISConfigurableServiceHost.Configure()
   в Microsoft.IdentityServer.Service.Policy.PolicyServer.Service.ProxyPolicyServiceHost.Create()
   в Microsoft.IdentityServer.ServiceHost.STSService.StartProxyPolicyStoreService(ServiceHostManager serviceHostManager)
   в Microsoft.IdentityServer.ServiceHost.STSService.OnStartInternal (логическое значение requestAdditionalTime)

Итак, мне нужно изменить сертификат. Ищите, как это сделать, есть много ресурсов. Каждый хочет, чтобы вы открыли оснастку AD FS MMC. Который сообщает об ошибке:

ADMIN0017: Исключение при подключении к службе конфигурации (...) 
или служба Windows AD FS не запущена.

Другими словами, ADFS делает то, что я могу описать только как невероятно тупой. Это

  • Разрешение пользователю настроить его таким образом, чтобы он не запускался.
  • Не позволять пользователю изменять конфигурацию, если она не запущена.

Есть команда powershell, которая делает то же самое;

Set-AdfsCertificate -CertificateType Service-Communications -Thumbprint <paste hex thumb>

Приводит к той же глупости:

Set-AdfsCertificate: не удалось подключиться к net.tcp://localhost:1500/policy

То же самое касается и других команд powershell adfs.

Но: Хуже всего то, что конфигурация тупая и загадочная. Кажется, работает только один конкретный способ настройки сертификатов, и я теряюсь в море расширений ключей, расширенных расширений ключей, альтернативных имен, методов ключей, разрешений компьютера, разрешений пользователя, разрешений служебной учетной записи, деталей PFX закрытого ключа, версии pfx, версии поставщика криптографических услуг и многое другое. Документация Microsoft устарела, 404 и/или неполная.

Поэтому мне нужно заменить этот сертификат несколько десятков раз методом проб и ошибок, пока что-то не закрепится.Каков простой способ изменить сертификат, который использует ADFS?

  1. Не требует использования консоли AD FS MMC. Это будет работать только в том случае, если служба может запуститься, чего она не может.
  2. Не включает команды powershell ADFS, которые, к сожалению, также требуют запуска службы.

Изменить: даже переустановка ADFS делает нет решить проблему. Даже если выбрана другая база данных конфигурации. Я все еще сталкиваюсь с ошибкой 102. Похоже, что настройки сертификата на самом деле не хранятся в базе данных.

Если посмотреть немного дальше, включив аудит на C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys папку, я заметил эту ошибку (частные данные запутаны):

Предмет:
    Идентификатор безопасности: MYDOMAIN\adfsroot$
    Имя учетной записи: adfsroot$
    Домен учетной записи: MYDOMAIN
    Идентификатор входа: 0xFFFFFFFF

Криптографические параметры:
    Имя поставщика: Поставщик хранилища ключей программного обеспечения Майкрософт
    Имя алгоритма: RSA
    Имя ключа: {UUID-HERE}
    Тип ключа: Машинный ключ.

Криптографическая операция:
    Операция: Создать ключ.
    Код возврата: 0x80090010

Это указывает на проблему с разрешением; программе не удалось создать ключ RSA при запуске. Он пытается получить доступ к файлу ключа машины, названному следующим образом. Предположим, что UUID ключа и UUID машины

12345678-90AB-CDEF-1234-567890ABCDEF
11223344-5566-7788-9900-AABBCCDDEEFF

Файлы вроде как называются:

1234567890ABCDEF1234567890ABCDEF_11223344-5566-7788-9900-AABBCCDDEEFF.sys

Содержит двоичное представление закрытого ключа в виде открытого текста, защищенное разрешениями NTFS. ADFS создает четыре таких файла, и у пользователя есть на это разрешение;

Однако, когда я проверяю один из четырех созданных файлов закрытого ключа, хотя у него есть правильный владелец МОЙ ДОМЕН\adfsroot$, у него нет правильных разрешений: действующие разрешения для adfsroot$ вообще нет доступа. (Что приводит к ошибке 102 выше).Очевидно, ADFS выбрасывает пресловутый ключ после того, как запирает дверь, или файловая система каким-то образом делает это из-за неправильной настройки Машинные ключи папка.

Как заставить эту плохо написанную программу работать?

Рейтинг:0
флаг mx

Проверь это Машинные ключи имеет правильные разрешения.

Чтобы решить проблему: я предоставил adfsroot использовать эти расширенные разрешения NTFS в корне Машинные ключи папка:

Список папок 
Чтение атрибутов
Чтение расширенных атрибутов
Создать файлы
Создать папки
Написать атрибуты
Напишите расширенные атрибуты
Разрешения на чтение

Убедитесь, что Относится к значение Эта папка, подпапки и файлы (для включения наследования). С использованием cacls или же icacls, запись будет:

МОЙ ДОМЕН\adfsroot$:(OI)(CI)(R,W)

По какой-то причине ADFS ведет себя неправильно, и значение по умолчанию, предоставленное документация не работает.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.