私钥保护
简介
证书存储在 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 证书(默认有效期为两年)。 一旦 Citrix_RegistrationAuthority_ManualAuthorization 获得 Citrix_RegistrationAuthority 证书,FAS 服务器将删除它的证书和密钥。
与注册机构证书关联的私钥特别敏感,因为注册机构证书策略允许任何拥有私钥的人员为在模板中配置的用户集颁发证书请求。 因此,控制了此密钥的任何人都可作为用户集中的任何用户连接到环境。
可以通过使用下列项之一配置 FAS 服务器,以便按符合您所在组织的安全要求的方法保护私钥:
- 同时针对注册机构证书和用户证书私钥的 Microsoft 增强的 RSA 和 AES 加密提供程序或 Microsoft Software Key Storage Provider。
- 针对注册机构证书的私钥的含受信任的平台模块 (TPM) 芯片的 Microsoft Platform Key Storage Provider,以及针对用户证书私钥的 Microsoft 增强的 RSA 和 AES 加密提供程序或 Microsoft Software Key Storage Provider。
- 同时针对注册机构证书和用户证书私钥的硬件安全模块 (HSM) 供应商的加密服务或密钥存储提供程序与 HSM 设备。
私钥配置设置
配置 FAS 以使用下列三个选项之一。 使用文本编辑器编辑 Citrix.Authentication.FederatedAuthenticationService.exe.config 文件。 该文件默认情况下位于 FAS 服务器上的 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 Software Key Storage Provider | 默认 CNG 提供程序 |
Microsoft Platform Key Storage Provider | 默认 TPM 提供程序。 请注意,建议不要将 TPM 用于用户密钥。 仅将 TPM 用于注册机构密钥。 如果计划在虚拟化环境中运行 FAS 服务器,请咨询您的 TPM 和虚拟机管理程序供应商以确认是否支持虚拟化。 |
HSM_Vendor CSP/密钥存储提供程序 | 由 HSM 供应商提供。 对于不同的供应商,该值有所不同。 如果计划在虚拟化环境中运行 FAS 服务器,请咨询您的 HSM 供应商是否支持虚拟化。 |
Citrix.TrustFabric.ClientSDK.TrustAreaJoinParameters.ProviderType(仅对于 CAPI API 是必需项)
值 | 备注 |
---|---|
24 | 默认。 请参阅 Microsoft KeyContainerPermissionAccessEntry.ProviderType Property PROV_RSA_AES 24。 应该始终为 24,除非您使用 CAPI 与 HSM 并且 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 Platform Key Storage Provider 存储在 FAS 服务器主板的硬件 TPM 中的注册机构证书私钥,以及通过 Microsoft Software Key Storage Provider 存储的用户证书私钥。
此场景假定您的 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 联合身份验证服务,以从配置文件中读取值。
步骤 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 管理控制台中选择 Rules(规则)选项卡,并编辑安装和配置中所述的设置。
使用 PowerShell
可使用 PowerShell 以脱机方式请求注册机构证书。 对于不希望其证书颁发机构通过联机证书签名请求颁发注册机构证书的组织,此操作适用。 不能使用 FAS 管理控制台发出脱机注册机构证书签名请求。
步骤 1: 在使用管理控制台执行初始 FAS 配置期间,请仅完成前两个步骤:“部署证书模板”和“设置证书颁发机构”。
步骤 2: 在证书颁发机构服务器中,添加证书模板 MMC 管理单元。 右键单击 Citrix_RegistrationAuthority_ManualAuthorization 模板并选择复制模板。
选择 General(常规)选项卡。 更改名称和有效期。 在此示例中,名称为 Offline_RA,有效期为 2 年:
步骤 3: 在证书颁发机构服务器上,添加证书颁发机构 MMC 管理单元。 右键单击 Certificate Templates(证书模板)。 选择 New(新建),然后单击 Certificate Template to Issue(要颁发证书模板)。 选择刚才创建的模板。
步骤 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 服务器颁发用户证书以生成受 TPM 保护的用户证书私钥时,也可以在此配置文件中将 KeyProtection 值设置为 GenerateTPMProtectedKey。
要验证用于生成密钥对的 TPM,请在生成密钥对时,在 FAS 服务器上的 Windows 事件查看器中查看应用程序日志。
注意: “[TPM: True]”
后跟:
注意: “Provider: [CNG] Microsoft Platform Crypto Provider”
步骤 6:将证书请求部分复制到文本编辑器,并将其保存为磁盘上的文本文件。
步骤 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
将显示以下内容:
此时可能会出现“Certification Authority List”(证书颁发机构列表)窗口。 此示例中的证书颁发机构已同时启用 HTTP(顶部)和 DCOM(底部)注册。 选择 DCOM 选项(如果有):
在指定证书颁发机构后,PowerShell 将显示 RequestID:
步骤 8: 在证书颁发机构服务器上的证书颁发机构 MMC 管理单元中,单击待处理的请求。 记录请求 ID。 然后右键单击该请求,并选择 Issue(颁发)。
步骤 9:选择 Issued Certificates(已颁发的证书节点)。 找到刚颁发的证书(请求 ID 应匹配)。 双击以打开证书。 选择 Details(详细信息)选项卡。 单击 Copy to File(复制到文件)。 “证书导出向导”将启动。 单击下一步。 为文件格式选择下列选项:
格式必须为 Cryptographic Message Syntax Standard – PKCS #7 Certificates (.P7B),并且必须选择 Include all certificates in the certification path if possible(如果可能,请在认证路径中包含所有证书)。
步骤 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 管理控制台中选择 Rules(规则)选项卡,并编辑安装和配置中所述的设置。
示例 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 联合身份验证服务,以从配置文件中读取值。
步骤 5: 在 HSM 内生成 RSA 密钥对,并通过在 FAS 管理控制台的 Initial Setup(初始设置)选项卡上单击 Authorize(授权)来创建证书签名请求。
步骤 6:要验证是否已在 HSM 中生成密钥对,请检查 Windows 事件日志中的应用程序条目:
注意:[Provider: [CNG] HSM_Vendor’s Key Storage Provider]
步骤 7: 在证书颁发机构服务器上的证书颁发机构 MMC 中,选择待处理的请求节点:
右键单击该请求,并选择 Issue(颁发)。
注意: “授权此服务”步骤带有绿色对勾。
步骤 8: 在 FAS 管理控制台中选择 Rules(规则)选项卡,并编辑安装和配置中所述的设置。
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 部署在联合身份验证服务体系结构概述一文中加以概括。
- 高级配置一文介绍了其他“操作方法”文章。