在使用VMware Horizon虚拟桌面基础设施(VDI)部署中,为Connection Server或Composer配置SSL证书是保障安全通信的关键步骤。许多企业选择利用现有的Windows Server证书服务(Active Directory Certificate Services, AD CS)来颁发这些证书,以实现内部管理的统一性和便捷性。然而,一个普遍且令人困扰的问题随之而来:尽管证书已成功颁发并安装在Horizon服务器上,但客户端在访问Web界面时,浏览器或Horizon View Client仍会提示“证书不受信任”的警告。
这一问题的核心在于证书信任链的完整性与客户端/服务器对该信任链的认知。本文将深入剖析导致这一现象的根本原因,并提供一套系统的排查与解决策略。
一、问题根源分析:信任链的断裂与缺失
“证书不受信任”的提示并非意味着证书本身无效,而是指颁发该证书的机构(即我们的Windows CA)其根证书或中间证书,并未被客户端或Horizon服务器自身的受信任证书存储所识别。这通常由以下几个因素导致:
- 客户端信任缺失:这是最常见的原因。企业内部的Windows CA并非公共的受信任CA(如DigiCert, Let's Encrypt等),其根证书默认不会被外部操作系统、浏览器或Horizon View Client预装。因此,客户端无法验证从Horizon服务器接收到的证书是否由一个它信任的机构所颁发。
- 服务器端信任链不完整:在某些情况下,即使证书是由Windows CA颁发,但在将证书导入到Horizon服务器时,可能没有正确包含所有必要的中间证书。SSL/TLS通信需要一个完整的证书链,从最终实体证书(即Horizon服务器的证书)一直回溯到受信任的根证书。如果链条在中间环节断裂,服务器在呈现证书时将无法提供完整的信任路径。
- 证书模板配置不当:Windows CA上的证书模板如果配置不正确,可能导致颁发的证书缺少关键的“增强型密钥用法”(Enhanced Key Usage,如“服务器身份验证”)或“使用者备用名称”(Subject Alternative Name, SAN)扩展。现代浏览器和应用程序(包括Horizon)强烈依赖SAN来匹配域名,缺少此项可能导致信任失败。
- CRL/OCSP分发点不可达:证书中包含的“CRL分发点”(CRL Distribution Point, CDP)或“授权信息访问”(Authority Information Access, AIA,通常用于OCSP)扩展指向的URL必须是客户端和服务器都可访问的。如果这些URL无法访问,证书的撤销状态就无法验证,从而可能被视为不受信任。
二、实战排查与解决方案
针对上述问题根源,以下是具体的排查和解决步骤:
1. 确保客户端信任Windows CA根证书
这是解决问题的首要步骤。客户端必须信任颁发Horizon服务器证书的根CA和所有中间CA。
- 域环境 GPO 部署:在Active Directory域环境中,最有效的方法是通过组策略对象(GPO)将根CA证书和任何中间CA证书分发到所有域成员计算机的“受信任的根证书颁发机构”和“中间证书颁发机构”存储中。创建或编辑一个GPO,导航至“计算机配置” -> “策略” -> “Windows 设置” -> “安全设置” -> “公钥策略” -> “受信任的根证书颁发机构”/“中间证书颁发机构”,然后导入您的CA证书。
- 手动导入:对于非域成员或少量测试机器,可以手动导出CA根证书(通常为.cer文件)并在客户端机器上通过MMC控制台导入到相应的证书存储。
2. 验证并导入完整的证书链到Horizon服务器
当从Windows CA获取证书后,请确保其包含完整的信任链。
- 导出完整证书链:在Windows CA或颁发了证书的服务器上,通过证书管理单元导出证书时,选择包含所有扩展属性和“导出证书路径中的所有证书(如果可能)”选项,生成一个包含完整链的PFX文件。
- 导入到Horizon服务器:将包含完整链的PFX文件导入到Connection Server或Composer的“计算机账户”下的“个人”证书存储中。Windows通常会自动将中间证书放置到正确的“中间证书颁发机构”存储中,但仍需手动检查。
- 检查证书链:在Horizon服务器的证书管理单元中,找到导入的证书,双击打开,切换到“证书路径”选项卡。确保路径完整且所有证书状态均显示为“此证书正常”。
3. 检查证书模板与SAN配置
- 密钥用法:确保颁发的证书在“详细信息”选项卡中,“增强型密钥使用”包含“服务器身份验证(1.3.6.1.5.5.7.3.1)”。
- SAN名称:至关重要!证书的“使用者备用名称”必须包含客户端用于访问Horizon服务器的所有FQDN。例如,如果客户端通过
horizon.yourdomain.com访问,则SAN必须包含此名称。如果没有,请重新配置证书模板并重新颁发证书。
4. 确保CRL/OCSP分发点可达
- 在Horizon服务器和部分客户端上,尝试通过浏览器访问证书“详细信息”中“CRL分发点”或“授权信息访问”下指定的HTTP URL。确保这些URL可达且能够下载CRL文件或获取OCSP响应。如果不可达,需要检查防火墙、网络路由或CA服务的配置。
5. 在Horizon Administrator中选择正确证书并重启服务
- 登录Horizon Administrator控制台,导航至“View 配置” -> “服务器” -> “Connection Servers/Security Servers”选项卡,编辑相应的服务器,在“SSL证书”下拉菜单中选择刚刚导入的正确证书。应用更改后,务必重启相关的Horizon服务(如VMware Horizon Connection Server服务)。
三、预防与最佳实践
- 专用证书模板:为Horizon服务器创建或使用一个专用的Web服务器证书模板,确保其包含正确的密钥用法和SAN扩展配置。
- 自动化部署:利用GPO自动化分发根证书和中间证书,确保所有客户端保持信任更新。
- 定期检查:定期检查证书的有效期,并在到期前及时更新,避免服务中断。
对于不希望自行搭建CA或需要快速获取受信任证书的用户,也可以考虑使用提供免费SSL证书服务的平台,例如lcjmSSL,它能简化证书获取流程,提供公共信任的证书,省去内部CA信任分发的复杂性,但需注意其证书的有效期管理和适用于互联网可访问的服务。
通过上述详细的排查与解决步骤,您应能成功解决Windows CA颁发证书后Horizon Connection Server或Composer证书不受信任的问题,为您的VDI环境提供一个安全、无缝的用户体验。