Windows Server AD CS:根 CA、Web 证书模板与域内自动注册

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

证书模板复制流程:

  1. 展开 CA,右键 Certificate Templates,选择 Manage。

  2. 选择 Web Server 或符合安全基线的模板,执行 Duplicate Template。

  3. General 中设置显示名称 Web,有效期设置为 2 年。

  4. Subject Name 按题目选择"在请求中提供",申请时填写 SAN。

  5. Extensions 确认 Server Authentication EKU。

  6. Security 中只授予需要申请的域组 Read、Enroll 和 Autoenroll。

  7. 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 使用强密码并限制存储权限;生产环境优先使用密钥不可导出策略。

相关推荐
剪刀石头布啊1 小时前
泛洪DFS、BFS
前端
剪刀石头布啊1 小时前
为什么React组件很少前缀,而vue的不少组件都有前缀
前端
剪刀石头布啊1 小时前
gird网格布局
前端
啃火龙果的兔子1 小时前
Google Chrome(谷歌浏览器)常用快捷键
前端·chrome
剪刀石头布啊1 小时前
js真的是单线程实现异步并发么?
前端
剪刀石头布啊1 小时前
js中改变this指向的操作有哪些
前端
剪刀石头布啊1 小时前
vue、react 列表中使用 index 作为 key 的话,修改某一个元素后会发生什么
前端
方方洛1 小时前
glowglow:语言无关的语法高亮器是怎么实现的
前端·前端框架
java_nnnn2 小时前
JavaEE进阶-HTML基础认识
前端·java-ee·html