ฉันไม่สามารถเริ่มบริการ AD FS ได้ เนื่องจากได้รับการกำหนดค่าด้วยใบรับรองที่มีชุดส่วนขยาย X509 ที่ซับซ้อนมากเกินไปโดยไม่จำเป็น สิ่งนี้ทำให้บริการล้มเหลวโดยมีข้อผิดพลาด 102 ซึ่งเป็นข้อยกเว้นของอาร์กิวเมนต์ที่เป็นค่าว่าง เงียบ.
รายละเอียดข้อยกเว้น:
System.ArgumentNullException: ค่าต้องไม่เป็นค่าว่าง
ชื่อพารามิเตอร์: ใบรับรอง
ที่ System.IdentityModel.Tokens.X509SecurityToken..ctor (ใบรับรอง X509Certificate2, รหัสสายอักขระ, บูลีนโคลน, บูลีนแบบใช้แล้วทิ้ง)
ที่ Microsoft.IdentityServer.Service.Configuration.MSISSecurityTokenServiceConfiguration.Create (Boolean forSaml, Boolean 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 (Boolean requestAdditionalTime)
โอเค ฉันต้องเปลี่ยนใบรับรอง ค้นหาวิธีการทำ มีแหล่งข้อมูลมากมาย แต่ละคนต้องการให้คุณเปิดสแน็ปอิน AD FS MMC ซึ่งโพสต์ข้อผิดพลาด:
ADMIN0017: เกิดข้อยกเว้นขณะเชื่อมต่อกับบริการกำหนดค่า (...)
หรือ AD FS Windows Service ไม่ทำงาน
กล่าวอีกนัยหนึ่ง ADFS ทำสิ่งที่ฉันสามารถอธิบายได้เท่านั้น ใบ้อย่างไม่น่าเชื่อ. นั่นคือ
- อนุญาตให้ผู้ใช้กำหนดค่าในลักษณะที่จะไม่เริ่มทำงาน
- ไม่อนุญาตให้ผู้ใช้เปลี่ยนการกำหนดค่าหากไม่ได้ใช้งาน
มีคำสั่ง powershell ที่ทำสิ่งเดียวกัน
Set-AdfsCertificate -CertificateType Service-Communications -Thumbprint <วางหัวแม่มือฐานสิบหก>
นำไปสู่ความโง่เขลาแบบเดียวกัน:
Set-AdfsCertificate : ไม่สามารถเชื่อมต่อกับ net.tcp://localhost:1500/policy
เช่นเดียวกับคำสั่ง adfs powershell อื่น ๆ
แต่ที่แย่กว่านั้น การกำหนดค่าเป็นแบบป้านและลึกลับ มีเพียงวิธีเดียวเท่านั้นในการตั้งค่า certs ที่ดูเหมือนว่าจะใช้งานได้ และฉันหลงทางในส่วนขยายของคีย์, ส่วนขยายของคีย์เพิ่มเติม, ชื่อทางเลือก, วิธีการคีย์, การอนุญาตคอมพิวเตอร์, การอนุญาตผู้ใช้, การอนุญาตบัญชีบริการ, รายละเอียด pfx ของคีย์ส่วนตัว รุ่น pfx, รุ่นผู้ให้บริการ crypto และอื่นๆ เอกสารประกอบของ Microsoft ล้าสมัย 404 และ/หรือไม่สมบูรณ์
ดังนั้นฉันจึงต้องเปลี่ยนใบรับรองนี้สักสองสามโหลผ่านการลองผิดลองถูกจนกว่าจะมีบางอย่างติดอยู่วิธีง่ายๆ ในการเปลี่ยนใบรับรองที่ ADFS ใช้นั้นคืออะไร
- ไม่เกี่ยวข้องกับการใช้คอนโซล AD FS MMC วิธีนี้จะใช้ได้ก็ต่อเมื่อบริการสามารถเริ่มได้ ซึ่งไม่สามารถทำได้
- ไม่เกี่ยวข้องกับคำสั่ง PowerShell ของ ADFS ซึ่งน่าเสียดายที่จำเป็นต้องเรียกใช้บริการด้วย
แก้ไข: แม้แต่การติดตั้ง ADFS ใหม่ก็ยังทำได้ ไม่ แก้ไขปัญหา แม้ว่าจะเลือกฐานข้อมูลการกำหนดค่าอื่นก็ตาม ฉันยังคงติดอยู่ที่ข้อผิดพลาด 102 ดูเหมือนว่าการตั้งค่าใบรับรองไม่ได้ถูกจัดเก็บไว้ในฐานข้อมูล
มองไกลออกไปอีกเล็กน้อยโดยเปิดใช้งานการตรวจสอบบน C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys
โฟลเดอร์ ฉันสังเกตเห็นข้อผิดพลาดนี้ (รายละเอียดส่วนตัวสับสน):
เรื่อง:
รหัสความปลอดภัย: MYDOMAIN\adfsroot$
ชื่อบัญชี: adfsroot$
โดเมนบัญชี: MYDOMAIN
ID เข้าสู่ระบบ: 0xFFFFFFFF
พารามิเตอร์การเข้ารหัส:
ชื่อผู้ให้บริการ: ผู้ให้บริการที่เก็บคีย์ซอฟต์แวร์ของ Microsoft
ชื่ออัลกอริทึม: 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 สร้างไฟล์ดังกล่าวสี่ไฟล์ และผู้ใช้ได้รับอนุญาตให้ทำเช่นนั้น
อย่างไรก็ตาม เมื่อฉันตรวจสอบหนึ่งในสี่ไฟล์คีย์ส่วนตัวที่สร้างขึ้น ในขณะที่มีเจ้าของที่ถูกต้อง MYDOMAIN\adfsroot$
ไม่มีสิทธิ์ที่ถูกต้อง: สิทธิ์ที่มีประสิทธิภาพสำหรับ adfsroot$
ไม่สามารถเข้าถึงได้เลย (นำไปสู่ข้อผิดพลาด 102 ด้านบน)เห็นได้ชัดว่า ADFS กำลังโยนกุญแจที่เป็นที่เลื่องลือออกไปหลังจากล็อคประตู หรือระบบไฟล์กำลังทำเช่นนี้เนื่องจากกำหนดค่าผิดพลาด กุญแจเครื่อง
โฟลเดอร์
ฉันจะทำให้ซอฟต์แวร์ที่เขียนไม่ดีนี้ทำงานได้อย่างไร