Nu pot porni serviciul AD FS. Acest lucru se datorează faptului că este configurat cu un certificat cu un set incorect de extensii X509 supracomplicate inutil. Acest lucru face ca serviciul să eșueze cu eroarea 102, care este o excepție a argumentului nul. În tăcere.
Detalii excepție:
System.ArgumentNullException: Valoarea nu poate fi nulă.
Nume parametru: certificat
la System.IdentityModel.Tokens.X509SecurityToken..ctor (certificat X509Certificate2, ID șir, clonă booleană, boolean de unică folosință)
la Microsoft.IdentityServer.Service.Configuration.MSISSecurityTokenServiceConfiguration.Create(Boolean pentru Saml, Boolean pentruPassive)
la Microsoft.IdentityServer.Service.Policy.PolicyServer.Service.ProxyPolicyServiceHost.ConfigureWIF()
la Microsoft.IdentityServer.Service.SecurityTokenService.MSISConfigurableServiceHost.Configure()
la Microsoft.IdentityServer.Service.Policy.PolicyServer.Service.ProxyPolicyServiceHost.Create()
la Microsoft.IdentityServer.ServiceHost.STSService.StartProxyPolicyStoreService(ServiceHostManager serviceHostManager)
la Microsoft.IdentityServer.ServiceHost.STSService.OnStartInternal(Boolean requestAdditionalTime)
Bine, deci trebuie să schimb certificatul. Căutând cum să faci asta, există multe resurse. Fiecare dorește să deschideți snap-in-ul AD FS MMC. Care postează eroarea:
ADMIN0017: A apărut o excepție în timpul conectării la serviciul de configurare (...)
sau Serviciul Windows AD FS nu rulează.
Cu alte cuvinte, ADFS face ceva ce pot doar să descriu incredibil de prost. Acesta este
- Permițând utilizatorului să-l configureze într-un mod în care să nu pornească.
- Nu permite utilizatorului să schimbe configurația dacă nu rulează.
Există o comandă powershell care face același lucru;
Set-AdfsCertificate -CertificateType Service-Communications -Thumbprint <paste hex thumb>
Duc la exact aceeași prostie:
Set-AdfsCertificate : nu s-a putut conecta la net.tcp://localhost:1500/policy
Același lucru este valabil și pentru alte comenzi adfs powershell.
Dar: Cel mai rău dintre toate, configurația este obtuză și arcană. Doar o modalitate specială de a configura certificatele pare să funcționeze și sunt pierdut într-o mare de extensii de chei, extensii de chei extinse, nume alternative, metode de cheie, permisiuni pentru computer, permisiuni de utilizator, permisiuni pentru contul de serviciu, detalii pfx pentru chei private, versiuni pfx, versiuni ale furnizorului de servicii cripto și multe altele. Documentația Microsoft este învechită, 404 și/sau incompletă.
Așa că trebuie să înlocuiesc acest certificat de câteva zeci de ori prin încercare și eroare până când ceva se lipește.Care este o modalitate ușoară de a schimba certificatul pe care îl folosește ADFS
- Nu implică utilizarea consolei AD FS MMC. Acest lucru va funcționa numai dacă serviciul poate porni, ceea ce nu poate.
- Nu implică comenzi ADFS powershell, care, din păcate, necesită, de asemenea, să ruleze serviciul.
Editare: chiar și reinstalarea ADFS o face nu rezolva problema. Chiar dacă este selectată o altă bază de date de configurare. Sunt încă blocat la eroarea 102. Se pare că setările certificatului nu sunt de fapt stocate în baza de date.
Privind puțin mai departe, prin activarea auditării pe C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys
folder, am observat această eroare (detalii private obscucate):
Subiect:
ID de securitate: MYDOMAIN\adfsroot$
Numele contului: adfsroot$
Domeniul contului: MYDOMAIN
ID de conectare: 0xFFFFFFF
Parametri criptografici:
Nume furnizor: Microsoft Software Key Storage Provider
Nume algoritm: RSA
Nume cheie: {UUID-HERE}
Tip cheie: cheie pentru mașină.
Operație criptografică:
Operație: Creare cheie.
Cod de returnare: 0x80090010
Acest lucru indică o problemă de permisiune; programul nu a putut crea o cheie RSA ca parte a pornirii sale. Încearcă să acceseze un fișier cu cheia mașinii, numit după cum urmează. Să presupunem că UUID-ul cheie și UUID-ul mașinii sunt
12345678-90AB-CDEF-1234-567890ABCDEF
11223344-5566-7788-9900-AABBCCDDEEFF
Fișierele par să fie numite astfel:
1234567890ABCDEF1234567890ABCDEF_11223344-5566-7788-9900-AABBCCDDEEFF.sys
Conținând o reprezentare binară în text simplu a cheii private, protejată de permisiuni NTFS. ADFS generează patru astfel de fișiere, iar utilizatorul său are permisiunea de a face acest lucru;
Cu toate acestea, când inspectez unul dintre cele patru fișiere cu chei private create, în timp ce are proprietarul corect al DOMENIUL MEU\adfsroot$
, nu are permisiuni corecte: permisiuni efective pentru adfsroot$
nu au acces deloc. (Ducand la eroarea 102 de mai sus).Aparent, ADFS aruncă cheia proverbială după încuierea ușii sau sistemul de fișiere face acest lucru într-un fel din cauza configurării greșite a MachineKeys
pliant.
Cum fac ca acest software scris prost să ruleze?