Active Directory 域服务(AD DS)完整配置教程目录
7. PKI 设计注意事项
规划 AD CS 部署时,需要考虑以下核心设计决策:
CA 层次结构
- • 单层(独立根 CA):适合小型组织,根 CA 同时也是颁发 CA
- • 两层(根 CA + 从属颁发 CA):推荐生产环境,根 CA 离线保护,从属 CA 在线颁发
- • 三层(根 CA + 中间 CA + 颁发 CA):大型多域组织
加密设置
| |
|---|
| ≥ 2048-bit RSA 或 256-bit ECC |
| |
| |
| 根据用途设定(Web Server: 1年, User: 2年) |
CRL 发布
- • CDP(CRL 分发点):指定 CRL 的发布位置(LDAP、HTTP、FILE)
- • AIA(颁发机构信息访问):指定 CA 证书下载地址
- • 建议同时配置 LDAP 和 HTTP CDP,确保内网和外网客户端均能访问 CRL
查看当前 CA 扩展配置
certutil -getconfig
certutil -viewExitCode
8. 证书分发(组策略)
前置条件
- • 带私钥的证书(可从
certlm.msc 导出) - • 具备 Domain Admins 或 Enterprise Admins 权限
通过组策略分发根证书(UI)
- 1. 在管理站打开 组策略管理(
gpmc.msc) - 2. 创建新 GPO 或编辑现有 GPO,链接到目标 OU
- 4. 导航至 计算机配置 → 策略 → Windows 设置 → 安全设置 → 公钥策略
- 5. 右键 "受信任的根证书颁发机构" → "导入"
![图片]()
- 6. 使用证书导入向导,选择
.cer 或 .crt 文件
![图片]()
为指定 OU 配置证书自动注册
通过组策略的 "自动注册" 设置,域计算机会自动申请和更新证书。此设置同时适用于计算机证书(计算机账户)和用户证书(用户账户)。
步骤 1:创建或编辑 GPO
- 2. 选择目标 OU,右键 → "在这个域中创建 GPO 并在此处链接"(或直接编辑已有 GPO)
步骤 2:配置自动注册
- 1. 在 GPO 编辑器中,导航到:
计算机配置 → Windows 设置 → 安全设置 → 公钥策略
- 2. 右侧找到 "证书服务客户端 - 自动注册",双击打开属性
- • 勾选 "续订过期证书、更新未决证书并删除吊销的证书"
![图片]()
步骤 3:确认证书模板已发布到 CA
自动注册的前提是企业 CA 已经将证书模板配置为 "要颁发的证书模板"。
- 2. 左侧展开 CA 名称 → 右键 "证书模板" → "新建" → "要颁发的证书模板"
- 3. 确认需要自动颁发的模板(如 User、计算机)已在列表中
步骤 4:客户端刷新组策略
在目标计算机上执行:
# 刷新组策略
gpupdate /force
# 或重启计算机,组策略会在启动时自动应用
验证客户端证书是否自动颁发
# 在客户端计算机上查看已颁发的证书
certutil -user -store My
# 查看自动注册状态
certutil -user -policystore My
客户端计算机在组策略生效后,会自动向企业 CA 申请计算机证书(如果使用计算机账户),域用户登录后会自动申请用户证书。
9. 导出带私钥的证书
UI 方式
- 1. 打开 certlm.msc(本地计算机证书管理)
- 2. 导航到要导出的证书(个人 或 受信任的根证书颁发机构 等)
- 5. 文件格式选择 "个人信息交换 - PKCS #12 (.PFX)"
- 6. 勾选 "包括证书路径中的所有证书"(方便完整迁移)
- 7. 设置密码保护私钥(加密方法选择 AES256-SHA256)
命令行方式
# 列出当前用户个人存储中的证书
certutil -user -store My
# 导出指定证书(需要私钥)
certutil -exportPFX My "<证书序列号或主题名>" "\\share\exports\mycert.pfx"
# PowerShell 方式
$cert = Get-ChildItem -Path Cert:\CurrentUser\My |
Where-Object { $_.Subject -like "*username*" }
Export-PfxCertificate -Cert $cert -FilePath "C:\temp\usercert.pfx" `
-Password (ConvertTo-SecureString -String "P@ssw0rd" -Force -AsPlainText)
导入导出的证书
# 导入 PFX 到目标机器
Import-PfxCertificate -FilePath "\\share\exports\mycert.pfx" `
-CertStoreLocation Cert:\LocalMachine\My `
-Password (ConvertTo-SecureString -String "P@ssw0rd" -AsPlainText -Force)
10. 配置证书吊销列表(CRL)
CRL(Ccertificate Revocation List)公布已被吊销的证书序列号,客户端在验证证书时会检查 CRL。
UI 方式配置 CRL 发布
- 4. 在 "选择扩展" 中选择 "CRL 分发点 (CDP)"
- 5. 点击 "添加",输入 CRL 发布路径:
http://pki.contoso.com/CertEnroll/<CAName><CRLNameSuffix>.crl
ldap:///CN=<CAName><CRLNameSuffix>,CN=CDP,CN=Public Key Services,CN=Services,<ConfigurationContainer><CRLNameSuffix>
file://\\pki.contoso.com\CertEnroll\<CAName><CRLNameSuffix>.crl
- 6. 勾选 "包含在 CRL。客户端用来找到此 CA 的位置" 和 "包含在已颁发证书的 CDP 扩展中"
- 7. 对 "颁发机构信息访问 (AIA)" 做类似配置
PowerShell 配置 CDP
# 查看当前 CDP 配置
certutil -getreg CA\CRLPublicationURLs
# 添加 HTTP CDP
certutil -setreg CA\CRLPublicationURLs "1:http://pki.contoso.com/CertEnroll/%38%8%9%c.crl"
手动发布 CRL
# 发布新的 CRL
certutil -crl
# 查看 CRL 信息
certutil -dump CRL
调整 CRL 发布周期
在 CA 属性 → "扩展" 选项卡中设置 "CRL 发布周期"(默认 1 周)。
11. 续订根 CA 证书
两种续订方式的区别
| |
|---|
| 使用现有密钥对 | 新证书公钥/私钥不变,旧证书链自动保持有效,最简单 |
| 使用新的密钥对 | 生成新密钥对,旧证书链需重建,适合密钥泄露或合规要求 |
使用现有密钥对续订(UI)
- 1. 打开 证书颁发机构 → 右键 CA 名称 → 所有任务 → 续订 CA 证书
![图片]()
- 3. 确认续订后,新证书保存在同一位置,文件名加
(1) 后缀
使用新密钥对续订(UI)
- 2. 续订后 CA 会生成 交叉证书,用于在所有客户端部署新根之前维持信任链
PowerShell 续订
# 续订 CA 证书(使用现有密钥)
Start-CaRenewal -CryptoProviderName "RSA#Microsoft Software Key Storage Provider" `
-HashAlgorithmName SHA256
# 续订 CA 证书(生成新密钥对)
Start-CaRenewal -CryptoProviderName "RSA#Microsoft Software Key Storage Provider" `
-HashAlgorithmName SHA256 -GenerateKey
续订后必须做的事
# 强制客户端刷新组策略,获取新根证书
gpupdate /force
12. 迁移证书颁发机构
当需要将 CA 迁移到新服务器时,按照以下流程操作保证业务连续性。
迁移前准备
备份 CA(3 种方式)
方式 1:服务器管理器 UI
- 1. 打开 证书颁发机构 → 右键 CA → 备份 CA
- 2. 勾选 "私钥和 CA 证书" 和 "证书数据库和证书数据库日志"
- 4. 备份完成后,停止 CertSvc 服务:
net stop certsvc
方式 2:PowerShell
Backup-CARoleService -Path "D:\CABackup"
Stop-Service -Name "certsvc"
方式 3:Certutil
certutil -backupdb D:\CABackup
certutil -backupkey D:\CABackup
net stop certsvc
从源服务器删除 CA 角色
# 在服务器管理器中通过 UI 删除,或:
Uninstall-AdcsCertificationAuthority -Force
⚠️ 重要:先完成备份并停止 CertSvc,再删除 CA 角色!
在目标服务器安装 CA
# 安装 AD CS 角色
Install-WindowsFeature AD-Certificate -IncludeManagementTools
# 还原 CA(使用现有密钥)
Restore-CARoleService -Path "D:\CABackup" -DatabasePassword (ConvertTo-SecureString "BackupPassword" -AsPlainText -Force)
# 或使用 certutil 还原
certutil -restore <BackupDirectory>
还原 CA 注册表设置
# 使用 regedit 导入之前导出的注册表文件
regedit /i <BackupDirectory>\CertSvcConfiguration.reg
还原证书模板列表(企业 CA)
# 记录旧模板列表(迁移前)
certutil -catemplates > catemplates.txt
# 在目标 CA 上还原
certutil -setcatemplates + <模板名称1>,<模板名称2>,<模板名称3>
迁移故障转移群集 CA
# 在每个群集节点上安装 CA
Install-AdcsCertificationAuthority -CAType "EnterpriseRootCA" `
-CryptoProviderName "RSA#Microsoft Software Key Storage Provider" `
-KeyLength 2048 -HashAlgorithmName SHA256
# 配置共享存储上的 CA 数据库和日志位置
# 使用故障转移群集管理器将 CertSvc 添加为群集资源
13. 证书信任与链
证书链验证
Windows 通过构建从终端实体证书到根 CA 的链来验证证书有效性:
用户证书 → 中间 CA(可选) → 根 CA(受信任根存储)
# 查看证书链
certutil -verify <证书文件.cer>
certutil -verify -urlfetch <证书文件.cer>
# 列出本地受信任根 CA
Get-ChildItem -Path Cert:\LocalMachine\Root
部署受信任根证书
方法 1:组策略自动分发(企业 CA)
企业根 CA 证书会在 CA 安装时自动发布到 AD DS 的 AIA 容器,域计算机会通过组策略自动信任新根 CA。
方法 2:手动导入
# 导入根证书到本地受信任根存储
Import-Certificate -FilePath "RootCA.cer" -CertStoreLocation Cert:\LocalMachine\Root
方法 3:通过 Web 下载(独立 CA)
https://<CA服务器>/certsrv/certcarc.asp
点击 "下载 CA 证书链"。
证书链强制下载(解决信任问题)
# 清除缓存的证书链
certutil -urlcache * delete
certutil -setreg chain\ChainCacheResyncFiletime +
# 或强制验证并重新获取链
certutil -f -dspublish <证书文件.cer> NTAUTHORITY\RootCA
附录:常用 Certutil 命令速查
| |
|---|
| certutil -CAinfo |
| certutil -getconfig |
| certutil -view -restrict "NotBefore>=2024-01-01" -out "SerialNumber,CommonName" |
| certutil -revoke <序列号> |
| certutil -crl |
| certutil -catemplates |
| certutil -backupdb <目录> + certutil -backupkey <目录> |
| certutil -restore <目录> |
| certutil -exportPFX <序列号> <输出.pfx> |
| certutil -verify <证书.cer> |
| certutil -CRL |