证书吊销列表 (CRL) 检查
简介
您可以将 StoreFront 配置为使用已发布的证书吊销列表 (CRL) 来检查 CVAD 交付控制器使用的 TLS 证书的状态。在以下情况下,您可能需要吊销对证书的访问权限:
- 您认为私钥已泄露
- CA 已泄露
- 关联已更改
- 证书已被取代
注意:
仅当 StoreFront 与 Citrix Virtual Apps and Desktops 交付控制器之间使用 HTTPS 连接时,本主题才相关。与交付控制器的 HTTP 连接不需要证书,因此此处所述的 Store 的 -CertRevocationPolicy 设置无效。
StoreFront 支持使用 CRL 分发点 (CDP) 证书扩展和本地安装的证书吊销列表 (CRL) 进行证书吊销检查。StoreFront 仅支持完整 CRL:不支持增量 CRL。
CRL 分发点 (CDP) 扩展
StoreFront 不会枚举使用已吊销证书的 Citrix Virtual Apps and Desktops 交付控制器中的资源,这些已吊销证书的序列号已在已发布的 CRL 中列出。要检测哪些证书已被吊销,StoreFront 必须能够使用 CDP 证书扩展中定义的某个 URL 访问已发布的 CRL。

CRL 发布间隔
为了使 StoreFront 更快地检测交付控制器上的已吊销证书,请缩短 CA 上的 CRL 发布间隔。编辑 CLR 分发点扩展的属性,以设置适合您的公钥基础结构的较低 CLR 发布间隔值。

客户端 CRL 缓存
Windows 公钥基础结构客户端在本地缓存 CRL。在本地缓存的 CRL 过期之前,不会下载更新的 CRL。
StoreFront 对证书吊销列表 (CRL) 的访问
证书吊销检查依赖于 StoreFront 访问 CRL 的能力。请仔细考虑 StoreFront 如何联系发布 CRL 的 Web 服务器或证书颁发机构 (CA),以及 StoreFront 如何接收 CRL 更新。
交付控制器上的内部企业 CA 和私有证书
要使用私有 CA 和证书,StoreFront 需要一个正确配置的企业 CA 和一个已发布的 CRL,StoreFront 可以在您的组织和内部网络中访问该 CRL。有关配置企业 CA 以发布 CDP 扩展的信息,请参阅 Microsoft 文档。在配置 CA 以包含 CDP 扩展之前存在的任何交付控制器上的证书可能需要重新颁发。
StoreFront 和 Citrix Virtual Apps and Desktops 服务器通常位于无法访问 Internet 的隔离私有网络中。在这种情况下,应使用私有 CA。
交付控制器上的外部公共 CA 和公共证书
StoreFront 服务器和 Citrix Virtual Apps and Desktops 交付控制器可以使用公共 CA 颁发的证书。StoreFront 必须能够通过 Internet 联系公共 CA 的 Web 服务器,使用 CDP 扩展中引用的 URL。如果在公共证书被吊销后,StoreFront 无法使用 CDP URL 下载 CRL 副本,则 StoreFront 无法执行 CRL 检查。
查看证书吊销策略
要使用 PowerShell SDK 查看策略设置,请运行 cmdlet `Get-STFStoreFarmConfiguration`,并在生成的对象中查看属性 `CertRevocationPolicy`。例如:
$store=Get-STFStoreService -VirtualPath '/Citrix/Store'
(Get-STFStoreFarmConfiguration -StoreService $store).CertRevocationPolicy
<!--NeedCopy-->
配置证书吊销策略
要使用 PowerShell SDK 为 Store 设置证书吊销策略,请运行 cmdlet `Set-STFStoreFarmConfiguration` 并使用参数 `-CertRevocationPolicy`。
-CertRevocationPolicy 选项可以设置为以下值:
| 设置 | 说明 |
|---|---|
| NoCheck | StoreFront 不检查交付控制器上证书的吊销状态。StoreFront 仍会枚举使用已吊销证书的交付控制器中的资源。这是默认设置。 |
| MustCheck | 这是最安全的选项。StoreFront 尝试通过联系交付控制器上证书的 CDP 扩展中引用的 URL 来获取 CRL。如果 CRL 不可用或交付控制器上使用的证书已被吊销,则 StoreFront 无法从交付控制器中枚举。如果证书是私有的,则 URL 可以指向内部 Web 服务器;如果证书是由公共 CA 颁发的,则 URL 可以指向公共 Internet Web 服务器。 |
| FullCheck | StoreFront 尝试联系交付控制器证书的 CDP 扩展中发布的 URL。如果 StoreFront 无法从 URL 获取 CRL 副本,则它仍允许枚举交付控制器中的资源。如果 StoreFront 成功获取 CRL 并且交付控制器的证书已被吊销,则 StoreFront 不会枚举资源。如果证书是私有的,则 URL 可以指向内部 Web 服务器;如果证书是由公共 CA 颁发的,则 URL 可以指向公共 Internet Web 服务器。 |
| NoNetworkAccess | 仅检查已本地导入到 StoreFront 服务器上的 Citrix Delivery Servers 证书存储中的 CRL。StoreFront 不尝试联系 CDP 扩展中指定的任何 URL。如果 StoreFront 无法获取 CRL 的本地副本,则它仍允许枚举交付控制器中的资源。如果 StoreFront 成功从 Citrix Delivery Servers 证书存储中获取 CRL 的本地副本,并且交付控制器的证书已被吊销,则 StoreFront 不会枚举资源。 |
例如:
$SiteID = 1
$StoreVirtualPath = "/Citrix/Store"
$StoreObject = Get-STFStoreService -VirtualPath $StoreVirtualPath
Set-STFStoreFarmConfiguration -StoreService $StoreObject -CertRevocationPolicy "MustCheck"
<!--NeedCopy-->
如果您有多个 Store,请在所有 Store 上重复此过程。-CertRevocationPolicy 是一个 Store 级别设置,它会影响为 $StoreVirtualPath 中指定的 Store 配置的所有交付控制器。
在 StoreFront 服务器上使用本地导入的 CRL
支持使用本地导入的 CRL,但 Citrix® 不建议这样做,原因如下:
- 在大型企业部署中,它们难以管理和更新,其中可能涉及多个 StoreFront 服务器组。
- 每次吊销证书时,在每个 StoreFront 服务器上手动更新 CRL 的效率远低于在整个 Active Directory 域中使用 CDP 扩展和已发布的 CRL。
如果将 -CertRevocationPolicy 设置为 “NoNetworkAccess”,并且您有办法将 CRL 有效地分发到所有 StoreFront 服务器,则可以使用本地安装或更新的 CRL。
使用本地导入的 CRL
-
将 CRL 复制到 StoreFront 服务器的桌面。如果 StoreFront 服务器是服务器组的一部分,请将其复制到组中的所有 StoreFront 服务器。
-
打开 MMC 管理单元,然后选择 文件 > 添加/删除管理单元 > 证书 > 计算机帐户 > Citrix Delivery Services 证书存储。
-
右键单击并选择 所有任务 > 导入,然后浏览到 .CRL 文件并选择 所有文件 > 打开 > 将所有证书放入以下存储 > Citrix Delivery Services。

通过 PowerShell 或命令行将 CRL 添加到 Citrix Delivery Services 证书存储
-
登录 StoreFront 并将 .CRL 文件复制到当前用户的桌面。
-
打开 PowerShell ISE 并选择 以管理员身份运行。
-
运行以下命令:
certutil -addstore "Citrix Delivery Services" "$env:UserProfile\Desktop\Example-DC01-CA.crl" <!--NeedCopy-->如果成功,将返回以下内容:
Citrix Delivery Services CRL "CN=Example-DC01-CA, DC=example, DC=com" added to store. CertUtil: -addstore command completed successfully. <!--NeedCopy-->
您可以将此命令用作示例,通过脚本自动将 CRL 分发到部署中的所有 StoreFront 服务器。
使用交付控制器的 XML 身份验证
您可以将 StoreFront 配置为将用户身份验证委托给 Citrix Virtual Apps and Desktops 交付控制器。如果交付控制器上的证书已被吊销,则用户无法登录 StoreFront。这种行为是可取的,因为如果负责对 Active Directory 用户进行身份验证的 Citrix Virtual Apps and Desktops 交付控制器上的证书已被吊销,则这些用户不应能够登录 StoreFront。
将用户身份验证委托给交付控制器
-
按照上一节 配置 Store 以进行证书吊销检查 中的说明配置 Store 以进行证书吊销。
-
按照 基于 XML 服务的身份验证 中所述的步骤配置交付控制器以使用 HTTPS。
配置用于证书吊销检查的 XML 身份验证服务
仅当您在部署中使用 XML 身份验证时才需要执行这些步骤。
注意:
StoreFront 支持两种将 Store 映射到身份验证服务的模型。建议的方法是 Store 与身份验证服务之间的一对一映射。在这种情况下,您必须在所有 Store 及其各自的身份验证服务上执行本节中的步骤。
确保 Store 和身份验证服务的证书吊销模式设置为相同的值。或者,如果所有 Store 的身份验证配置都相同,则可以将多个 Store 配置为共享单个身份验证服务。
身份验证服务 PowerShell cmdlet 没有等效的 Set-STFStoreFarmConfiguration,因此需要稍微不同的 PowerShell 方法。使用前面部分中描述的相同 证书吊销策略设置。
-
打开 PowerShell ISE 并选择 以管理员身份运行。
$SiteID = 1 $StoreVirtualPath = "/Citrix/Store" $AuthVirtualPath = "/Citrix/StoreAuth" <!--NeedCopy--> -
选择用于 XML 身份验证的 Store 服务、身份验证服务和交付控制器™。确保已为 Store 配置交付控制器。
$StoreObject = Get-STFStoreService -SiteId $SiteID -VirtualPath $StoreVirtualPath $FarmObject = Get-STFStoreFarm -StoreService $StoreObject -FarmName "CVAD" $AuthObject = Get-STFAuthenticationService -SiteID $SiteID -VirtualPath $AuthVirtualPath <!--NeedCopy--> -
直接修改身份验证服务的 CertRevocationPolicy 属性。
$AuthObject.FarmsConfiguration.CertRevocationPolicy = "FullCheck" $AuthObject.Save() Enable-STFXmlServiceAuthentication -AuthenticationService $AuthObject -Farm $FarmObject <!--NeedCopy--> -
确认您已设置正确的证书吊销模式。
$AuthObject = Get-STFAuthenticationService -SiteID 1 -VirtualPath $AuthVirtualPath $AuthObject.FarmsConfiguration.CertRevocationPolicy <!--NeedCopy-->
预期的 Windows 事件查看器错误
启用 CRL 检查后,StoreFront 服务器上的 Windows 事件查看器中会报告错误。
要打开事件查看器:
- 在 StoreFront 服务器上键入 运行。
- 键入 eventvwr,然后按 Enter。
- 在“应用程序和服务”中查找 Citrix Delivery Services 事件。
错误示例:Store 无法联系具有已吊销证书的交付控制器
An SSL connection could not be established: An error occurred during SSL crytography: Access is denied.
This message was reported from the Citrix XML Service at address https://deliverycontrollerTLS.domain.com/scripts/wpnbr.dll.
The specified Citrix XML Service could not be contacted and has been temporarily removed from the list of active services.
<!--NeedCopy-->
错误示例:如果用户因 XML 身份验证失败而无法登录,则来自 Receiver for Web 的错误
An unexpected response was received during the authentication process.
Citrix.DeliveryServicesClients.Authentication.Exceptions.ExplicitAuthenticationFailure,
Citrix.DeliveryServicesClients.Authentication, Version=3.20.0.0,
Culture=neutral, PublicKeyToken=null
General Authentication Failure
ExplicitResult.State: 5
AuthenticationControllerRequestUrl:
https://storefront.example.com/Citrix/StoreWeb/ExplicitAuth/LoginAttempt
ActionType: LoginAttempt
at
Citrix.Web.AuthControllers.Controllers.ExplicitAuthController.GetExplicitAuthResult(ActionType
type, Dictionary`2 postParams)
<!--NeedCopy-->