私钥保护
简介
- 证书存储在 FAS 服务器上的嵌入式数据库中。关联的私钥通过 FAS 服务器的网络服务帐户存储,并且默认标记为不可导出。
私钥有两种类型:
- 与注册机构证书关联的私钥,来自 Citrix_RegistrationAuthority 证书模板。
-
与用户证书关联的私钥,来自 Citrix_SmartcardLogon 证书模板。
- 实际上有两种注册机构证书:Citrix_RegistrationAuthority_ManualAuthorization(默认有效期为 24 小时)和 Citrix_RegistrationAuthority(默认有效期为两年)。
在 Federated Authentication Service (FAS) 管理控制台的初始设置选项卡中,当您单击授权时,FAS 服务器会生成一个密钥对,并向证书颁发机构发送一个 Citrix_RegistrationAuthority_ManualAuthorization 证书的证书签名请求。这是一个临时证书,默认有效期为 24 小时。证书颁发机构不会自动颁发此证书;其颁发必须由管理员在证书颁发机构上手动授权。一旦证书颁发给 FAS 服务器,FAS 将使用 Citrix_RegistrationAuthority_ManualAuthorization 证书自动获取 Citrix_RegistrationAuthority 证书(默认有效期为两年)。FAS 服务器在获取 Citrix_RegistrationAuthority 证书后,会立即删除 Citrix_RegistrationAuthority_ManualAuthorization 的证书和密钥。
与注册机构证书关联的私钥特别敏感,因为注册机构证书策略允许拥有私钥的任何人针对模板中配置的用户集颁发证书请求。因此,控制此密钥的任何人都可以以该组中的任何用户身份连接到环境。
可以配置 FAS 服务器,以符合您组织安全要求的方式保护私钥,方法是使用以下选项之一:
- Microsoft Enhanced RSA and AES Cryptographic Provider 或 Microsoft Software Key Storage Provider,用于注册机构证书和用户证书的私钥。
- Microsoft Platform Key Storage Provider 和受信任平台模块 (TPM) 芯片,用于注册机构证书的私钥;以及 Microsoft Enhanced RSA and AES Cryptographic Provider 或 Microsoft Software Key Storage Provider,用于用户证书的私钥。
- 硬件安全模块 (HSM) 供应商的加密服务或密钥存储提供程序和 HSM 设备,用于注册机构证书和用户证书的私钥。
私钥配置设置
将 FAS 配置为使用这三个选项之一。使用文本编辑器编辑 Citrix.Authentication.FederatedAuthenticationService.exe.config 文件。该文件的默认位置是 FAS 服务器上的 Program Files\Citrix\Federated Authentication Service 文件夹。

FAS 仅在服务启动时读取配置文件。如果更改了任何值,则必须重新启动 FAS 才能反映新设置。
按如下方式在 Citrix.Authentication.FederatedAuthenticationService.exe.config 文件中设置相关值:
Citrix.TrustFabric.ClientSDK.TrustAreaJoinParameters.ProviderLegacyCsp(在 CAPI 和 CNG API 之间切换)
| 值 | 注释 |
|---|---|
| true | 使用 CAPI API |
| false (default) | 使用 CNG API |
Citrix.TrustFabric.ClientSDK.TrustAreaJoinParameters.ProviderName(要使用的提供程序名称)
| 值 | 注释 |
|---|---|
| Microsoft Enhanced RSA and AES Cryptographic Provider | 默认 CAPI 提供程序 |
| Microsoft Software Key Storage Provider | 默认 CNG 提供程序 |
| Microsoft Platform Key Storage Provider | 默认 TPM 提供程序。请注意,不建议将 TPM 用于用户密钥。仅将 TPM 用于注册机构密钥。如果您计划在虚拟化环境中运行 FAS 服务器,请咨询您的 TPM 和虚拟机管理程序供应商,了解是否支持虚拟化。 |
| HSM_Vendor CSP/Key Storage Provider | 由 HSM 供应商提供。该值因供应商而异。如果您计划在虚拟化环境中运行 FAS 服务器,请咨询您的 HSM 供应商,了解是否支持虚拟化。 |
Citrix.TrustFabric.ClientSDK.TrustAreaJoinParameters.ProviderType(仅在 CAPI API 的情况下需要)
| 值 | 注释 |
|---|---|
| 24 | 默认值。指 Microsoft KeyContainerPermissionAccessEntry.ProviderType 属性 PROV_RSA_AES 24。应始终为 24,除非您将 HSM 与 CAPI 结合使用且 HSM 供应商另有规定。 |
Citrix.TrustFabric.ClientSDK.TrustAreaJoinParameters.KeyProtection(当 FAS 需要执行私钥操作时,它会使用此处指定的值)控制私钥的“可导出”标志。如果硬件支持,则允许使用 TPM 密钥存储。
| 值 | 注释 |
|---|---|
| NoProtection | 私钥可以导出。 |
| GenerateNonExportableKey | 默认值。私钥无法导出。 |
| GenerateTPMProtectedKey | 私钥将使用 TPM 进行管理。私钥通过您在 ProviderName 中指定的 ProviderName 存储(例如,Microsoft Platform Key Storage Provider) |
Citrix.TrustFabric.ClientSDK.TrustAreaJoinParameters.KeyLength(指定私钥的大小(以位为单位))
| 值 | 注释 |
|---|---|
| 2048 | 默认值。也可以使用 1024 或 4096。 |
配置文件设置以图形方式表示如下(安装默认值以红色显示):

配置方案示例
示例 1
此示例涵盖使用 Microsoft Software Key Storage Provider 存储的注册机构证书私钥和用户证书私钥
这是默认的安装后配置。无需额外的私钥配置。
示例 2
本示例展示了注册机构证书私钥通过 Microsoft 平台密钥存储提供程序存储在 FAS 服务器主板的硬件 TPM 中,以及用户证书的私钥使用 Microsoft 软件密钥存储提供程序存储。
此场景假设您的 FAS 服务器主板上的 TPM 已根据 TPM 制造商的文档在 BIOS 中启用,并在 Windows 中进行了初始化;请参阅 https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-vista/cc749022(v=ws.10)。
使用 FAS 管理控制台
FAS 管理控制台无法执行离线证书签名请求,因此不建议使用它,除非您的组织允许对注册机构证书进行在线证书签名请求。
在执行初始 FAS 设置时,在部署证书模板和设置证书颁发机构之后,但在授权服务之前(配置序列中的步骤 3):
步骤 1: 如下更改以下行以编辑配置文件:

文件现在应如下所示:

某些 TPM 限制密钥长度。默认密钥长度为 2048 位。确保指定硬件支持的密钥长度。
步骤 2: 重新启动 Citrix Federated Authentication Service 以读取配置文件中的值。
步骤 3: 授权服务。
步骤 4: 从证书颁发机构服务器手动颁发挂起的证书请求。获取注册机构证书后,管理控制台中的设置序列中的步骤 3 将变为绿色。此时,注册机构证书的私钥将在 TPM 中生成。默认情况下,证书有效期为 2 年。
为确认注册机构证书的私钥已正确存储在 TPM 中,请使用以下 PowerShell 命令。如果注册机构证书的私钥存储在 TPM 中,则 PrivateKeyProvider 字段将设置为 Microsoft Platform Crypto Provider:
Add-PSSnapin Citrix.Authentication.FederatedAuthenticationService.V1
Get-FasAuthorizationCertificate -FullCertInfo -Address localhost
<!--NeedCopy-->
步骤 5: 将配置文件改回如下所示:

注意:
尽管 FAS 可以生成具有 TPM 保护密钥的用户证书,但 TPM 硬件对于大型部署可能太慢。
步骤 6: 重新启动 FAS。这会强制服务重新读取配置文件并反映更改的值。随后的自动私钥操作将影响用户证书密钥;这些操作不会将私钥存储在 TPM 中,而是使用 Microsoft Software Key Storage Provider。
步骤 7: 选择 FAS 管理控制台中的规则选项卡,并按照安装和配置中所述编辑设置。
使用 PowerShell
可以使用 PowerShell 离线请求注册机构证书。这适用于不希望其证书颁发机构通过在线证书签名请求颁发注册机构证书的组织。您无法使用 FAS 管理控制台进行离线注册机构证书签名请求。
步骤 1: 在使用管理控制台进行初始 FAS 配置期间,仅完成前两个步骤:“部署证书模板”和“设置证书颁发机构”。

步骤 2: 在您的证书颁发机构服务器上,添加“证书模板”MMC 管理单元。右键单击 Citrix_RegistrationAuthority_ManualAuthorization 模板,并选择复制模板。
选择常规选项卡。更改名称和有效期。在此示例中,名称为 Offline_RA,有效期为 2 年:

步骤 3: 在您的证书颁发机构服务器上,添加“证书颁发机构”MMC 管理单元。右键单击证书模板。选择新建,然后单击要颁发的证书模板。选择您刚刚创建的模板。
步骤 4: 在 FAS 服务器上加载以下 PowerShell cmdlet:
Add-PSSnapin Citrix.Authentication.FederatedAuthenticationService.V1
步骤 5: 在 FAS 服务器的 TPM 中生成 RSA 密钥对,并通过在 FAS 服务器上输入以下 PowerShell cmdlet 来创建证书签名请求。注意: 某些 TPM 限制密钥长度。默认密钥长度为 2048 位。请务必指定硬件支持的密钥长度。
New-FasAuthorizationCertificateRequest -UseTPM $true -address \<FQDN of FAS Server>
例如:
New-FasAuthorizationCertificateRequest -UseTPM $true -address fashsm.auth.net
显示以下内容:

注意:
- Id GUID(在此示例中为“5ac3d8bd-b484-4ebe-abf8-4b2cfd62ca39”)在后续步骤中是必需的。
- 可将此 PowerShell cmdlet 视为用于生成注册机构证书私钥的一次性“覆盖”。
- 运行此 cmdlet 时,将检查 FAS 启动时从配置文件中读取的值,以确定要使用的密钥长度(默认值为 2048)。
- 由于在此手动 PowerShell 启动的注册机构证书私钥操作中,-UseTPM 设置为 $true,因此系统将忽略文件中与使用 TPM 所需设置不匹配的值。
- 运行此 cmdlet 不会更改配置文件中的任何设置。
- 在随后的自动 FAS 启动的用户证书私钥操作期间,将使用 FAS 启动时从文件中读取的值。
- 也可以在 FAS 服务器颁发用户证书时将配置文件中的 KeyProtection 值设置为 GenerateTPMProtectedKey,以生成受 TPM 保护的用户证书私钥。
为验证 TPM 是否用于生成密钥对,请查看 FAS 服务器上 Windows 事件查看器中的应用程序日志,在生成密钥对时。

注意: “[TPM: True]”

注意: “Provider: [CNG] Microsoft Platform Crypto Provider”
步骤 6: 将证书请求部分复制到文本编辑器中,并将其保存为文本文件到磁盘。

- 步骤 7: 在 FAS 服务器上,在 PowerShell 中键入以下内容,将证书签名请求提交给您的证书颁发机构:
certreq -submit -attrib "certificatetemplate:\<步骤 2 中的证书模板\>" \<步骤 6 中的证书请求文件\>
例如:
certreq -submit -attrib "certificatetemplate:Offline_RA" C:\Users\Administrator.AUTH\Desktop\usmcertreq.txt
将显示以下内容:

此时可能会出现“证书颁发机构列表”窗口。此示例中的证书颁发机构同时启用了 HTTP(顶部)和 DCOM(底部)注册。如果可用,请选择 DCOM 选项:

指定证书颁发机构后,PowerShell 将显示 RequestID:

步骤 8: 在证书颁发机构服务器上,在证书颁发机构 MMC 管理单元中,单击“挂起请求”。记下 Request ID。然后右键单击该请求并选择“颁发”。
步骤 9: 选择“已颁发证书”节点。找到刚刚颁发的证书(Request ID 应匹配)。双击以打开证书。选择“详细信息”选项卡。单击“复制到文件”。“证书导出向导”启动。单击“下一步”。为文件格式选择以下选项:

格式必须为“加密消息语法标准 – PKCS #7 证书 (.P7B)”,并且必须选择“如果可能,包括证书路径中的所有证书”。
步骤 10: 将导出的证书文件复制到 FAS 服务器。
步骤 11: 在 FAS 服务器上输入以下 PowerShell cmdlet,将注册机构证书导入到 FAS 服务器:

例如:

将显示以下内容:

要确认注册机构证书的私钥是否正确存储在 TPM 中,请使用以下 PowerShell 命令。如果注册机构证书的私钥存储在 TPM 中,则 PrivateKeyProvider 字段将设置为 Microsoft Platform Crypto Provider:
Add-PSSnapin Citrix.Authentication.FederatedAuthenticationService.V1
Get-FasAuthorizationCertificate -FullCertInfo -Address localhost
<!--NeedCopy-->
步骤 12: 关闭 FAS 管理控制台,然后重新启动它。

注意: “授权此服务”步骤有一个绿色勾号。
步骤 13: 在 FAS 管理控制台中选择“规则”选项卡,并编辑安装和配置中描述的设置。
示例 3
此示例涵盖存储在 HSM 中的注册机构证书私钥和用户证书私钥。此示例假定已配置 HSM。您的 HSM 将具有提供程序名称,例如“HSM_Vendor’s Key Storage Provider”。
如果您计划在虚拟化环境中运行 FAS 服务器,请咨询您的 HSM 供应商以了解管理程序支持。
步骤 1. 在使用管理控制台进行 FAS 的初始设置期间,仅完成前两个步骤:“部署证书模板”和“设置证书颁发机构”。

步骤 2: 查阅您的 HSM 供应商文档,以确定您的 HSM 的 ProviderName 值应为何。如果您的 HSM 使用 CAPI,文档中可能会将提供程序称为加密服务提供程序 (CSP)。如果您的 HSM 使用 CNG,文档中可能会将提供程序称为密钥存储提供程序 (KSP)。
步骤 3: 按如下方式编辑配置文件:

该文件现在应显示如下:

此方案假定您的 HSM 使用 CNG,因此 ProviderLegacyCsp 值设置为 false。如果您的 HSM 使用 CAPI,则 ProviderLegacyCsp 值应设置为 true。查阅您的 HSM 供应商文档,以确定您的 HSM 使用 CAPI 还是 CNG。另请查阅您的 HSM 供应商文档,了解非对称 RSA 密钥生成支持的密钥长度。在此示例中,密钥长度设置为默认值 2048 位。请确保您指定的密钥长度受您的硬件支持。
步骤 4: 重新启动 Citrix Federated Authentication Service 以从配置文件中读取值。
步骤 5: 在 HSM 中生成 RSA 密钥对,并通过单击 FAS 管理控制台“初始设置”选项卡中的“授权”来创建证书签名请求。
步骤 6: 要验证密钥对是否在 HSM 中生成,请检查 Windows 事件日志中的应用程序条目:

注意:[提供程序: [CNG] HSM 供应商的密钥存储提供程序]
步骤 7: 在证书颁发机构服务器上,在证书颁发机构 MMC 中,选择“挂起请求”节点:

右键单击该请求,然后选择“颁发”。
注意: “授权此服务”步骤旁边有一个绿色勾选标记。

步骤 8: 在 FAS 管理控制台中选择“规则”选项卡,并按照安装和配置中的说明编辑设置。
FAS 证书存储
FAS 不使用 FAS 服务器上的 Microsoft 证书存储来存储其证书。它使用嵌入式数据库。
要确定注册机构证书的 GUID,请在 FAS 服务器上输入以下 PowerShell cmdlet:
Add-pssnapin Citrix.a\*
Get-FasAuthorizationCertificate –address \<FAS server FQDN>
例如,Get-FasAuthorizationCertificate –address cg-fas-2.auth.net:

要获取用户证书列表,请输入:
Get-FasUserCertificate –address \<FAS server FQDN>
例如,Get-FasUserCertificate –address cg-fas-2.auth.net

注意:
使用 HSM 存储私钥时,HSM 容器通过 GUID 标识。 可以使用以下命令获取 HSM 中私钥的 GUID:
Get-FasUserCertificate –address \<FAS server FQDN> -KeyInfo $true例如:
Get-FasUserCertificate –address fas3.djwfas.net -KeyInfo $true

相关信息
- 安装和配置是 FAS 安装和配置的主要参考。
- 常见的 FAS 部署在 Federated Authentication Services 体系结构概述文章中进行了总结。
- 其他“操作方法”文章在 高级配置文章中介绍。