Windows_CA_运维文档
Windows 自建 CA 服务器 运维手册
1. 系统概述
- 产品名称:Windows Server 证书服务(Active Directory Certificate Services, AD CS)
- 操作系统版本:Windows Server 2016 / 2019 / 2022(请确认)
- CA 类型:企业根 CA / 企业从属 CA / 独立根 CA / 独立从属 CA(请勾选实际类型)
- 部署位置:数据中心 / IP 地址:________________(请填写)
主要功能:
- 证书颁发与管理(服务器证书、用户证书、代码签名证书等)
- 证书模板管理(自定义证书类型和属性)
- 证书吊销列表(CRL)发布与生命周期管理
- 密钥存档与恢复(Key Archival & Recovery)
- 基于策略的自动证书注册(Auto-Enrollment)
服务对象:
- 域内计算机(计算机证书)
- 域用户(用户证书、电子邮件加密)
- IIS/Web 服务器(SSL/TLS 证书)
- VPN/RADIUS 服务器(身份验证证书)
- 代码签名(开发/发布签名证书)
2. 系统架构
2.1 组件组成
| 组件 | 说明 | 部署方式 |
|---|---|---|
| 根 CA(Root CA) | 证书链的信任锚点,通常离线保存 | 物理机或虚拟机(离线) |
| 从属 CA(Subordinate CA) | 实际签发证书的 CA,在线服务 | 虚拟机 |
| 证书吊销列表(CRL) | 证书吊销状态发布 | 与从属 CA 同服务器 |
| AIA/CDP 发布点 | 证书链和 CRL 分发地址 | Web 服务器(IIS) |
| CA Web 注册 | 用户通过 Web 界面申请证书 | 可选组件 |
| 网络设备注册服务(NDES) | 为路由器/交换机等非域设备颁发证书 | 可选组件 |
2.2 网络拓扑
[根 CA(离线)]
↑
手动导入 CA 证书
↑
[从属 CA(在线)]
/ \
[IIS/AIA/CDP] [AD + 组策略]
| |
[证书分发点] [自动注册策略]
| |
[各客户端] [域计算机/用户]典型部署架构说明:
- 根 CA(离线):物理隔离,只在签发从属 CA 证书时开机
- 从属 CA(在线):7×24 运行,负责日常证书签发
- CRL 发布点:通常配置为 HTTP(IIS)和 LDAP(AD)
- 证书注册方式:通过组策略自动注册(推荐)或手动 Web 申请
2.3 依赖关系
- Active Directory:企业 CA 依赖 AD 发布证书模板和自动注册策略
- DNS:解析 CA 服务器主机名和 CRL 分发点 URL
- IIS:用于发布 CRL 和 AIA 的 Web 分发点
- 组策略:配置证书自动注册策略
- NTP:证书有效期的计算依赖于准确的系统时间
- HSM(可选):硬件安全模块用于密钥保护
3. 日常运维操作
3.1 启动与停止
启动顺序:
- 确保 AD 域控正常运行
- 启动从属 CA 服务器
- 确认 CA 服务(CertSvc)自动启动
- 确认 IIS(如启用 AIA/CDP)正常运行
- 检查证书服务状态
停止顺序:
- 先停止 CA 服务(停止新证书签发)
- 确认无正在处理的证书请求后关闭系统
CA 服务管理:
# 启动/停止/重启 CA 服务
net start certsvc
net stop certsvc
net restart certsvc
# 使用 PowerShell
Restart-Service CertSvc
# 查看服务状态
Get-Service CertSvc3.2 服务状态检查
基本状态检查:
# 检查 CA 服务是否运行
Get-Service CertSvc
# 预期输出:Running
# 检查 CA 配置信息
certutil -config
# 查看 CA 信息
certutil -CAInfo
# 查看 CA 签名证书信息
certutil -CATemplates
# 检查 CA 数据库状态
certutil -crl证书颁发统计:
# 查看已颁发的证书数量
certutil -view -out "Request.RequesterName, Certificate.ExpirationDate, Certificate.SerialNumber" -restrict "Request.StatusCode=3" | more
# 查看待处理的证书请求
certutil -view -out "RequestID, RequesterName, Request.RequestType" -restrict "Request.StatusCode=1"
# 查看已吊销的证书
certutil -view -out "RequestID, SerialNumber, RevocationDate" -restrict "Revocation.Reason<>0"CRL 状态检查:
# 查看当前 CRL
certutil -crl
# 查看 CRL 有效期
certutil -CRLInfo
# 检查 CRL 分发点
certutil -GetReg ca\CACRLPublicationURLs
certutil -GetReg ca\CACertPublicationURLs3.3 日志查看
关键日志位置:
| 日志/文件 | 路径 | 说明 |
|---|---|---|
| CA 数据库 | %SystemRoot%\System32\CertLog\ | 证书颁发日志 |
| CA 策略模块日志 | %SystemRoot%\System32\CertLog*.edb | 数据库文件 |
| 事件查看器 - 应用程序 | Event Viewer → Applications and Services Logs → Microsoft → Windows → CertificateServices | CA 操作事件 |
| 事件查看器 - 系统 | Event Viewer → Windows Logs → System | 系统相关事件 |
| IIS 日志 | %SystemRoot%\System32\LogFiles\W3SVC1\ | CRL 下载请求日志 |
查看 CA 事件日志:
# 查看 CA 服务事件日志
Get-WinEvent -LogName "Microsoft-Windows-CertificateServices-Client-Lifecycle-System/Operational" -MaxEvents 50
# 查看 CA 管理事件
Get-WinEvent -LogName "Microsoft-Windows-CertificateServices-Deployment/Operational" -MaxEvents 50
# 查看最近 24 小时的错误事件
Get-WinEvent -LogName "Microsoft-Windows-CertificateServices-Client-Lifecycle-System/Operational" |
Where-Object { $_.LevelDisplayName -eq "Error" -and $_.TimeCreated -gt (Get-Date).AddDays(-1) }查看证书请求日志:
# 查看最近 50 条证书请求
certutil -view -restrict "Request.RequestStatusCode=3" -out "RequestID, RequesterName, Certificate.NotBefore, Certificate.NotAfter" | more3.4 性能监控
关键监控指标:
| 指标 | 说明 | 告警阈值 |
|---|---|---|
| CA 服务运行状态 | CertSvc 是否在运行 | 非 Running 即告警 |
| 待处理请求队列 | 等待签发的请求数 | > 10 持续 1 小时 |
| 证书有效期剩余 | CA 根证书和从属 CA 证书的到期时间 | < 180 天 |
| CRL 更新时间 | 下一次 CRL 发布剩余时间 | < 7 天 |
| 磁盘空间 | CA 数据库和日志所在盘 | > 85% |
| 系统时间准确度 | NTP 同步状态 | 偏差 > 5 分钟 |
监控命令:
# 检查证书有效期
certutil -CAInfo | findstr /i "expiration"
# 检查 CA 数据库大小
Get-ChildItem "C:\Windows\System32\CertLog" | Measure-Object -Property Length -Sum
# 检查磁盘空间
Get-PSDrive C | Select-Object Used, Free
# 检查待处理请求数
certutil -view -restrict "Request.StatusCode=1" -out "RequestID" | findstr /i "Row count" 3.5 日常巡检 Checklist
每日巡检:
- [ ] 检查 CertSvc 服务运行状态
- [ ] 检查证书颁发是否有异常(大量失败请求)
- [ ] 检查系统事件日志中是否有 CA 相关错误
- [ ] 检查磁盘空间使用率
- [ ] 检查 NTP 时间同步状态
每周巡检:
- [ ] 检查待处理的证书请求队列
- [ ] 检查 CRL 发布是否正常,下次发布时间
- [ ] 检查近一周的证书颁发统计
- [ ] 检查 CA 数据库大小增长情况
- [ ] 检查 IIS/AIA 分发点是否正常访问
每月巡检:
- [ ] 检查 CA 根证书和从属 CA 证书的有效期
- [ ] 检查证书模板是否有需要更新
- [ ] 审核已颁发的证书,清理过期证书
- [ ] 检查吊销证书列表是否有异常
- [ ] 执行完整的 CA 备份
- [ ] 检查 CA 安全配置(权限、密钥保护)
4. 常见故障处理
4.1 故障列表
故障 1:证书申请失败("拒绝请求"或"策略不允许")
- 现象:用户或计算机在申请证书时被拒绝,返回"策略不允许"或"拒绝请求"
原因分析:
- 申请者没有证书模板的读取/申请权限
- 证书模板配置的安全权限不足
- 申请的证书模板被停用或已过期
- 证书模板版本不匹配
- 企业 CA 中模板发布状态不正确
解决步骤:
确认申请者 AD 账户所在 OU,检查证书模板权限:
- 打开 certtmpl.msc → 右键证书模板 → 属性 → 安全
- 确认申请者或所属组具有读取和申请权限
确认证书模板已发布:
- CA 管理控制台(certsrv.msc)→ 证书模板 → 确认模板在列表中
确认模板版本正确:
# 检查证书模板版本 certutil -CATemplates | findstr /i "<模板名称>"检查 CA 配置中的模板兼容性:
certutil -GetReg ca\CSP\*\*检查事件查看器中的具体错误原因:
Get-WinEvent -LogName "Microsoft-Windows-CertificateServices-Deployment/Operational" | Where-Object { $_.LevelDisplayName -eq "Error" } | Format-Table TimeCreated, Message -Wrap
故障 2:证书信任问题(客户端不信任颁发的证书)
- 现象:使用 CA 颁发的证书时,浏览器/应用提示"证书不受信任"
原因分析:
- 根 CA 证书未安装到客户端的受信任根证书颁发机构
- 从属 CA 证书链不完整
- AIA(颁发机构信息访问)配置错误
- 证书吊销列表(CRL)无法下载
解决步骤:
检查根 CA 证书是否已部署到所有客户端:
# 在客户端检查受信任根证书 certlm.msc → 受信任的根证书颁发机构 → 证书通过组策略推送根 CA 证书:
- 组策略管理 → 计算机配置 → Windows 设置 → 安全设置 → 公钥策略 → 受信任的根证书颁发机构
检查 AIA 配置:
# 检查 CA 的 AIA 配置 certutil -GetReg ca\CACertPublicationURLs # 确保包含 HTTP 和 LDAP 路径检查 CDP 配置:
certutil -GetReg ca\CACRLPublicationURLs # 确认 CRL 可以通过 HTTP 访问手动测试 CRL 访问:
# 在浏览器中测试 CRL URL 是否可以访问 # 例如:http://ca-server.domain.com/CertEnroll/<CA名称>.crl
故障 3:CRL 发布失败或 CRL 过期
- 现象:客户端报错"吊销信息不可用",或 CRL 文件显示已过期
原因分析:
- CRL 发布周期过长
- IIS 目录权限不足
- CA 数据库损坏
- 磁盘空间不足
- 网络问题导致无法发布到共享目录
解决步骤:
检查 CRL 状态:
certutil -crl # 确认 Next CRL Publish 时间手动发布 CRL:
# 强制发布 CRL(增量) certutil -CRL # 强制发布完整 CRL(全量发布) certutil -crl + | certutil -CRL检查 CRL 发布目录权限:
- IIS 虚拟目录(默认:%SystemRoot%\System32\CertSrv\CertEnroll)
- 确认 Everyone/Users 有读取权限
检查磁盘空间:
Get-PSDrive C | Select-Object Used, Free- 检查事件日志中的 CRL 发布错误
调整 CRL 发布周期(建议增量 CRL 每 1 天,完整 CRL 每 7 天):
certutil -setreg ca\CRLPeriod "1" # 完整 CRL 周期(天) certutil -setreg ca\CRLDeltaPeriod "1" # 增量 CRL 周期(小时) certutil -setreg ca\CRLOverlapPeriod "12" # 重叠周期(小时) net stop certsvc && net start certsvc
故障 4:CA 数据库损坏
- 现象:证书颁发失败,certutil 命令报数据库错误,事件日志显示 Jet 数据库错误
原因分析:
- 非正常关机导致数据库文件损坏
- 磁盘故障
- 数据库文件空间不足
- 数据库版本不兼容
解决步骤:
停止 CA 服务:
net stop certsvc使用 esentutl 修复数据库:
# 备份当前数据库 copy "C:\Windows\System32\CertLog\*.edb" "C:\CertLog_Backup\" # 运行数据库修复 esentutl /p "C:\Windows\System32\CertLog\CA.edb"修复完成后修复数据库状态:
esentutl /d "C:\Windows\System32\CertLog\CA.edb"启动 CA 服务:
net start certsvc验证修复结果:
certutil -view- 如果修复失败,从备份中恢复 CA 数据库
故障 5:CA 密钥或证书即将过期
- 现象:CA 根证书或从属 CA 证书将在 30-180 天内过期
原因分析:
- CA 证书有效期有限(通常根 CA 10-20 年,从属 CA 5-10 年)
- 没有及时续订
- 解决步骤:
从属 CA 证书续订:
# 方法一:使用现有密钥对续订
certutil -renew
# 方法二:使用新密钥对续订
certutil -renew -keys
# 重新发布 CRL 和 CA 证书
certutil -crl根 CA 证书续订(根 CA 需离线操作):
- 启动根 CA 服务器
- 打开 CA 管理控制台,右键 CA → 所有任务 → 续订 CA 证书
- 选择"生成新密钥对"或"使用现有密钥对"
- 将新根证书分发到所有客户端
- 重新签发从属 CA 证书
故障 6:证书吊销操作失败
- 现象:吊销证书时提示"访问被拒绝"或吊销后证书仍被信任
原因分析:
- 吊销权限不足
- CRL 未及时发布或客户端缓存过期
- 证书已被吊销或已过期
解决步骤:
检查吊销权限:
# 确认有吊销权限的用户 certutil -CAInfo | findstr /i "Manager"吊销证书:
# 按序列号吊销 certutil -revoke <序列号> <吊销原因代码> # 吊销原因代码:0=未指定, 1=密钥泄露, 3=CA泄露, 4=终止运营, 5=证书替换发布更新后的 CRL:
certutil -CRL在客户端验证吊销状态:
certutil -urlcache * delete certutil -f -verifystore My- 验证 CRL 中是否包含被吊销的证书
4.2 应急处理流程
CA 服务故障应急流程:
CA 服务不可用 / 证书颁发中断
|
┌────┴────┐
│ 检查服务 │ net start certsvc → 启动 CA 服务
└────┬────┘
↓
┌─────────┐
│ 检查事件 │ 查看事件日志确定故障原因
│ 日志 │
└────┬────┘
↓
┌─────────┐
│ 数据库 │ 如为数据库问题 → esentutl 修复
│ 修复 │ 或从备份恢复
└────┬────┘
↓
┌─────────┐
│ 临时方案 │ 如无法立即恢复 → 启用备用 CA
│ │ 或延长现有证书有效期
└────┬────┘
↓
┌─────────┐
│ 通知 │ 通知 IT 团队证书服务状态
│ │ 更新运维事件记录
└─────────┘5. 备份与恢复
5.1 需要备份的数据
| 备份项 | 说明 | 备份频率建议 |
|---|---|---|
| CA 数据库 | 所有的证书颁发记录、吊销信息 | 每日 |
| CA 私钥 | CA 签名密钥(最敏感的数据) | 安装时备份 + 每次续订后 |
| CA 证书 | CA 公钥证书 | 每日(可重新签发) |
| 配置文件 | CA 策略、模板配置 | 每周 |
| 证书模板 | 自定义证书模板 | 每次修改后 |
| 根 CA 数据 | 根 CA 的私钥和证书 | 安装时备份(离线存储) |
5.2 备份策略建议
使用 CA 内置备份工具(推荐):
# 使用 certutil 备份 CA(包含私钥、数据库和配置)
certutil -backup "D:\CABackup\Daily" --password <备份密码> --incremental
# 全量备份(首次或每周)
certutil -backup "D:\CABackup\Weekly" --password <备份密码>
# 备份 CA 私钥(导出为 PFX 文件)
certutil -exportPFX -p <密码> <CA名称> "D:\CABackup\CAKey.pfx"使用 Windows Server Backup:
# 安装 Windows Server Backup 功能
Install-WindowsFeature -Name Windows-Server-Backup
# 创建系统状态备份(包含 CA 数据)
wbadmin start systemstatebackup -backuptarget:D: -quiet根 CA 备份(离线保存):
# 根 CA 离线备份步骤:
# 1. 启动根 CA 服务器
# 2. 执行完整备份
certutil -backup "E:\RootCABackup" --password <复杂密码>
# 3. 将备份文件复制到加密的 USB 存储介质
# 4. 将 USB 存储存放在保险柜中备份保留策略:
- 每日备份保留 7 天
- 每周备份保留 4 周
- 每月备份保留 12 个月
- 根 CA 备份永久保留(至少保留两个版本)
5.3 恢复步骤
从备份恢复 CA:
# 1. 停止 CA 服务
net stop certsvc
# 2. 删除当前 CA 数据库(如有)
del "C:\Windows\System32\CertLog\*.*" /q
# 3. 恢复 CA 数据
certutil -restore "D:\CABackup\Daily" --password <备份密码>
# 4. 启动 CA 服务
net start certsvc
# 5. 验证恢复
certutil -view
certutil -CAInfo从备份恢复 CA 私钥:
# 1. 恢复 CA 私钥
certutil -importPFX "D:\CABackup\CAKey.pfx" -p <密码>
# 2. 验证私钥
certutil -key
# 3. 重启 CA 服务
net stop certsvc && net start certsvc6. 安全配置
6.1 账户权限管理
CA 管理角色:
| 角色/权限 | 说明 | 建议授予对象 |
|---|---|---|
| CA 管理员(Full Control) | CA 配置、续订、吊销所有权限 | 安全管理员(1-2人) |
| 证书管理员(Issue and Manage) | 审核和签发证书、吊销证书 | CA 操作员(2-3人) |
| 审查员(Auditor) | 只读查看证书和日志 | 审计人员 |
| 申请者 | 提交证书申请 | 域用户(通过模板权限控制) |
权限配置:
# 查看当前 CA 安全权限
certutil -GetReg ca\Security
# 常用安全组建议
# - CA_Admin:CA 管理员组
# - CA_Operators:证书审核操作员组
# - Cert_Requestors:证书申请者(通过 AD 组控制)安全管理建议:
- CA 管理员账户使用独立的管理账户(不与日常工作混用)
- 启用 AD 特权访问工作站(PAW)管理 CA
- 根 CA 使用离线存储,仅必要时连接网络
- 密钥使用 HSM 硬件保护(高安全环境)
6.2 防火墙规则
| 端口 | 协议 | 用途 | 来源限制 |
|---|---|---|---|
| 443 | TCP | CRL 发布点 (HTTPS) | 所有客户端 |
| 80 | TCP | CRL 发布点 (HTTP) | 所有客户端 |
| 135 | TCP | RPC(CA 管理) | 管理网段 |
| 445 | TCP | SMB(文件共享发布点) | 管理网段 |
| 5722 | TCP | RPC(CA 远程管理) | 管理网段 |
6.3 安全加固建议
密钥保护
- 根 CA 密钥离线存储,放在保险柜中
- 从属 CA 密钥使用 HSM 或软件加密保护
CA 私钥密码复杂度 20 位以上
# 启用强密钥保护 certutil -setreg ca\CSP\KeyLength 4096 certutil -setreg ca\CSP\HashAlgorithm SHA256
CA 配置安全
- 禁用 CA Web 注册(非必要不启用)
- 限制证书模板的申请权限(最小权限原则)
配置证书有效期策略(服务器证书 1-2 年,用户证书 1 年)
# 修改默认证书有效期 certutil -setreg ca\ValidityPeriod "2" certutil -setreg ca\ValidityPeriodUnits "Years"
CRL 安全
- CRL 签名使用 SHA256 以上算法
- CRL 有效期不宜过长(建议完整 CRL 7 天,增量 CRL 1 天)
- CDP 和 AIA 地址使用 HTTPS(如果可能)
审计与监控
- 启用 CA 审计(成功和失败操作)
- 配置 CA 事件日志转发到 SIEM
- 监控证书异常申请行为(批量申请、异常时间申请)
证书生命周期管理
- 建立证书到期预警机制(提前 90/60/30 天告警)
- 定期审查已颁发证书的用途和有效性
- 及时吊销泄露/不再使用的证书
7. 参考资料
- AD CS 官方文档:https://learn.microsoft.com/zh-cn/windows-server/networking/core-network-guide/cncg/server-certs/install-the-certification-authority
- 证书服务最佳实践:https://learn.microsoft.com/zh-cn/windows-server/identity/ad-cs/ad-cs-best-practices
- certutil 命令参考:https://learn.microsoft.com/zh-cn/windows-server/administration/windows-commands/certutil
- PKI 设计指南:https://learn.microsoft.com/zh-cn/previous-versions/windows/it-pro/windows-server-2012-r2-and-2012/hh831532(v=ws.11)
- 微软安全公告:https://msrc.microsoft.com/update-guide
相关联系人:
| 角色 | 姓名 | 联系电话 | 邮箱 |
|---|---|---|---|
| CA 管理员 | __ | __ | __ |
| 安全管理员 | __ | __ | __ |
| AD 管理员 | __ | __ | __ |
| 微软技术支持 | 400-820-3800 | — | — |
| 值班工程师 | __ | __ | __ |