作者:Jitesh Thakur、Meera Mohideen、Windows Group 的技术顾问。 Ankit Tyagi Windows Group 支持工程师
概要
本文提供了在 443 以外的自定义端口上实施证书注册策略 Web 服务 (CEP) 和证书注册 Web 服务 (CES) 的分步说明,以实现基于证书密钥的续订,以利用 CEP 和 CES 的自动续订功能。
本文还介绍了 CEP 和 CES 的工作原理,并提供了设置指南。
注释
本文中包含的工作流适用于特定方案。 相同的工作流程可能不适用于不同的情况。 但是,原则保持不变。
免责声明:此设置是针对特定要求创建的,其中您不希望将端口 443 用于 CEP 和 CES 服务器的默认 HTTPS 通信。 尽管这种设置是可能的,但它的可支持性有限。 如果您仔细遵循本指南,并与提供的 Web 服务器配置保持最小偏差,客户服务和支持将为您提供最佳帮助。
情景
对于此示例,说明基于使用以下配置的环境:
具有 Active Directory 证书服务 (AD CS) 公钥基础结构 (PKI) 的 Contoso.com 林。
在服务账户下运行的一台服务器上配置的两个 CEP/CES 实例。 一个实例使用用户名和密码进行初始注册。 另一个版本使用基于证书的身份验证,在仅续订模式下进行基于密钥的续订。
用户拥有工作组或未加入域的计算机,以使用用户名和密码凭据注册计算机证书。
通过 HTTPS 从用户到 CEP 和 CES 的连接发生在自定义端口(如 49999)上。 (此端口是从动态端口范围中选择的,不会被任何其他服务用作静态端口。
当证书生存期接近尾声时,计算机使用基于证书的 CES 密钥续订通过同一通道续订证书。
配置说明
概述
为基于密钥的续订配置模板。
作为先决条件,请配置 CEP 和 CES 服务器以进行用户名和密码身份验证。 在此环境中,我们将实例称为 “CEPCES01”。
使用 PowerShell 配置另一个 CEP 和 CES 实例,以便在同一服务器上进行基于证书的身份验证。 CES 实例使用服务帐户。
在此环境中,我们将实例称为 “CEPCES02”。 使用的服务帐户是“cepcessvc”。
配置客户端设置。
配置
本节提供配置初始注册的步骤。
注释
您还可以配置任何用户服务帐户、MSA 或 GMSA,以便 CES 正常工作。
作为先决条件,您必须使用用户名和密码身份验证在服务器上配置 CEP 和 CES。
为基于密钥的续订配置模板
您可以复制现有计算机模板,并配置模板的以下设置:
在证书模板的 Subject Name 选项卡上,确保选中 Supply in the Request 和 Use subject information from existing certificates for autoenrollment renewal requests 选项。
切换到 Issuance Requirements 选项卡,然后选中 CA Certificate Manager approval 复选框。
将 Read 和 Enroll 权限分配给此模板的 cepcessvc 服务帐户。
在 CA 上发布新模板。
注释
确保将模板上的兼容性设置设置为 Windows Server 2012 R2 ,因为存在一个已知问题,即如果将兼容性设置为 Windows Server 2016 或更高版本,模板将不可见。 有关详细信息,请参阅 无法从基于 Windows Server 2016 或更高版本的 CA 或 CEP 服务器中选择与 Windows Server 2016 CA 兼容的证书模板。
配置 CEPCES01 实例
步骤 1:安装实例
要安装 CEPCES01 实例,请使用以下任一方法。
方法 1
有关启用 CEP 和 CES 进行用户名和密码身份验证的分步指南,请参阅以下文章:
注释
如果您同时配置了用户名和密码身份验证的 CEP 和 CES 实例,请确保不要选择“启用 Key-Based 续订”选项。
方法 2
您可以使用以下 PowerShell cmdlet 安装 CEP 和 CES 实例:
Import-Module ServerManager
Add-WindowsFeature Adcs-Enroll-Web-Pol
Add-WindowsFeature Adcs-Enroll-Web-Svc
Install-AdcsEnrollmentPolicyWebService -AuthenticationType Username -SSLCertThumbprint "sslCertThumbPrint"
此命令通过指定用户名和密码用于身份验证来安装证书注册策略 Web 服务 (CEP)。
注释
在此命令中, <SSLCertThumbPrint> 是要绑定 IIS 的证书的指纹。
Install-AdcsEnrollmentWebService -ApplicationPoolIdentity -CAConfig "CA1.contoso.com\contoso-CA1-CA" -SSLCertThumbprint "sslCertThumbPrint" -AuthenticationType Username
此命令安装证书注册 Web 服务 (CES),以将证书颁发机构用于计算机名称 CA1.contoso.com 和 CA 公用名 contoso-CA1-CA。 CES 的身份被指定为默认应用程序池身份。 身份验证类型为 username。 SSLCertThumbPrint 是要绑定 IIS 的证书的指纹。
步骤 2:检查 Internet Information Services (IIS) 管理器控制台
成功安装后,您希望在 Internet Information Services (IIS) Manager 控制台中看到以下显示。
在 Default Web Site (默认网站) 下,选择 ADPolicyProvider_CEP_UsernamePassword,然后打开 Application Settings (应用程序设置)。 记下 ID 和 URI。
您可以添加 Friendly Name 进行管理。
配置 CEPCES02 实例
步骤 1:在同一服务器上安装 CEP 和 CES 以进行基于密钥的续订。
在 PowerShell 中运行以下命令:
Install-AdcsEnrollmentPolicyWebService -AuthenticationType Certificate -SSLCertThumbprint "sslCertThumbPrint" -KeyBasedRenewal
此命令安装证书注册策略 Web 服务 (CEP) 并指定证书用于身份验证。
注释
在此命令中, <SSLCertThumbPrint> 是要绑定 IIS 的证书的指纹。
基于密钥的续订允许证书客户端使用其现有证书的密钥进行身份验证来续订其证书。 在基于密钥的续订模式下,该服务仅返回为基于密钥的续订设置的证书模板。
Install-AdcsEnrollmentWebService -CAConfig "CA1.contoso.com\contoso-CA1-CA" -SSLCertThumbprint "sslCertThumbPrint" -AuthenticationType Certificate -ServiceAccountName "Contoso\cepcessvc" -ServiceAccountPassword (read-host "Set user password" -assecurestring) -RenewalOnly -AllowKeyBasedRenewal
此命令安装证书注册 Web 服务 (CES),以将证书颁发机构用于计算机名称 CA1.contoso.com 和 CA 公用名 contoso-CA1-CA。
在此命令中,证书注册 Web 服务的身份被指定为 cepcessvc 服务帐户。 身份验证类型为 certificate。 SSLCertThumbPrint 是要绑定 IIS 的证书的指纹。
RenewalOnly cmdlet 允许 CES 在仅续订模式下运行。 AllowKeyBasedRenewal cmdlet 还指定 CES 接受注册服务器的基于密钥的续订请求。 这些是用于身份验证的有效客户端证书,不直接映射到安全主体。
注释
服务帐户必须是服务器上 IIS_IUSRS 组的一部分。
步骤 2 检查 IIS Manager 控制台
成功安装后,您希望在 IIS Manager 控制台中看到以下显示。
在 Default Web Site 下选择 KeyBasedRenewal_ADPolicyProvider_CEP_Certificate 并打开 Application Settings。 记下 ID 和 URI。 您可以添加 Friendly Name 进行管理。
注释
如果实例安装在新服务器上,请仔细检查 ID,以确保该 ID 与CEPCES01实例中生成的 ID 相同。 如果值不同,您可以直接复制并粘贴该值。
完成证书注册 Web 服务配置
要为 CEP 和 CES 的功能注册证书,必须在 Active Directory 中配置工作组的计算机帐户,然后在服务帐户上配置约束委派。
步骤 1:在 Active Directory 中创建工作组计算机的计算机帐户
此帐户用于对基于密钥的续订和证书模板上的 Publish to Active Directory 选项进行身份验证。
注释
您不必对客户端计算机进行域加入。
步骤 2:为约束委派 (S4U2Self) 配置服务帐户
运行以下 PowerShell 命令以启用约束委派(S4U2Self 或任何身份验证协议):
Get-ADUser -Identity cepcessvc | Set-ADAccountControl -TrustedToAuthForDelegation $True
Set-ADUser -Identity cepcessvc -Add @{'msDS-AllowedToDelegateTo'=@('HOST/CA1.contoso.com','RPCSS/CA1.contoso.com')}
注释
在此命令中, <cepcessvc> 是服务帐户, <CA1.contoso.com> 是证书颁发机构。
重要
在此配置中,我们没有在 CA 上启用 RENEWALONBEHALOF 标志,因为我们使用约束委派为我们执行相同的工作。 这样,我们就可以避免将服务账户的权限添加到 CA 的安全性中。
步骤 3:在 IIS Web 服务器上配置自定义端口
在 IIS Manager 控制台中,选择 Default Web Site(默认网站)。
在作窗格中,选择 Edit Site Binding。
将默认端口设置从 443 更改为您的自定义端口。 示例屏幕截图显示了 49999 的端口设置。
步骤 4:在 Active Directory 上编辑 CA 注册服务对象
在域控制器上,打开 adsiedit.msc。
连接到 Configuration 分区,然后导航到 CA enrollment services 对象:
CN=ENTCA,CN=注册服务,CN=公钥服务,CN=服务,CN=配置,DC=contoso,DC=com
右键单击并编辑 CA 对象。 通过将自定义端口与应用程序设置中找到的 CEP 和 CES 服务器 URI 结合使用,更改 msPKI-Enrollment-Servers 属性。 例如:
140https://cepces.contoso.com:49999/ENTCA_CES_UsernamePassword/service.svc/CES0 181https://cepces.contoso.com:49999/ENTCA_CES_Certificate/service.svc/CES1
配置客户端计算机
在客户端计算机上,设置 Enrollment policies (注册策略) 和 Auto-Enrollment (自动注册) 策略。 为此,请执行以下步骤:
选择 StartRun(开始>运行),然后输入 gpedit.msc。
转到计算机配置>、Windows 设置>、安全设置,然后单击公钥策略。
启用 Certificate Services Client - Auto-Enrollment 策略 以匹配以下屏幕截图中的设置。
启用 Certificate Services Client - Certificate Enrollment Policy。
a。 单击 Add (添加 ) 以添加注册策略,然后输入我们在 ADSI 中编辑的带有 UsernamePassword 的 CEP URI。
b. 对于 Authentication type (身份验证类型),选择 Username/password (用户名/密码)。
选项c. 将优先级设置为 10,然后验证策略服务器。
注释
确保端口号已添加到 URI 中,并且在防火墙上允许该端口号。
通过 certlm.msc 为计算机注册第一个证书。
选择 KBR 模板并注册证书。
再次打开 gpedit.msc 。 编辑 Certificate Services Client – Certificate Enrollment Policy(证书服务客户端 – 证书注册策略),然后添加基于密钥的续订注册策略:
a。 单击 Add,输入我们在 ADSI 中编辑的带有 Certificate 的 CEP URI。
b. 将优先级设置为 1,然后验证策略服务器。 系统将提示您进行身份验证并选择我们最初注册的证书。
注释
确保基于密钥的续订注册策略的优先级值低于用户名密码注册策略优先级的优先级。 第一个优先级为最低优先级。
测试设置
要确保自动续订正常工作,请使用 mmc 续订具有相同密钥的证书,以验证手动续订是否正常工作。 此外,在续订时,系统应提示您选择证书。 您可以选择我们之前注册的证书。 提示是预期的。
打开计算机个人证书存储,并添加存档的证书视图。 为此,请将本地计算机帐户管理单元添加到 mmc.exe,通过单击突出显示 证书(本地计算机),单击 mmc 右侧或顶部的作选项卡中的 view,单击 view options,选择 Archived certificates,然后单击 OK。
方法 1
运行下面的命令:
certreq -machine -q -enroll -cert <thumbprint> renew
方法 2
将客户端计算机上的时间和日期提前到证书模板的续订时间。
例如,证书模板配置了 2 天有效期设置和 8 小时续订设置。 示例证书于当月 18 日凌晨 4:00 颁发,于 20 日凌晨 4:00 过期。 自动注册引擎在重新启动时触发,并且每隔 8 小时(大约)触发一次。
因此,如果您将时间提前到 19 日晚上 8:10,因为我们的续订窗口在模板上设置为 8 小时,则运行 Certutil -pulse(以触发 AE 引擎)将为您注册证书。
测试完成后,将时间设置恢复为原始值,然后重新启动客户端计算机。
注释
前面的屏幕截图是一个示例,用于演示自动注册引擎按预期工作,因为 CA 日期仍设置为 18 日。 因此,它将继续颁发证书。 在现实生活中,不会发生如此大量的续订。
参考文献
Install-AdcsEnrollmentPolicyWebService
另请参阅
Active Directory 证书服务 (AD CS) 公钥基础结构 (PKI) 常见问题解答 (FAQ)
如何在 Web 注册代理页面的自定义服务帐户上配置 Kerberos 约束委派(仅限 S4U2Proxy 或 Kerberos)