Я не могу запустить службу 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?
- Не требует использования консоли AD FS MMC. Это будет работать только в том случае, если служба может запуститься, чего она не может.
- Не включает команды 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 выбрасывает пресловутый ключ после того, как запирает дверь, или файловая система каким-то образом делает это из-за неправильной настройки Машинные ключи
папка.
Как заставить эту плохо написанную программу работать?