// 红队渗透 · 2025-09-14

学习使用certify生成AD CS证书

什么是数字证书?

想象一下,你要去银行开户,需要身份证来证明你是你。数字证书就是网络上的“身份证”,它包含你的信息(如名字、邮箱)和一个“签名”(由证书颁发机构 CA 签发),证明它是真实的。证书常用于:

  • 登录系统(比如 Kerberos 认证)。
  • 加密网站(HTTPS)。
  • 安全测试(渗透测试中,生成证书来模拟攻击)。

在 AD 环境中,证书由 AD CS(Active Directory Certificate Services)管理。它像一个“证书工厂”,你提交申请(请求),工厂根据“模板”(蓝图)生成证书。Certipy 是一个免费的 Python 工具,帮助你从命令行请求证书,常用于安全研究或测试。

生成证书不是随意的——你需要权限(如用户名和密码),否则工厂会拒绝。其过程则像填表格:提供基本信息、工厂细节、证书内容。不是所有字段都必须填,有些有默认值。

生成证书需要哪些字段?

1. 认证字段:证明你是合法申请人

这些是“入门票”,告诉系统“你是谁”。没有这些,请求会失败。

  • 用户名(-u <用户名>):

    • 含义:你的账户名,通常写成“用户名@域名”,比如“user@example.com”。域名是你的公司或组织的网络名。
    • 是否必须:是的(或用其他认证方式代替)。例子:如果你是“ca-user@confidence.com”,就写这个。
  • 密码(-p <密码>):

    • 含义:你的账户密码。
    • 是否必须:如果用密码登录,是的。但可以用“哈希”代替(见下面)。
  • 哈希(-hashes <NTLM 哈希>):

    • 含义:密码的加密版本,即NTLM hash。
    • 是否必须:否(密码或这个,二选一)。
  • 域控制器 IP(-dc-ip <IP 地址>)

2. 证书工厂字段:指定在哪里和怎么生成

这些决定证书从哪个“工厂”来,用什么“模具”。

  • 证书颁发机构(-ca <CA 名字>):

    • 含义:CA 的名字,比如“confidence-DC-CA”。CA 是“签发官”,像公章盖章处。
    • 为什么需要:告诉工具去哪个 CA 申请。不同 CA 有不同规则。
    • 怎么用:-ca 'confidence-DC-CA'。先用 certipy-ad find 命令查出 CA 列表。
    • 是否必须:是的。没有这个,请求无处可去。
  • 目标 FQDN(-target <完整域名>):

    • 含义:CA 服务器的完整网络名,比如“dc01.example.com”。FQDN 是“Fully Qualified Domain Name”的缩写,像详细地址。
    • 为什么需要:精确指定连接哪个服务器,尤其是远程 CA。
    • 怎么用:-target 'dc01.example.com'。
    • 是否必须:是的,如果 CA 不在本地。
  • 模板(-template <模板名字>):

    • 含义:证书的“蓝图”名字,比如“ca-login”或默认的“User”。模板定义证书的样子和用途。
    • 为什么需要:不同模板有不同功能。比如“User”模板用于用户登录,“Machine”用于电脑。选错模板,证书可能没用。
    • 怎么用:-template 'ca-login'。用 certipy-ad find 查可用模板,尤其找“易受攻击”的(用于测试)。
    • 是否必须:否,默认是“User”。但自定义时,必须指定。

3. 证书内容字段:定制证书的“个人信息”

这些让证书“个性化”,决定它属于谁、用于什么。

  • UPN(-upn <用户主要名称>):

    • 含义:用户的主要身份,像邮箱格式,比如“administrator@example.com”。UPN 是“User Principal Name”的缩写。
    • 为什么需要:证书的“备用名”,用于登录系统(Kerberos 认证)。在测试中,能伪装成别人。
    • 怎么用:-upn 'administrator@example.com'。如果模板允许,指定任意 UPN。
    • 是否必须:否。但想生成针对特定用户的证书,就需要。
  • SID(-sid <安全标识符>):

    • 含义:Windows 的“内部 ID”,一串数字如“S-1-5-21-…-500”。
    • 为什么需要:增强证书的真实性,像添加“身份证号”。
    • 怎么用:-sid 'S-1-5-21-...-500'。先用 certipy-ad account 查 SID。
    • 是否必须:否,但和 UPN 搭配用更好。
  • DNS 名(-dns <DNS 名字>):

    • 含义:电脑的网络名,比如“computer.example.com”。
    • 为什么需要:证书用于机器时,作为“备用名”。
    • 怎么用:-dns 'dc01.example.com'。
    • 是否必须:否,主要机器证书用。
  • 主题(-subject <主题名>):

    • 含义:证书的“正式标题”,格式如“CN=Admin,DC=example.com”(CN 是 Common Name)。
    • 为什么需要:定义证书主体是谁。
    • 怎么用:-subject 'CN=User,DC=domain'。
    • 是否必须:否,模板有时自动填。

4. 其他可选字段

  • 密钥大小(-key-size <大小>):证书“锁”的强度,默认 2048。-key-size 4096 更安全。
  • PFX 文件(-pfx <文件>):用旧证书请求新一个。-pfx 'old.pfx'。
  • 代他人请求(-on-behalf-of <账户>):为别人申请。需要高权限。
  • 取回旧证书(-retrieve ):领取已批准的证书。

原文 https://blog.csdn.net/2301_79518550/article/details/151686799