私钥保护

简介

  • 证书存储在 FAS 服务器上的嵌入式数据库中。关联的私钥通过 FAS 服务器的网络服务帐户存储,并且默认标记为不可导出。

私钥有两种类型:

  • 与注册机构证书关联的私钥,来自 Citrix_RegistrationAuthority 证书模板。
  • 与用户证书关联的私钥,来自 Citrix_SmartcardLogon 证书模板。

  • 实际上有两种注册机构证书:Citrix_RegistrationAuthority_ManualAuthorization(默认有效期为 24 小时)和 Citrix_RegistrationAuthority(默认有效期为两年)。

在联合身份验证服务 (FAS) 管理控制台的“初始设置”选项卡步骤 3 中,当您单击“授权”时,FAS 服务器会生成一个密钥对,并向证书颁发机构发送 Citrix_RegistrationAuthority_ManualAuthorization 证书的证书签名请求。这是一个临时证书,默认有效期为 24 小时。证书颁发机构不会自动颁发此证书;其颁发必须由管理员在证书颁发机构上手动授权。一旦证书颁发给 FAS 服务器,FAS 将使用 Citrix_RegistrationAuthority_ManualAuthorization 证书自动获取 Citrix_RegistrationAuthority 证书(默认有效期为两年)。FAS 服务器在获取 Citrix_RegistrationAuthority 证书后会立即删除 Citrix_RegistrationAuthority_ManualAuthorization 的证书和密钥。

与注册机构证书关联的私钥特别敏感,因为注册机构证书策略允许拥有该私钥的任何人针对模板中配置的用户集颁发证书请求。因此,控制此密钥的任何人都可以作为该集中的任何用户连接到环境。

您可以配置 FAS 服务器,以适合您组织安全要求的方式保护私钥,方法是使用以下选项之一:

  • Microsoft 增强型 RSA 和 AES 加密服务提供程序或 Microsoft 软件密钥存储提供程序,用于注册机构证书和用户证书的私钥。
  • Microsoft 平台密钥存储提供程序(带受信任平台模块 (TPM) 芯片),用于注册机构证书的私钥;以及 Microsoft 增强型 RSA 和 AES 加密服务提供程序或 Microsoft 软件密钥存储提供程序,用于用户证书的私钥。
  • 硬件安全模块 (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(默认) 使用 CNG API

Citrix.TrustFabric.ClientSDK.TrustAreaJoinParameters.ProviderName(要使用的提供程序名称)

备注
Microsoft 增强型 RSA 和 AES 加密服务提供程序 默认 CAPI 提供程序
Microsoft 软件密钥存储提供程序 默认 CNG 提供程序
Microsoft 平台密钥存储提供程序 默认 TPM 提供程序。请注意,不建议将 TPM 用于用户密钥。仅将 TPM 用于注册机构密钥。如果您计划在虚拟化环境中运行 FAS 服务器,请咨询您的 TPM 和虚拟机管理程序供应商,了解是否支持虚拟化。
HSM_Vendor CSP/密钥存储提供程序 由 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 平台密钥存储提供程序)存储。

Citrix.TrustFabric.ClientSDK.TrustAreaJoinParameters.KeyLength(指定私钥大小,以位为单位)

备注
2048 默认值。也可以使用 1024 或 4096。

配置文件设置以图形方式表示如下(安装默认值以红色显示):

本地化图像

配置方案示例

示例 1

此示例涵盖使用 Microsoft 软件密钥存储提供程序存储的注册机构证书私钥和用户证书私钥

这是默认的安装后配置。无需额外的私钥配置。

示例 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: 通过如下更改以下行来编辑配置文件:

localized image

该文件现在应如下所示:

localized image

某些 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: 将配置文件改回如下所示:

localized image

注意:

尽管 FAS 可以生成具有 TPM 保护密钥的用户证书,但 TPM 硬件对于大型部署而言可能速度太慢。

步骤 6: 重新启动 FAS。这将强制服务重新读取配置文件并反映更改的值。后续的自动私钥操作将影响用户证书密钥;这些操作不会将私钥存储在 TPM 中,而是使用 Microsoft Software Key Storage Provider。

步骤 7: 在 FAS 管理控制台中选择规则选项卡,并按照安装和配置中的说明编辑设置。

使用 PowerShell

注册机构证书可以使用 PowerShell 离线请求。这适用于不希望其证书颁发机构通过在线证书签名请求颁发注册机构证书的组织。您无法使用 FAS 管理控制台进行离线注册机构证书签名请求。

步骤 1: 在使用管理控制台进行初始 FAS 配置期间,仅完成前两个步骤:“部署证书模板”和“设置证书颁发机构”。

localized image

步骤 2: 在您的证书颁发机构服务器上,添加“证书模板”MMC 管理单元。右键单击 Citrix_RegistrationAuthority_ManualAuthorization 模板,然后选择复制模板

选择常规选项卡。更改名称和有效期。在此示例中,名称为 Offline_RA,有效期为 2 年:

localized image

步骤 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

将显示以下内容:

localized image

注意:

  • 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 事件查看器中的应用程序日志。

localized image

注意: “[TPM: True]”

接下来是:

localized image

注意: “提供程序:[CNG] Microsoft 平台加密提供程序”

步骤 6: 将证书请求部分复制到文本编辑器中,并将其保存到磁盘作为文本文件。

  • localized image

步骤 7: 在 FAS 服务器上的 PowerShell 中键入以下内容,将证书签名请求提交到证书颁发机构:

certreq -submit -attrib "certificatetemplate:\<步骤 2 中的证书模板>" \<步骤 6 中的证书请求文件>

例如:

certreq -submit -attrib "certificatetemplate:Offline_RA" C:\Users\Administrator.AUTH\Desktop\usmcertreq.txt

显示以下内容:

localized image

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

localized image

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

localized image

步骤 8: 在证书颁发机构服务器上,在证书颁发机构 MMC 管理单元中,单击“挂起的请求”。记下请求 ID。然后右键单击该请求并选择“颁发”。

步骤 9: 选择“颁发的证书”节点。找到刚刚颁发的证书(请求 ID 应匹配)。双击打开证书。选择“详细信息”选项卡。单击“复制到文件”。“证书导出向导”启动。单击“下一步”。为文件格式选择以下选项:

localized image

格式必须是“加密消息语法标准 – PKCS #7 证书 (.P7B)”,并且必须选择“如果可能,包括所有证书路径”。

步骤 10: 将导出的证书文件复制到 FAS 服务器上。

步骤 11: 通过在 FAS 服务器上输入以下 PowerShell cmdlet,将注册机构证书导入 FAS 服务器:

localized image

例如:

localized image

显示以下内容:

localized image

若要确认注册机构证书的私钥是否正确存储在 TPM 中,请使用以下 PowerShell 命令。如果注册机构证书的私钥存储在 TPM 中,则 PrivateKeyProvider 字段将设置为 Microsoft 平台加密提供程序

Add-PSSnapin Citrix.Authentication.FederatedAuthenticationService.V1
Get-FasAuthorizationCertificate -FullCertInfo -Address localhost
<!--NeedCopy-->

步骤 12: 关闭 FAS 管理控制台,然后重新启动它。

localized image

注意: “授权此服务”步骤带有绿色勾选标记。

步骤 13: 在 FAS 管理控制台中选择“规则”选项卡,并编辑 安装和配置 中所述的设置。

示例 3

此示例涵盖存储在 HSM 中的注册机构证书私钥和用户证书私钥。此示例假定已配置 HSM。您的 HSM 将具有提供程序名称,例如“HSM 供应商的密钥存储提供程序”。

如果您计划在虚拟化环境中运行 FAS 服务器,请咨询您的 HSM 供应商以了解管理程序支持。

步骤 1. 在使用管理控制台进行 FAS 的初始设置期间,仅完成前两个步骤:“部署证书模板”和“设置证书颁发机构”。

localized image

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

步骤 3: 按如下所示编辑配置文件:

localized image

该文件现在应显示如下:

localized image

此方案假定您的 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 事件日志中的应用程序条目:

localized image

注意:[Provider: [CNG] HSM_Vendor’s Key Storage Provider]

步骤 7: 在证书颁发机构服务器上,在证书颁发机构 MMC 中,选择“挂起的请求”节点:

localized image

右键单击该请求,然后选择“颁发”。

注意: “授权此服务”步骤带有绿色勾选标记。

localized image

步骤 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

localized image

要获取用户证书列表,请输入:

Get-FasUserCertificate –address \<FAS server FQDN>

例如,Get-FasUserCertificate –address cg-fas-2.auth.net

localized image

注意:

使用 HSM 存储私钥时,HSM 容器由 GUID 标识。可以使用以下方法获取 HSM 中私钥的 GUID:

Get-FasUserCertificate –address \<FAS server FQDN> -KeyInfo $true

例如:

Get-FasUserCertificate –address fas3.djwfas.net -KeyInfo $true

localized image

相关信息

私钥保护