私钥保护
简介
- 证书存储在 FAS 服务器上的嵌入式数据库中。关联的私钥通过 FAS 服务器的 Network Service 帐户存储,并且默认标记为不可导出。
私钥有两种类型:
- 与注册机构证书关联的私钥,来自 Citrix_RegistrationAuthority 证书模板。
-
与用户证书关联的私钥,来自 Citrix_SmartcardLogon 证书模板。
- 实际上有两种注册机构证书:Citrix_RegistrationAuthority_ManualAuthorization(默认有效期为 24 小时)和 Citrix_RegistrationAuthority(默认有效期为两年)。
在 Federated Authentication Service (FAS) 管理控制台的“初始设置”选项卡中的步骤 3 中,当您单击“授权”时,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 结合 Trusted Platform Module (TPM) 芯片,用于注册机构证书的私钥;以及 Microsoft Enhanced RSA and AES Cryptographic Provider 或 Microsoft Software Key Storage Provider,用于用户证书的私钥。
- 硬件安全模块 (HSM) 供应商的 Cryptographic Service 或 Key Storage Provider 结合 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(默认) | 使用 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。除非您将 HSM 与 CAPI 结合使用且 HSM 供应商另有规定,否则应始终为 24。 |
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 \<FAS 服务器的 FQDN>
例如:
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 服务器颁发用户证书以生成受 TPM 保护的用户证书私钥时,也可以将配置文件中的 KeyProtection 值设置为 GenerateTPMProtectedKey。
要验证是否使用 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 管理单元中,单击“挂起的请求”。记下请求 ID。然后右键单击该请求并选择“颁发”。
步骤 9:选择“已颁发证书”节点。找到刚刚颁发的证书(请求 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_Vendor 的密钥存储提供程序]
步骤 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 安装和配置的主要参考。
- Federated Authentication Services 体系结构概述一文总结了常见的 FAS 部署。
- 高级配置一文介绍了其他“操作方法”文章。
