Tôi không thể bắt đầu dịch vụ AD FS. Điều này là do nó được định cấu hình bằng chứng chỉ có tập hợp các tiện ích mở rộng X509 quá phức tạp không cần thiết. Điều này khiến dịch vụ không thành công với lỗi 102, đây là một ngoại lệ đối số null. Thầm lặng.
Chi tiết ngoại lệ:
System.ArgumentNullException: Giá trị không được rỗng.
Tên tham số: chứng chỉ
tại System.IdentityModel.Tokens.X509SecurityToken..ctor(Chứng chỉ X509Certificate2, String id, Boolean clone, Boolean dùng một lần)
tại Microsoft.IdentityServer.Service.Configuration.MSISSecurityTokenServiceConfiguration.Create(Boolean forSaml, Boolean forPassive)
tại Microsoft.IdentityServer.Service.Policy.PolicyServer.Service.ProxyPolicyServiceHost.ConfigureWIF()
tại Microsoft.IdentityServer.Service.SecurityTokenService.MSISConfigurableServiceHost.Configure()
tại Microsoft.IdentityServer.Service.Policy.PolicyServer.Service.ProxyPolicyServiceHost.Create()
tại Microsoft.IdentityServer.ServiceHost.STSService.StartProxyPolicyStoreService(ServiceHostManager serviceHostManager)
tại Microsoft.IdentityServer.ServiceHost.STSService.OnStartInternal(Boolean requestAdditionalTime)
Được rồi, vì vậy tôi cần thay đổi chứng chỉ. Tìm kiếm cách để làm điều đó, có rất nhiều tài nguyên. Mỗi người muốn bạn mở phần đính vào AD FS MMC. Bài viết nào báo lỗi:
ADMIN0017: Đã xảy ra ngoại lệ khi kết nối với dịch vụ cấu hình (...)
hoặc Dịch vụ Windows AD FS không chạy.
Nói cách khác, ADFS thực hiện điều mà tôi chỉ có thể mô tả là cực kỳ ngu ngốc. Đó là
- Cho phép người dùng định cấu hình theo cách mà nó sẽ không khởi động.
- Không cho phép người dùng thay đổi cấu hình nếu nó không chạy.
Có một lệnh powershell thực hiện điều tương tự;
Set-AdfsCertificate -CertificateType Service-Communications -Thumbprint <paste hex thumb>
Dẫn đến cùng một sự ngớ ngẩn:
Set-AdfsCertificate : Không thể kết nối với net.tcp://localhost:1500/policy
Điều tương tự cũng xảy ra với các lệnh powershell adfs khác.
Nhưng: Tệ nhất là cấu hình khó hiểu và phức tạp. Dường như chỉ có một cách cụ thể để thiết lập chứng chỉ hoạt động và tôi bị lạc trong biển tiện ích mở rộng khóa, tiện ích mở rộng khóa mở rộng, tên thay thế, phương pháp khóa, quyền máy tính, quyền người dùng, quyền tài khoản dịch vụ, chi tiết pfx khóa riêng, phiên bản pfx, phiên bản nhà cung cấp dịch vụ tiền điện tử, v.v. Tài liệu của Microsoft đã lỗi thời, 404'd và/hoặc không đầy đủ.
Vì vậy, tôi cần phải thay thế chứng chỉ này vài chục lần thông qua thử và sai cho đến khi có thứ gì đó dính vào.Cách dễ dàng để thay đổi chứng chỉ mà ADFS sử dụng là gì
- Không liên quan đến việc sử dụng bảng điều khiển AD FS MMC. Điều này sẽ chỉ hoạt động nếu dịch vụ có thể bắt đầu, dịch vụ này không thể.
- Không liên quan đến các lệnh powershell ADFS, không may là điều này cũng yêu cầu dịch vụ phải chạy.
Chỉnh sửa: Ngay cả khi cài đặt lại ADFS không phải giải quyết vấn đề. Ngay cả khi một cơ sở dữ liệu cấu hình khác được chọn. Tôi vẫn gặp lỗi 102. Có vẻ như cài đặt chứng chỉ không thực sự được lưu trữ trong cơ sở dữ liệu.
Nhìn xa hơn một chút, bằng cách cho phép kiểm toán trên C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys
thư mục, tôi nhận thấy lỗi này (các chi tiết riêng tư bị xáo trộn):
Vấn đề:
ID bảo mật: MYDOMAIN\adfsroot$
Tên tài khoản: adfsroot$
Tên miền tài khoản: MYDOMAIN
ID đăng nhập: 0xFFFFFFF
Tham số mật mã:
Tên nhà cung cấp: Nhà cung cấp lưu trữ khóa phần mềm của Microsoft
Tên thuật toán: RSA
Tên khóa: {UUID-ĐÂY}
Loại chìa khóa: Chìa khóa máy.
Hoạt động mật mã:
Thao tác: Tạo Key.
Mã trả về: 0x80090010
Điều này chỉ ra một vấn đề về quyền; chương trình không thể tạo khóa RSA như một phần của quá trình khởi động. Nó đang cố truy cập một tệp khóa máy, có tên như sau. Giả sử khóa UUID và máy UUID là
12345678-90AB-CDEF-1234-567890ABCDEF
11223344-5566-7788-9900-AABBCCDDEEFF
Các tập tin dường như được đặt tên là:
1234567890ABCDEF1234567890ABCDEF_11223344-5566-7788-9900-AABBCCDDEEFF.sys
Chứa một biểu diễn nhị phân văn bản gốc của khóa riêng, được bảo vệ bởi các quyền NTFS. ADFS tạo bốn tệp như vậy và người dùng của nó có quyền làm như vậy;
Tuy nhiên, khi tôi kiểm tra một trong bốn tệp khóa riêng được tạo, trong khi nó có đúng chủ sở hữu của MYDOMAIN\adfsroot$
, nó không có quyền chính xác: quyền hiệu quả cho adfsroot$
không có quyền truy cập nào cả. (Dẫn đến lỗi 102 ở trên).Rõ ràng ADFS đang ném chìa khóa tục ngữ đi sau khi khóa cửa hoặc hệ thống tệp đang thực hiện việc này theo một cách nào đó do nó định cấu hình sai MáyPhím
thư mục.
Làm cách nào để chạy phần mềm được viết dở này?