联合身份验证服务私钥保护
简介
证书存储在 FAS 服务器上的注册表中。默认情况下,将通过 FAS 服务器的网络服务帐户方式存储关联的私钥并将其标记为不可导出。
有两种类型的私钥:
- 与注册机构 (RA) 证书关联的私钥(来自 Citrix_RegistrationAuthority 证书模板)。
- 与用户证书关联的私钥(来自 Citrix_SmartcardLogon 证书模板)。
实际上有两个 RA 证书:Citrix_RegistrationAuthority_ManualAuthorization(默认有效期为 24 小时)及 Citrix_RegistrationAuthority(默认有效期为两年)。
在 FAS 管理控制台中的初始设置过程的步骤 3 中,当管理员单击“授权”时,FAS 服务器会生成一个密钥对,并向 CA 发送针对 Citrix_RegistrationAuthority_ManualAuthorization 证书的证书签名请求 (CSR)。这是一个临时证书,默认有效期为 24 小时。CA 不会自动颁发此证书;必须在 CA 上由管理员手动授权颁发此证书。一旦向 FAS 服务器颁发证书,FAS 将使用 Citrix_RegistrationAuthority_ManualAuthorization 证书自动获取 Citrix_RegistrationAuthority 证书(默认有效期为两年)。一旦 Citrix_RegistrationAuthority_ManualAuthorization 获得 Citrix_RegistrationAuthority 证书,FAS 服务器将删除它的证书和密钥。
与 RA 证书关联的私钥特别敏感,因为 RA 证书策略允许任何拥有私钥的人员为在模板中配置的用户集颁发证书请求。因此,控制了此密钥的任何人都可作为用户集中的任何用户连接到环境。
可以通过使用下列项之一配置 FAS 服务器,以便按符合您所在组织的安全要求的方法保护私钥:
- 同时针对 RA 证书和用户证书私钥的 Microsoft 增强 RSA 和 AES 加密提供程序或 Microsoft 软件密钥存储提供程序。
- 针对 RA 证书私钥的含受信任的平台模块 (TPM) 芯片的 Microsoft 平台密钥存储提供程序,以及针对用户证书私钥的 Microsoft 增强 RSA 和 AES 加密提供程序或 Microsoft 软件密钥存储提供程序。
- 同时针对 RA 证书和用户证书私钥的硬件安全模块 (HSM) 供应商的加密服务或密钥存储提供程序与 HSM 设备。
私钥配置设置
配置 FAS 以使用下列三个选项之一。使用文本编辑器编辑 Citrix.Authentication.FederatedAuthenticationService.exe.config 文件。该文件默认情况下位于 FAS 服务器上的 Files\Citrix\Federated Authentication Service 文件夹中。
仅当服务启动时,FAS 才会读取此配置文件。如果更改了任何值,必须重新启动 FAS 才能反映新的设置。
按如下所示设置 Citrix.Authentication.FederatedAuthenticationService.exe.config 文件中的相关值:
Citrix.TrustFabric.ClientSDK.TrustAreaJoinParameters.ProviderLegacyCsp(在 CAPI 与 CNG API 之间切换)
值 | 备注 |
---|---|
true | 使用 CAPI API |
false(默认) | 使用 CNG API |
Citrix.TrustFabric.ClientSDK.TrustAreaJoinParameters.ProviderName(要使用的提供程序的名称)
值 | 备注 |
---|---|
Microsoft 增强 RSA 和 AES 加密提供程序 | 默认 CAPI 提供程序 |
Microsoft 软件密钥存储提供程序 | 默认 CNG 提供程序 |
Microsoft 平台密钥存储提供程序 | 默认 TPM 提供程序。请注意,建议不要将 TPM 用于用户密钥。只应将 TPM 用于 RA 密钥。如果计划在虚拟化环境中运行 FAS 服务器,请咨询您的 TPM 和虚拟机管理程序供应商以确认是否支持虚拟化。 |
HSM_Vendor CSP/密钥存储提供程序 | 由 HSM 供应商提供。对于不同的供应商,该值有所不同。如果您计划在虚拟化环境中运行 FAS 服务器,请咨询您的 HSM 供应商以确认是否支持虚拟化。 |
Citrix.TrustFabric.ClientSDK.TrustAreaJoinParameters.ProviderType(仅在使用 CAPI API 时需要)
值 | 备注 |
---|---|
24 | 默认。请参阅 Microsoft KeyContainerPermissionAccessEntry.ProviderType Property PROV_RSA_AES 24。应该始终为 24,除非您使用 CAPI 与 HSM 并且 HSM 提供商另有规定。 |
Citrix.TrustFabric.ClientSDK.TrustAreaJoinParameters.KeyProtection(当 FAS 需要执行私钥操作时,将使用在此处指定的值)控制私钥的“exportable”标志。 允许使用 TPM 密钥存储(如果硬件支持)。
值 | 备注 |
---|---|
NoProtection | 可以导出私钥。 |
GenerateNonExportableKey | 默认。无法导出私钥。 |
GenerateTPMProtectedKey | 将使用 TPM 管理私钥。通过您在 ProviderName 中指定的 ProviderName(例如 Microsoft 平台密钥存储提供程序)存储私钥 |
Citrix.TrustFabric.ClientSDK.TrustAreaJoinParameters.KeyLength(指定私钥的大小,单位为位)
值 | 备注 |
---|---|
2048 | 默认值。也可以使用 1024 或 4096。 |
下方以图形方式显示了该配置文件的设置(默认安装设置显示为红色):
配置方案示例
示例 1
此示例介绍通过使用 Microsoft 软件密钥存储提供程序存储的 RA 证书私钥和用户证书私钥
这是默认的安装后配置。无需进行其他私钥配置。
示例 2
此示例介绍通过 Microsoft 平台密钥存储提供程序存储在 FAS 服务器主板的硬件 TPM 中的 RA 证书私钥,以及通过 Microsoft 软件密钥存储提供程序存储的用户证书私钥。
此方案假设您已根据 TPM 制造商文档在 BIOS 中启用 FAS 服务器主板上的 TPM,并已在 Windows 中初始化 TPM;请参阅 https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-vista/cc749022(v=ws.10)?redirectedfrom=MSDN。
使用 PowerShell(建议)
可使用 PowerShell 以脱机方式请求 RA 证书。对于不希望其 CA 通过联机 CSR 颁发 RA 证书的组织,建议使用此方法。无法使用 FAS 管理控制台生成脱机 RA CSR。
步骤 1:在使用管理控制台对 FAS 配置进行初始设置期间,只完成前两个步骤:“部署证书模板”和“设置证书颁发机构”。
步骤 2:在 CA 服务器中,添加证书模板 MMC 管理单元。右键单击 Citrix_RegistrationAuthority_ManualAuthorization 模板并选择复制模板。
选择 General(常规)选项卡。更改名称和有效期。在此示例中,名称为 Offline_RA,有效期为 2 年:
步骤 3:在 CA 服务器中,添加 CA MMC 管理单元。右键单击 Certificate Templates(证书模板)。选择 New(新建),然后单击 Certificate Template to Issue(要颁发证书模板)。选择刚才创建的模板。
步骤 4:在 FAS 服务器中加载以下 PowerShell cmdlet:
Add-PSSnapin Citrix.Authentication.FederatedAuthenticationService.V1
步骤 5:在 FAS 服务器的 TPM 内部生成 RSA 密钥,并通过在 FAS 服务器上输入以下 PowerShell cmdlet 来创建 CSR。注意:有些 TPM 会限制密钥长度。默认密钥长度为 2048 位。请务必指定受硬件支持的密钥长度。
New-FasAuthorizationCertificateRequest -UseTPM $true -address <FAS 的 FQDN>
例如:
New-FasAuthorizationCertificateRequest -UseTPM $true -address fashsm.auth.net
将显示以下内容:
备注:
- 在后续步骤中,必须使用 Id GUID(在此示例中为“5ac3d8bd-b484-4ebe-abf8-4b2cfd62ca39”)。
- 将此 PowerShell cmdlet 视为一次性的“覆盖”,用于生成 RA 证书的私钥。
- 当运行此 cmdlet 时,将检查在 FAS 服务启动时从配置文件读取的值,以确定要使用的密钥长度(默认为 2048)。
- 由于在此手动 PowerShell 发起的 RA 证书私钥操作时会将 -UseTPM 设置为 $true,因此系统将忽略文件中与使用 TPM 时所需设置不匹配的值。
- 运行此 cmdlet 不会更改配置文件中的任何设置。
- 在随后的自动 FAS 发起的用户证书私钥操作中,将使用在 FAS 服务启动时从此文件读取的值。
- 此外,当 FAS 服务器颁发用户证书以生成受 TPM 保护的用户证书私钥时,也可以在此配置文件中将 KeyProtection 值设置为 GenerateTPMProtectedKey。
要验证用于生成密钥对的 TPM,请在生成密钥对时,在 FAS 服务器上的 Windows 事件查看器中查看应用程序日志。
记录“[TPM: True]”
后跟:
记录“提供程序:[CNG] Microsoft 平台加密提供程序”
步骤 6:将证书请求部分复制到文本编辑器,并将其保存为磁盘上的文本文件。
步骤 7:通过在 FAS 服务器上的 PowerShell 中键入以下内容将 CSR 提交到 CA:
certreq -submit -attrib “certificatetemplate:<步骤 2 中的证书模板>” <步骤 6 中的证书请求文件>
例如:
certreq -submit -attrib “certificatetemplate:Offline_RA” C:\Users\Administrator.AUTH\Desktop\usmcertreq.txt
将显示以下内容:
此时,可能会出现“Certification Authority List”(证书颁发机构列表)窗口。此示例中的 CA 已同时启用 HTTP(顶部)和 DCOM(底部)注册。选择 DCOM 选项(如果有):
在已 CA 指定后,PowerShell 将显示 RequestID:
步骤 8:在 CA 服务器上,在 CA MMC 管理单元中单击 Pending Requests(挂起的请求)。记录请求 ID。然后右键单击该请求,并选择 Issue(颁发)。
步骤 9:选择 Issued Certificates(已颁发的证书节点)。找到刚颁发的证书(请求 ID 应匹配)。双击以打开证书。选择 Details(详细信息)选项卡。单击 Copy to File(复制到文件)。将启动“证书导出向导”。单击下一步。为文件格式选择下列选项:
格式必须是“Cryptographic Message Syntax Standard – PKCS #7 Certificates (.P7B)”,并且必须选中“Include all certificates in the certification path if possible”(如果可能则包括证书路径中的所有证书)。
步骤 10:将导出的证书文件复制到 FAS 服务器。
步骤 11:通过在 FAS 服务器中输入以下 PowerShell cmdlet 将 RA 证书导入 FAS 服务器注册表:
例如:
将显示以下内容:
步骤 12:关闭然后重新启动 FAS 管理控制台。
请注意,步骤“授权此服务”已变为绿色,并且现在显示为“Deauthorize this Service”(取消授权此服务)。下面的条目指示 “Authorized by: Offline CSR”(授权者: 脱机 CSR)
步骤 13: 在 FAS 管理控制台中选择 User Roles(用户角色)选项卡,并编辑主要 FAS 文章中所述的设置。
注意:通过管理控制台取消授权 FAS 将会删除用户规则。
使用 FAS 管理控制台
FAS 管理控制台无法执行脱机 CSR,因此不建议使用它,除非您的组织允许为 RA 证书执行联机 CSR。
当执行 FAS 初始设置步骤时,在部署证书模板和设置 CA 之后、授权服务(配置程序中的步骤 3)之前:
步骤 1:通过更改下列行来编辑配置文件,如下所示:
该文件现在应显示如下:
一些 TPM 会限制密钥长度。默认密钥长度为 2048 位。请务必指定受硬件支持的密钥长度。
步骤 2:授权服务。
步骤 3:从 CA 服务器手动发出挂起证书请求。获得 RA 证书后,安装过程中的步骤 3 将在管理控制台中显示为绿色。此时,将在 TPM 中生成 RA 证书的私钥。默认情况下该证书的有效期为 2 年。
步骤 4:将配置文件恢复为如下所示:
注意:虽然 FAS 可使用 TPM 保护的密钥来生成用户证书,但是 TPM 硬件对于大型部署速度可能太慢。
步骤 5: 重新启动 Citrix 联合身份验证服务。这将强制此服务重新读取配置文件,并反映更改后的值。随后的自动私钥操作会影响用户证书密钥;这些操作不会在 TPM 中存储私钥,而会使用 Microsoft Software Key Storage Provider。
步骤 6: 在 FAS 管理控制台中选择“User Roles”(用户角色)选项卡,并按主要 FAS 文章中所述编辑设置。
注意:通过管理控制台取消授权 FAS 将会删除用户规则。
示例 3
此示例包括 HSM 中存储的 RA 证书私钥和用户证书私钥。此示例假设已配置 HSM。您的 HSM 将具有一个提供程序名称,例如“HSM_Vendor’s Key Storage Provider”。
如果计划在虚拟化环境中运行 FAS 服务器,请向您的 HSM 供应商咨询有关虚拟机管理程序支持的信息。
步骤 1. 在使用管理控制台对 FAS 配置进行初始设置期间,只完成了前两个步骤:“部署证书模板”和“设置证书颁发机构”。
步骤 2:请阅读您的 HSM 供应商文档,以确定 HSM ProviderName 值应是什么。如果 HSM 使用的是 CAPI,则文档中的提供程序可能称为加密服务提供程序 (CSP)。如果 HSM 使用的是 CNG,则文提供程序可能称为 Key Storage Provider (KSP)。
步骤 3:编辑配置文件,如下所示:
该文件现在应显示如下:
此方案假设 HSM 使用是的 CNG,因此 ProviderLegacyCsp 值设置为 false。如果 HSM 使用是的 CAPI,则 ProviderLegacyCsp 值应设置为 true。请阅读您的 HSM 供应商文档,以确定 HSM 使用的是 CAPI 还是 CNG。此外,请阅读 HSM 供应商文档了解在生成非对称 RSA 密钥时受支持的密钥长度。在此示例中,密钥长度设置为默认值 2048 位。确保指定的密钥长度受硬件支持。
步骤 4:重新启动 Citrix 联合身份验证服务,以从配置文件中读取值。
步骤 5:在 HSM 内生成 RSA 密钥,并通过在 FAS 管理控制台的“Initial Setup”(初始设置)选项卡上单击 Authorize(授权)来创建 CSR。
步骤 6:要验证是否已在 HSM 中生成密钥对,请检查 Windows 事件日志中的应用程序条目:
注意: [提供程序:[CNG] HSM_Vendor’s Key Storage Provider]
步骤 7:在 CA 服务器上的 CA MMC 中,选择 Pending Requests(挂起的请求)节点:
右键单击该请求,并选择 Issue(颁发)。
请注意,步骤“授权此服务”已变为绿色,并且现在显示为“Deauthorize this Service”(取消授权此服务)。下面的条目指示 “Authorized by: [<CA Name>]”(授权者: [<CA 名称>])
步骤 8:在 FAS 管理控制台中选择 User Roles(用户角色)选项卡,并按主要 FAS 文章中所述编辑设置。
注意:通过管理控制台取消授权 FAS 将会删除用户规则。
FAS 存储证书
FAS 不使用 FAS 服务器上的 Microsoft 证书存储来存储证书。它将使用注册表。
注意: 当使用 HSM 存储私钥时,HSM 容器通过 GUID 进行标识。HSM 中的私钥 GUID 与注册表中相当证书的 GUID 匹配。
要确定 GUID RA 证书,请在 FAS 服务器中输入以下 PowerShell cmdlet:
Add-pssnapin Citrix.a\*
Get-FasAuthorizationCertificate –address <FAS 服务器 FQDN>
例如:
Get-FasAuthorizationCertificate –address cg-fas-2.auth.net
要获得用户证书列表,请输入:
Get-FasUserCertificate –address <FAS 服务器 FQDN>
例如:
Get-FasUserCertificate –address cg-fas-2.auth.net
相关信息
- 联合身份验证服务一文是 FAS 安装和配置的主要参考资料。
- 通用 FAS 部署在联合身份验证服务体系结构概述一文中加以概括。
- 联合身份验证服务配置和管理一文中介绍了其他“方法”文章。