私钥保护

简介

  • 私钥默认通过网络服务帐户存储,并标记为不可导出。

私钥有两种类型:

  • 与注册机构证书关联的私钥,来自 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 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 平台密钥存储提供程序)

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 配置期间,仅完成前两个步骤部署证书模板设置证书颁发机构,然后按如下方式操作:

localized image

步骤 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 软件密钥存储提供程序。

步骤 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 服务器颁发用户证书以生成受 TPM 保护的用户证书私钥时,也可以将配置文件中的 KeyProtection 值设置为 GenerateTPMProtectedKey。

要验证 TPM 是否用于生成密钥对,请查看 FAS 服务器上 Windows 事件查看器中的应用程序日志,密钥对生成时。

localized image

注意:“[TPM: True]”

如下图所示:

localized image

注意:“提供程序:[CNG] Microsoft Platform Crypto Provider”

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

  • localized image

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

certreq -submit -attrib "certificatetemplate:\<certificate template from step 2>" \<certificate request file from step 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 Platform Crypto Provider

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

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

localized image

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

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

示例 3

此示例涵盖存储在 HSM 中的注册颁发机构证书私钥和用户证书私钥。此示例假定已配置 HSM。您的 HSM 将具有提供程序名称,例如“HSM_Vendor’s Key Storage Provider”。

如果您计划在虚拟化环境中运行 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: 在 FAS 管理控制台的初始设置选项卡中,单击授权以在 HSM 中生成 RSA 密钥对并创建证书签名请求。

步骤 6: 要验证密钥对是否在 HSM 中生成,请检查 Windows 事件日志中的应用程序条目:

localized image

注意:[提供程序:[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

相关信息

私钥保护