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

相关推荐
excel11 小时前
Base62 和 Base64 有什么区别?
前端
风骏时光牛马12 小时前
大模型底层架构与AI源码深度剖析
前端
掘金挖土13 小时前
前端手摸手跑路之 AI 应用开发(九)
前端·后端
中文呀15 小时前
三维 GIS 离线缓存实战:逆向 CesiumOfflineCache,并亲手为它补上"自动更新"能力
前端
前进前进前进16 小时前
TRAE 全链路实战:做了一个警示牌一键生成器:纯 Canvas、单文件、零依赖
前端
小万74217 小时前
God‘s Eye View 深度解析:15 路公开信号 + CesiumJS 的浏览器级 OSINT 控制台,60 帧渲染的“真实间谍卫星模拟器”
前端
IT星宿17 小时前
浏览器标签页全是一个图标:我用名字哈希生成 favicon,让每个项目都有身份标识
前端
全栈项目管理程序猿17 小时前
ArcGIS JS 基础教程(32):体元系列 - VoxelSlice 体元切片
前端·javascript
拖孩19 小时前
AI 帮我写的小程序「厨菜记」上线满月了,挣了两百块!!!
前端·后端·微信小程序