私钥保护

简介

FAS 证书存储在 FAS 服务器上的嵌入式数据库中。与 FAS 证书关联的私钥存储在 FAS 服务器的网络服务帐户下。默认情况下,这些密钥是不可导出的 2048 位 RSA 密钥,在 Microsoft 软件密钥存储提供程序中创建和存储。

使用 FAS PowerShell 命令 PowerShell cmdlet,可以更改私钥的属性和存储位置。

注意:

FAS 配置和证书存储在 FAS 服务器本地。数据不在 FAS 服务器之间共享。

在 Citrix Virtual Apps and Desktops 2411 之前的 FAS 版本中,私钥属性是通过编辑 %programfiles%\Citrix\Federated Authentication Service\Citrix.Authentication.FederatedAuthenticationService.exe.config 处的 XML 文件来配置的。 此方法已被 PowerShell 命令取代,后者提供了更大的灵活性,并且无需重新启动 FAS 服务器即可应用。 此外,与 XML 文件设置不同,使用 PowerShell 进行的配置在 FAS 服务器升级时会保留。 因此,不再支持使用 XML 文件对以下设置进行配置:

  • Citrix.TrustFabric.ClientSDK.TrustAreaJoinParameters.KeyProtection
  • Citrix.TrustFabric.ClientSDK.TrustAreaJoinParameters.ProviderLegacyCsp
  • Citrix.TrustFabric.ClientSDK.TrustAreaJoinParameters.ProviderName
  • Citrix.TrustFabric.ClientSDK.TrustAreaJoinParameters.ProviderType
  • Citrix.TrustFabric.ClientSDK.TrustAreaJoinParameters.KeyLength

请参阅“从 Citrix Virtual Apps and Desktops™ 2411 之前的 FAS 版本升级”部分,Upgrading from versions of FAS before Citrix Virtual Apps and Desktops™ 2411

关于 FAS 证书和模板的信息

FAS 持有两种类型的证书:授权证书(通常只有一个实例)和用户证书。

  • 注意:

  • FAS 授权证书有时也称为 注册机构请求代理 (RA) 证书。

  • FAS 在请求证书时使用证书模板,如下一节所述。虽然 FAS 在证书请求中指定了模板名称,但它不读取模板内容。因此,更改模板设置不会影响 FAS 发出的证书请求。更改模板的某些属性会影响 CA 生成的证书。例如,您可以使用模板更改有效期。

FAS 授权证书

此证书在您配置 FAS 时创建。您可以使用 FAS 管理控制台的“授权”或“重新授权”按钮来请求新的授权证书。

也可以使用 PowerShell 命令,这提供了更大的灵活性:

  • New-FasAuthorizationCertificate:此命令的行为类似于 FAS 管理控制台,但可以指定在授权过程中使用的证书模板。
  • New-FasAuthorizationCertificateRequest:此命令创建授权证书的脱机请求;脱机授权

授权证书有时也称为 RA 证书,因为 FAS 充当注册机构,代表用户请求证书。该证书具有增强型密钥用法 证书请求代理,允许其在请求 FAS 用户证书时用作授权凭据。

  • 默认情况下,授权过程使用以下模板:

  • Citrix_RegistrationAuthority_ManualAuthorization:使用此模板创建的证书是临时的、短期有效的,用于引导授权过程;
  • Citrix_RegistrationAuthority:使用此模板创建的证书具有较长的有效期,并由 FAS 服务器存储。

授权 FAS 会导致以下步骤:

  1. FAS 创建一个密钥对,并向 CA 发送一个证书签名请求 (CSR),指定密钥对的公钥和模板 Citrix_RegistrationAuthority_ManualAuthorization

  2. 模板的颁发要求指定 CSR 必须由 CA 管理员手动批准。

    1. 一旦 CA 管理员批准了 CSR,CA 就会创建一个 FAS 检索到的证书。此证书的有效期很短,只有一天,仅用于以下步骤。使用后,FAS 会销毁该证书及其密钥对。
  1. FAS 创建另一个密钥对,并向 CA 发送第二个 CSR,指定此密钥对的公钥和模板 Citrix_RegistrationAuthority。该请求由上一步中的证书授权并签名。

  2. CA 自动颁发证书,FAS 检索证书,FAS 现在已授权。默认情况下,此授权证书的有效期为两年。

用于创建前面提到的密钥对的设置可以使用此 PowerShell 命令查看:

Get-FasKeyConfig -Address localhost -CertificateType ra

FAS 用户证书

FAS 创建用户证书以将用户登录到 VDA。

当 FAS 创建用户证书时,会发生以下步骤:

  • FAS 创建一个密钥对,并向 CA 发送一个 CSR,指定密钥对的公钥、用户身份以及默认情况下使用的模板 Citrix_SmartcardLogon(模板可配置)。
  • CSR 使用 FAS 授权证书签名。
  • Citrix_SmartcardLogon 模板具有颁发要求 Application Policy: Certificate Request Agent。由于此属性存在于 FAS 授权证书中,CA 会自动颁发用户证书。
  • FAS 检索证书,并将其存储在 FAS 服务器上的嵌入式数据库中。
  • 默认情况下,证书的有效期为一周。

  • 稍后,用户证书将提供给 VDA 以登录用户。

  • 用于创建前面提到的密钥对的设置可以使用以下 PowerShell 命令查看:

Get-FasKeyConfig -Address localhost -CertificateType user

私钥存储选项

FAS 可以配置为在以下三类存储中创建和存储密钥对:

  • 软件:通常使用 Microsoft 软件密钥存储提供程序,它仅通过软件保护;数据存储在磁盘上。
  • 受信任的平台模块 (TPM):TPM 可以是计算机上的物理硬件,也可以是虚拟机管理程序提供的虚拟 TPM。
  • 硬件安全模块 (HSM):这是一种硬件外设或网络设备,旨在安全地存储加密密钥。

注意:

需要权衡利弊。硬件存储可能更安全,但通常性能较低,尤其是在创建和存储大量用户证书密钥对时。

与 FAS 授权证书关联的私钥特别敏感,因为证书策略允许拥有私钥的任何人授权任何用户的证书请求。因此,控制此密钥的任何人都可以作为任何用户连接到环境。

注意:

Microsoft CA 可以配置为限制 FAS 授权证书的权限,包括可以颁发证书的用户集。请参阅委派的注册代理

因此,FAS 允许您独立配置授权证书和用户证书的私钥属性。

一些典型配置如下:

授权证书密钥 用户证书密钥 备注
软件 软件 默认配置
TPM 软件 授权证书具有硬件保护
HSM HSM 所有证书都具有硬件保护

注意:

不建议将硬件 TPM 用于用户密钥。仅将 TPM 用于授权证书密钥。如果您计划在虚拟化环境中运行 FAS 服务器,请咨询您的虚拟机管理程序供应商是否支持 TPM 虚拟化。

密钥配置 PowerShell 命令

与私钥配置相关的命令如下:

  • Get-FasKeyConfig
  • Set-FasKeyConfig
  • Reset-FasKeyConfig
  • Test-FasKeyConfig

有关详细信息,请参阅 PowerShell cmdlet

授权证书和用户证书的密钥配置是独立的,由 CertificateType 参数指定。例如,要获取请求授权证书(RA 证书)时使用的私钥配置:

Get-FasKeyConfig -Address localhost -CertificateType ra

要获取请求用户证书时使用的私钥配置:

Get-FasKeyConfig -Address localhost -CertificateType user

您可以使用 Set-FasKeyConfigGet-FasKeyConfig 来设置和检查以下私钥属性:

属性 默认值 备注
Length

2048

密钥长度(以位为单位)。请注意,在 Microsoft 模板 GUI 中,加密选项卡指定最小密钥大小。如果 FAS 中配置的密钥长度小于模板中指定的最小密钥大小,则 CA 将拒绝 CSR。
对于 RSA 密钥,长度可以是 1024 位、2048 位或 4096 位。
对于 ECC 密钥,长度可以是 256 位、384 位或 521 位。
Exportable false 私钥是否可以从其提供程序导出。
Prefix none 指定要添加到 FAS 生成的私钥标识符的前缀。生成的标识符由前缀和 GUID 组成。例如,MyPrefix70277985-6908-4C6F-BE59-B08691456804
EllipticCurve false 如果为 true,则生成 ECC 密钥对;否则生成 RSA 密钥对。
Key Storage Provider (KSP)
true
如果为 true,FAS 使用现代 Windows CNG API,并且必须在 Provider 属性中指定 KSP。
如果为 false,FAS 使用旧版 CAPI API,并且必须在 Provider 属性中指定加密服务提供程序 (CSP)。Citrix 建议使用 KSP。
Provider Microsoft Software Key Storage Provider 创建和存储密钥对的提供程序的名称。您可以更改此属性以指定 TPM 或 HSM。HSM 的 KSP(或 CSP)由 HSM 供应商提供。他们提供有关如何安装其软件以及提供程序名称的说明。
CSPType
24
仅当 KSP 属性设置为 false 时才相关。
指的是 Microsoft KeyContainerPermissionAccessEntry.ProviderType Property PROV_RSA_AES 24。除非您使用带有 CSP 的 HSM 且 HSM 供应商另有指定,否则必须始终为 24。

此外,Set-FasKeyConfig 可以与以下开关一起使用,以提供便利:

标志 说明
-UseDefaultSoftwareProvider Provider 属性设置为 Microsoft 软件密钥存储提供程序,并将 KSP 字段设置为 true
-UseDefaultTpmProvider Provider 属性设置为 Microsoft 平台加密提供程序,并将 KSP 字段设置为 true

Microsoft 软件密钥存储提供程序是通常用于在磁盘上创建和存储密钥的提供程序。

Microsoft 平台加密提供程序是通常用于在 TPM 中创建和存储密钥的提供程序。

  • Get-FasKeyConfig 还提供字段,有助于确认正在使用哪个提供程序和算法:
字段 含义
IsDefaultSoftwareProvider 如果为 true,则表示提供程序设置为 Microsoft 软件密钥存储提供程序,并且 KSP 字段设置为 true
IsDefaultTpmProvider 如果为 true,则表示提供程序设置为 Microsoft 平台加密提供程序,并且 KSP 字段设置为 true
Algorithm
RSA 表示将创建 RSA 密钥(EllipticCurve 属性为 false)。
ECC 表示将创建 ECC 密钥(EllipticCurve 属性为 true)。

您可以使用 Reset-FasKeyConfig 将设置恢复为默认值。

Reset-FasKeyConfig -Address localhost -CertificateType ra
Reset-FasKeyConfig -Address localhost -CertificateType user
<!--NeedCopy-->

注意:

对私钥配置所做的更改(使用 Set-FasKeyConfigReset-FasKeyConfig)会立即应用于新创建的证书。但是,具有不同配置的现有授权证书和用户证书不受影响。

您可以通过从管理控制台取消授权 FAS 服务,或使用 取消授权 FAS 和删除 FAS 证书 中的 PowerShell 命令来删除现有证书。

密钥池中任何不符合当前用户密钥配置的预生成密钥都将被丢弃。

配置方案示例

在每个示例中,请在授权 FAS 服务之前使用提供的 PowerShell 设置密钥配置,因为现有证书不受任何配置更改的影响。

如果您已有密钥配置错误的授权证书或用户证书,可以通过检查 FAS 证书取消授权 FAS 并删除 FAS 证书将其删除。

如果您的 FAS 服务器处于实时部署中,请在进行配置更改时考虑将其置于维护模式维护模式

示例 1 - 将所有密钥存储在 Microsoft 软件密钥存储提供程序中

由于这是默认设置,因此无需额外配置。

如果您之前更改了密钥配置,可以使用以下命令恢复使用 Microsoft 软件密钥存储提供程序

Set-FasKeyConfig -Address localhost -CertificateType ra -UseDefaultSoftwareProvider
Set-FasKeyConfig -Address localhost -CertificateType user -UseDefaultSoftwareProvider
<!--NeedCopy-->

您可以使用 Reset-FasKeyConfig 恢复为 Microsoft 软件密钥存储提供程序,并将所有其他密钥配置设置恢复为默认值。

示例 2 - 将授权证书密钥存储在 TPM 中

此示例说明了如何将 FAS 授权证书密钥存储在 TPM(物理或虚拟)中,而用户证书密钥存储在 Microsoft 软件密钥存储提供程序中。

尽管 FAS 可以生成具有 TPM 保护密钥的用户证书,但对于大型部署,TPM 硬件可能太慢或受大小限制。

使用以下 PowerShell 命令:

Set-FasKeyConfig -Address localhost -CertificateType ra -UseDefaultTpmProvider
Set-FasKeyConfig -Address localhost -CertificateType user -UseDefaultSoftwareProvider
<!--NeedCopy-->

示例 3 - 将所有密钥存储在 HSM 中

此示例说明了如何使用 HSM 存储授权证书和用户证书私钥。此示例假定已配置 HSM。您的 HSM 将具有提供程序名称。例如,HSM 供应商密钥存储提供程序

使用以下 PowerShell 命令(将示例文本替换为您的 HSM 提供程序的实际名称):

-  Set-FasKeyConfig -Address localhost -CertificateType ra -Provider "HSM Vendor Key Storage Provider"
-  Set-FasKeyConfig -Address localhost -CertificateType user -Provider "HSM Vendor Key Storage Provider"
<!--NeedCopy-->
  • 示例 4 - 使用椭圆曲线密钥

默认情况下,FAS 生成 RSA 密钥。在此示例中,为授权证书和用户证书配置了椭圆曲线 (ECC) 密钥。

此示例使用不同的密钥长度。授权证书配置为 384 位密钥,用户证书配置为 256 位密钥。

-  Set-FasKeyConfig -Address localhost -CertificateType ra -EllipticCurve $true -Length 384
Set-FasKeyConfig -Address localhost -CertificateType user -EllipticCurve $true -Length 256
<!--NeedCopy-->

此时,CA 可能会拒绝授权和用户证书请求,因为 FAS 证书模板中的最小密钥大小默认设置为 1024 位。

  • 因此,对于此示例,需要按如下方式更改模板中的最小密钥大小:

  • Citrix_RegistrationAuthority_ManualAuthorization and Citrix_RegistrationAuthority:将最小密钥大小更改为 384(或更小)
  • Citrix_SmartcardLogon:将最小密钥大小更改为 256(或更小)

要编辑模板,请运行 mmc.exe,并添加证书模板管理单元。找到模板并打开其属性。最小密钥大小设置位于模板属性的加密选项卡中。

注意:

  • 仅在运行 Citrix Virtual Apps and Desktops 2411 或更高版本的 Windows VDA 上支持具有 ECC 密钥的用户证书。

  • Linux VDA 不支持 ECC 密钥。

测试私钥配置

尽管 Set-FasKeyConfig 命令会执行一些验证,但仍可能设置无效的密钥配置。例如,您可能在 HSM 的提供程序名称中犯了错误,或者您指定的密钥长度可能不受硬件支持。

Test-FasKeyConfig 命令可以提供帮助。它会尝试使用当前密钥配置创建密钥对,并报告成功失败。如果发生故障,将提供故障原因的指示。如果成功,密钥对将立即销毁。

以下 PowerShell 命令分别测试授权和用户密钥配置:

-  Test-FasKeyConfig -Address localhost -CertificateType ra
-  Test-FasKeyConfig -Address localhost -CertificateType user
<!--NeedCopy-->

授权 FAS 服务器并创建规则后,您还可以按如下方式为用户证书创建测试 CSR:

Test-FasCertificateSigningRequest -Address localhost -UserPrincipalName user@example.com -Rule default

user@example.com 替换为 Active Directory 部署中的真实 UPN。FAS 规则通常命名为 default。但是,如果您希望测试已配置的其他规则,请指定该名称。

如果 CSR 成功,FAS 将丢弃生成的证书。

检查 FAS 证书

您可以使用 PowerShell 检查证书的属性并确定关联的私钥存储位置。

检查授权证书

您可以通过单击 FAS 管理控制台中的授权证书链接来查看授权证书:

授权证书

但是,要获取更详细的信息,请使用 PowerShell:

Get-FasAuthorizationCertificate -Address localhost -FullCertInfo

将返回多个字段,包括 PrivateKeyProvider,其中包含证书创建和存储提供程序的指示。

PrivateKeyProvider 密钥存储位置
Microsoft Software Key Storage Provider 密钥存储在磁盘上,受 Microsoft 软件提供程序保护。
Microsoft Platform Crypto Provider 密钥存储在 TPM 中(物理或虚拟)。
HSM Vendor Key Storage Provider (example only) 密钥存储在 HSM 中(在此示例中,供应商的提供程序名为 HSM Vendor Key Storage Provider

检查用户证书

您可以按如下方式获取 FAS 服务器上缓存的所有用户证书列表:

Get-FasUserCertificate -Address localhost -KeyInfo $true

KeyInfo 参数使输出包含有关与证书关联的私钥的更多信息。特别是,PrivateKeyProvider 字段指示与证书关联的密钥对的存储位置(有关此值的解释,请参阅上一节)。

您可以使用各种可选参数(例如 -UserPrincipalName)筛选返回的证书集。

命令输出的证书字段是 PEM 编码的用户证书。将文本复制到 .crt 文件中,然后按如下方式使用 Windows 证书 GUI 显示证书:

命令 说明
$CertInfos = Get-FasUserCertificate -Address localhost 此列表中可能包含多个用户证书
$CertInfo = $CertInfos[0] 在此示例中,我们选择第一个用户证书
$CertInfo.Certificate > c:\temp\user.crt 将 PEM 数据通过管道传输到 .crt 文件
c:\temp\user.crt 在 Windows GUI 中打开 .crt 文件

从 Citrix Virtual Apps and Desktops 2411 之前的 FAS 版本升级

在 Citrix Virtual Apps and Desktops 2411 之前的 FAS 版本中,私钥属性通过编辑以下位置的 XML 文件进行配置:

%programfiles%\Citrix\Federated Authentication Service\Citrix.Authentication.FederatedAuthenticationService.exe.config
<!--NeedCopy-->

这已被本文档中描述的 PowerShell 命令取代,这些命令提供了更大的灵活性,并且无需重新启动 FAS 服务器即可应用。

此外,与 XML 文件设置不同,使用 PowerShell 完成的配置在 FAS 服务器升级时会保留。

与私钥配置相关的 XML 文件设置及其对应的 PowerShell 参数(如 Get-FasKeyConfigSet-FasKeyConfig 中所用)如下所示:

XML 文件设置 XML 文件中的默认值 Powershell 等效项 注释
Citrix.TrustFabric.ClientSDK.TrustAreaJoinParameters.KeyLength 2048 -Length -
Citrix.TrustFabric.ClientSDK.TrustAreaJoinParameters.KeyProtection

GenerateNonExportableKey

-Exportable
-UseDefaultTpmProvider
  • 通过将 -Exportable 设置为 $true 来实现 NoProtection
    通过将 -Exportable 设置为 $false 来实现 -GenerateNonExportableKey
    通过指定 -UseDefaultTpmProvider 开关来实现 -GenerateTPMProtectedKey
Citrix.TrustFabric.ClientSDK.TrustAreaJoinParameters.ProviderLegacyCsp
false
-Ksp
- ProviderLegacyCsp false 通过将 -Ksp 设置为 $true 来实现
-ProviderLegacyCsp true 通过将 -Ksp 设置为 $false 来实现
Citrix.TrustFabric.ClientSDK.TrustAreaJoinParameters.ProviderName - -Provider -
Citrix.TrustFabric.ClientSDK.TrustAreaJoinParameters.ProviderType - -CspType -

XML 配置默认值和 PowerShell 默认值在功能上是等效的。也就是说,默认情况下,此版本以及 Citrix Virtual Apps and Desktops 2411 之前版本中 FAS 生成的密钥对属性是相同的。

因此,如果您未更改 XML 配置文件中的任何上述设置,则在升级 FAS 时无需执行任何操作。

但是,如果您更改了任何上述设置,请按如下方式升级 FAS:

  • 将 FAS 置于维护模式;维护模式
  • 只需运行 FAS 安装程序即可就地升级 FAS;升级后,所有以前的设置将不会出现在 XML 文件中,并且无法在 XML 文件中进行配置。
  • 使用 PowerShell 命令 Set-FasKeyConfig(如密钥配置 PowerShell 命令中所述)根据需要设置 FAS 私钥配置;考虑授权证书和用户证书所需的设置。
  • 测试您的配置,如测试私钥配置中所述。
  • 使 FAS 服务器退出维护模式。

下次升级时,FAS 私钥配置设置将保留,无需采取任何特殊操作。

加密远程处理

与 FAS 用户证书关联的私钥绝不会传输到 VDA。相反,当 VDA 需要使用用户的 FAS 证书(无论是用于登录 VDA 还是用于会话内使用)时,加密请求会远程回 FAS 服务器。这提高了安全性,因为私钥绝不会离开 FAS 密钥存储(无论是软件存储、TPM 还是 HSM)。

在 Windows VDA 上,这是通过在 VDA 上使用一对提供程序实现的。发出加密请求的应用程序或操作系统代码不知道该操作正在远程回 FAS 服务器。

在 Citrix Virtual Apps and Desktops 2411 之前,提供程序是加密服务提供程序 (CSP),应用程序和操作系统代码通过较旧的 Windows CAPI API 进行访问。这些提供程序是:

  • CitrixLogonCsp.dll:用于 VDA 的单一登录
  • CitrixVirtualSmartcardCsp.dll:用于会话内证书

从 Citrix Virtual Apps and Desktops 2411 开始,VDA 上提供了额外的密钥存储提供程序 (KSP)。应用程序和操作系统代码通过较新的 Windows CNG API 访问这些提供程序。新的提供程序是:

  • CitrixLogonKsp.dll:用于 VDA 的单一登录
  • CitrixVirtualSmartcardKsp.dll:用于会话内证书

KSP 是一种更新的向 Windows 应用程序公开加密操作的方式,它提供了更多功能。例如:

  • 支持带 ECC 密钥的证书
  • 支持概率签名方案 (PSS) 填充

如果 FAS 和 VDA 均运行 Citrix Virtual Apps and Desktops 2411 或更高版本,则使用 KSP 远程处理(即通过新的 KSP 进行远程处理)。否则,系统将回退到使用较旧的 CSP 进行远程处理。

禁用 KSP 远程处理

如果出现任何兼容性问题,可以禁用 KSP 远程处理,以便始终可以使用较旧的 CSP 远程处理。

使用以下 PowerShell 命令:

Reset-FasKeyConfig -Address localhost -CertificateType ra
Reset-FasKeyConfig -Address localhost -CertificateType user
<!--NeedCopy-->

维护模式

在对实时 FAS 服务器的配置进行更改时,请考虑将其置于维护模式。

当 FAS 处于维护模式时,以下情况属实:

  • WorkspaceStoreFront™ 作为已发布的应用程序或桌面启动序列的一部分调用 FAS 时,FAS 会指示其处于维护模式;调用者必须通过选择不同的 FAS 服务器来对此作出响应。
  • 作为额外的预防措施,FAS 在维护模式下不允许自动创建用户证书。因此,可以避免意外创建具有非预期设置的用户证书。
  • 但是,仍允许涉及现有用户证书的活动,例如 VDA 登录或会话内使用。

尽管不允许自动创建用户证书,但管理员仍可以使用 PowerShell 命令(例如 New-FasUserCertificateTest-FasCertificateSigningRequest)创建用户证书。

使用管理控制台

维护模式

使用 PowerShell

将 FAS 服务器置于维护模式,如下所示:

Set-FasKeyConfig -Address localhost -CertificateType ra -UseDefaultSoftwareProvider
Set-FasKeyConfig -Address localhost -CertificateType user -UseDefaultSoftwareProvider
<!--NeedCopy-->

将 FAS 服务器退出维护模式(并恢复正常运行),如下所示:

Set-FasKeyConfig -Address localhost -CertificateType ra -UseDefaultTpmProvider
Set-FasKeyConfig -Address localhost -CertificateType user -UseDefaultSoftwareProvider
<!--NeedCopy-->

相关信息

  • [安装和配置](/en-us/federated-authentication-service/2507-ltsr/install-configure.html) 是 FAS 安装和配置的主要参考资料。
  • 常见的 FAS 部署在 [联合身份验证服务体系结构概述](/en-us/federated-authentication-service/2507-ltsr/deployment-architectures.html) 文章中进行了总结。
  • 其他操作方法文章在 [高级配置](/en-us/federated-authentication-service/2507-ltsr/config-manage.html) 文章中进行了介绍。