Puncte:0

Cum ocolesc manual certificatul AD FS catch-22

drapel mx

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

  1. Nu implică utilizarea consolei AD FS MMC. Acest lucru va funcționa numai dacă serviciul poate porni, ceea ce nu poate.
  2. 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?

Puncte:0
drapel mx

Verifică asta MachineKeys are permisiunile corecte.

Pentru a rezolva problema: am acordat adfsroot utilizați aceste permisiuni NTFS avansate, pe rădăcină MachineKeys pliant:

Listă folder 
Citiți atribute
Citiți atributele extinse
Creați fișiere
Creați foldere
Scrieți atribute
Scrieți atribute extinse
Permisiuni de citire

Asigurați-vă că Se aplică la valoarea este Acest folder, subdosare și fișiere (pentru a permite moștenirea). Folosind cacls sau icacls, notația ar fi:

DOMENIUL MEU\adfsroot$:(OI)(CI)(R,W)

Din anumite motive, ADFS se comportă greșit aici și valoarea implicită este furnizată de documentație nu funcționează.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.