Windows Server AD CS:根 CA、Web 证书模板与域内自动注册
1. 服务介绍
Active Directory Certificate Services(AD CS)用于在 Windows 域内签发、续期、吊销和验证数字证书。企业 CA 可以为 IIS HTTPS、LDAPS、VPN、计算机身份认证和用户身份认证提供统一证书信任。
本文以 DC 部署企业根 CA 为例:创建 CSK2021-ROOTCA,有效期 3 年;复制 Web Server 证书模板,创建有效期 2 年的 Web 模板;通过组策略启用域内计算机自动注册,并验证 AppSrv 是否自动获得证书。
> 根 CA 私钥是整个信任体系核心。实验环境可以使用 Enterprise Root CA;生产环境通常采用离线根 CA 加一层或多层在线颁发 CA,并严格保护私钥和备份。
2. 准备运行环境
• DC:Windows Server,已安装 Active Directory Domain Services 和 DNS,域名示例 chinaskills.com。
• 域权限:使用 Enterprise Admin、Domain Admin 或被授权的 AD CS 管理账号。
• 域成员:AppSrv、RouterSrv 和其他测试主机已加入域,DNS 指向域控制器。
• 角色:DC 安装 AD CS Certification Authority;本实验不需要勾选 Certification Authority Web Enrollment。
• 证书参数:CA 名称 CSK2021-ROOTCA,CA 有效期 3 年,Web 模板有效期 2 年。
• 申请目标:Web 证书必须包含实际站点 SAN,例如 www.chinaskills.com;不要只依赖 CN。
• 网络:域成员能访问 DC 的 LDAP、RPC、SMB 和证书服务相关端口;防火墙不能阻断自动注册。
• 备份:保存 CA 数据库、配置和私钥备份;不要把 PFX、私钥或导出密码放在共享目录。
3. 相关知识与注意点
• 根 CA 证书用于建立信任;Web 服务器证书用于证明具体域名身份。客户端通常需要信任根 CA/中间 CA,而不是把每台服务器证书手工导入为根信任。
• 证书有效期、SAN、Enhanced Key Usage、私钥和证书链缺一不可。IIS HTTPS 通常要求 Server Authentication EKU 和可访问的私钥。
• Enterprise CA 可以将证书模板发布到 Active Directory。域成员通过组策略读取自动注册策略,再向 CA 请求计算机或用户证书。
• 模板权限分为 Read、Enroll、Autoenroll 等。权限过宽会导致任意用户申请高权限模板,必须按安全边界授权。
• 模板勾选"允许导出私钥"会降低私钥保护强度,只在题目或明确业务需求要求时开启;服务器证书迁移时使用受保护 PFX,不要导出到公共共享。
• CA 有效期、模板有效期和证书实际有效期不是同一个概念。模板修改后,新申请证书才按新设置生成,已有证书不会自动延长。
• 自动注册失败常见原因:GPO 未生效、DNS/域信任异常、模板未发布、权限缺少 Autoenroll、RPC 被阻断、证书申请中的 SAN 不符合模板要求。
4. 实验步骤
4.1 检查域和服务器角色
在 DC 和 AppSrv 确认域解析、域成员关系和时间同步:
powershell
Get-ComputerInfo | Select-Object WindowsProductName,WindowsVersion,OsBuildNumber
Get-WindowsFeature AD-Domain-Services,DNS,ADCS-Cert-Authority
Resolve-DnsName dc.chinaskills.com
w32tm /query /status
证书认证依赖时间。域成员时间偏差过大时,Kerberos、自动注册和 HTTPS 验证都可能异常。
4.2 安装 AD CS Certification Authority
在 DC 的 Server Manager 中添加 AD CS,选择 Certification Authority。题目只要求证书颁发机构,不需要 Certification Authority Web Enrollment,因此不要额外安装不需要的 Web 注册功能:


安装完成后打开配置向导,选择:
• Enterprise CA:加入域并向 Active Directory 发布 CA 信息。
• Root CA:实验环境直接创建根 CA。
• Create a new private key:创建新的 CA 私钥。
• RSA、密钥长度、哈希算法:按实验版本和安全基线选择。
• Common name:CSK2021-ROOTCA。
• Validity period:3 Years。
• 数据库和日志目录:使用受保护的本地目录,并纳入备份。




安装完成后确认服务和 CA 配置:
powershell
Get-Service CertSvc
Get-WindowsFeature ADCS-Cert-Authority
certutil -getreg ca\CommonName
certutil -config - -ping
4.3 配置域内自动注册策略
使用组策略管理控制台创建或编辑适用于域计算机的 GPO。路径:
text
Computer Configuration
Policies
Windows Settings
Security Settings
Public Key Policies
Certificate Services Client - Auto-Enrollment
设置为 Enabled,并启用:
• Renew expired certificates, update pending certificates, and remove revoked certificates。
• Update certificates that use certificate templates。
原实验通过组策略控制域内计算机和用户自动注册:





在 AppSrv 强制刷新策略并触发证书注册:
powershell
gpupdate /force
certutil -pulse
gpresult /r /scope computer
4.4 创建 Web 证书模板
打开 CA 管理器:
text
certsrv.msc
证书模板复制流程:
-
展开 CA,右键 Certificate Templates,选择 Manage。
-
选择 Web Server 或符合安全基线的模板,执行 Duplicate Template。
-
General 中设置显示名称
Web,有效期设置为 2 年。 -
Subject Name 按题目选择"在请求中提供",申请时填写 SAN。
-
Extensions 确认 Server Authentication EKU。
-
Security 中只授予需要申请的域组 Read、Enroll 和 Autoenroll。
-
Private Key 选项仅在明确需要迁移时允许导出私钥。
原实验模板复制与有效期设置:






模板创建完成后,在 CA 管理器中发布模板:
text
Certificate Templates -> New -> Certificate Template to Issue -> Web
只有发布后的模板,域成员才能从该 CA 申请。确认模板名称出现在 CA 的 Certificate Templates 节点:



4.5 为 Web 站点申请证书
在 AppSrv 上刷新组策略后,使用 MMC 或证书管理器申请计算机证书。申请时:
• 模板选择 Web。
• Subject/SAN 填写实际站点名,例如 www.chinaskills.com。
• 确认颁发者为 CSK2021-ROOTCA。
• 确认证书位于 Local Computer\Personal,且包含私钥。
检查证书:
powershell
Get-ChildItem Cert:\LocalMachine\My |
Select-Object Subject,Issuer,NotAfter,HasPrivateKey,Thumbprint
原实验导出 Web 证书:

需要让其他域成员信任 CA 时,分发的是 CA 根证书或通过域策略自动分发的信任链。不要把只含服务器公钥的 .cer 当作根 CA 证书;需要迁移服务器私钥时,使用受保护的 PFX,并限制访问权限:
powershell
certutil -ca.cert C:\Temp\CSK2021-ROOTCA.cer
在域成员上检查受信任根:
powershell
Get-ChildItem Cert:\LocalMachine\Root |
Where-Object Subject -match 'CSK2021-ROOTCA'
4.6 检查自动注册结果
AppSrv 执行:
powershell
gpupdate /force
certutil -pulse
Get-ChildItem Cert:\LocalMachine\My |
Select-Object Subject,Issuer,NotAfter,HasPrivateKey,Thumbprint
原实验自动颁发和证书查看:





在 DC 上确认自动注册策略和模板发布状态:
powershell
certutil -config - -catemplates
Get-GPResultantSetOfPolicy -ReportType Html -Path C:\Temp\gpresult.html
域内证书模板和自动注册策略截图:




5. 验证结果
5.1 CA 服务和模板验证
powershell
Get-Service CertSvc
certutil -config - -ping
certutil -config - -catemplates
certutil -ca.cert C:\Temp\CSK2021-ROOTCA.cer
预期:CertSvc 为 Running;CA 可响应;模板列表包含 Web;导出的 CA 证书 Subject、Issuer 和有效期符合题目要求。
5.2 域成员自动注册验证
powershell
gpupdate /force
certutil -pulse
Get-ChildItem Cert:\LocalMachine\My |
Format-Table Subject,Issuer,NotAfter,HasPrivateKey,Thumbprint
Get-ChildItem Cert:\LocalMachine\Root |
Where-Object Subject -match 'CSK2021-ROOTCA'
预期:域成员 Local Computer\Personal 出现由 CSK2021-ROOTCA 签发的计算机或 Web 证书;根 CA 出现在 Trusted Root Certification Authorities;证书包含私钥和有效期。
5.3 Web 证书用途验证
powershell
$cert = Get-ChildItem Cert:\LocalMachine\My |
Where-Object { $_.Subject -match 'www\.chinaskills\.com' } |
Select-Object -First 1
$cert | Format-List Subject,Issuer,NotAfter,HasPrivateKey,EnhancedKeyUsageList,DnsNameList
在 IIS 绑定 HTTPS 后,使用浏览器或 curl.exe -vk https://www.chinaskills.com/ 检查证书链、域名和有效期。生产环境不要用 -k 跳过证书验证。
6. 常见问题排查
• **模板列表没有 Web**:确认模板已复制、权限包含 Read/Enroll/Autoenroll,并已在 CA Certificate Templates 节点发布。
• **证书无法自动注册**:检查 GPO 生效、DNS、域信任、时间同步、RPC/SMB 防火墙和模板权限;执行 gpresult /r 和 certutil -pulse。
• **证书没有私钥**:申请时使用 Local Computer\Personal,并确认模板允许服务器申请;导入 .cer 公钥不会产生私钥。
• **IIS HTTPS 报证书不匹配**:检查 SAN,而不是只看 Subject/CN;确认 IIS 绑定 Host name 和访问域名一致。
• **客户端不信任 CA**:分发根 CA 证书或修复域策略,不要把服务器证书当作根证书导入。
• **CA 服务无法启动**:检查 CA 数据库、日志目录、服务账号、系统时间和备份恢复状态;不要直接删除 CA 数据库。
• **模板有效期不正确**:确认新申请使用 Web 模板,已有证书不会因模板修改自动延长;重新申请后再检查 NotAfter。
• **私钥导出风险**:只在明确需要迁移时启用导出私钥,PFX 使用强密码并限制存储权限;生产环境优先使用密钥不可导出策略。