功能发布:证书一键生成功能
最近有用户希望完全控制证书里 Subject/Issuer 的字符串,但手敲 OpenSSL 命令既枯燥又容易写错。于是我们把原本的 Yak 脚本封装成 GUI 插件:在 Yakit 的「证书生成」里,默认只露三个字段--证书类型、通用名(CN)、组织(O)。点击“额外参数”还能展开国家/省份/城市、有效期、DNS/IP 等高级选项,全部支持多值输入。最终生成的 PEM 证书和私钥自动保存到临时目录,并在界面里弹出可复制的路径,一键就能拿去用。
GUI操作步骤
打开插件商店,搜索「证书生成」原生插件,证书类型选 CA,填写通用名(CN)和组织(O)即可:
点击「额外参数」可补齐国家/省份/城市、有效期或自定义生效/失效时间。
执行后自动拿到自签根证书和私钥,文件路径在界面下方可直接复制。
适合快速搭建测试 PKI、配置浏览器/系统信任、或为 MITM/抓包工具准备可信根。
Server 证书:复刻真实服务端环境
选择「证书类型 = Server」后,需要上传父 CA 证书和私钥。
插件会自动填好 KeyUsage(DigitalSignature + KeyEncipherment)、 ExtKeyUsage(ServerAuth),我们只需关注主体信息与 SAN 即可。
常见用法:
1、快速为测试网关签发证书,复现实网的证书链;
2、验证系统对 CN/O/有效期/SAN 的校验逻辑,比如内部服务必须覆盖多个域名或 IP;
3、为双向 TLS 的服务器端准备证书链,后续配合客户端证书完成访问控制。
// 伪代码:Server 证书生成
options := [
tls.commonName("intranet.yourcorp.local"),
tls.organization("YakSec Team"),
tls.alternativeDNS("intranet.yourcorp.local","api.yourcorp.local"),
tls.alternativeIP("10.10.10.10")
]
parentCA := file.ReadFile("/tmp/root_ca.pem")
parentKey := file.ReadFile("/tmp/root_ca_key.pem")
serverCrt, serverKey := tls.GenerateServerCert(parentCA, parentKey, options...)
CN 是传统的“证书主题名称”,但现在更多用来做标识或显示。SAN 里可以写多个 DNS、IP,客户端会逐条匹配访问目标。证书生成插件把 SAN 分成「DNS 名称」「IP 地址」两个输入框,按逗号分隔即可添加多值。
Client 证书:双向认证 & 零信任
切换到「Client」模式同样需要父 CA 与私钥,插件会给 ExtKeyUsage 自动加上 ClientAuth,生成的证书天然可用于双向 TLS。
典型场景:
(1)零信任入口:为每个用户/设备生成独立证书,后端依据 CN/O 区分角色;
(2)IoT/工控模拟:批量生成短期客户端证书,测试目标系统的吊销/白名单策略;
(3)渗透演练:红队提前在沙盒中导入客户端证书,完整复刻目标对证书的校验。
// 伪代码:Client 证书生成
options := [
tls.commonName("Device-001"),
tls.organization("YakSec Lab"),
tls.validity(90 * 24 * time.Hour),
]
clientCrt, clientKey := tls.GenerateClientCert(parentCA, parentKey, options...)
其他场景:
(4)快速构建双向TLS**:快速构建双向 TLS:按 CA → Server → Client 的顺序使用插件,把证书链安装到测试入口和客户端,验证策略、白名单、吊销流程。
(5)社工/演练辅助:快速签发多个客户端证书,在 MITM 或代理中测试证书白名单、防爬策略的漏洞。
证书生成插件 替换 MITM 证书的实际场景
1、生成自定义CA**
- 打开原生插件「证书生成」,证书类型选 CA。
- 在主面板填:通用名(CN)=YakSec Root CA、组织(O)=YakSec Lab。如需展示国家/城市,就点击“额外参数”补上 C/ST/L,并可以把有效期改成 2 年。
- 点击“开始执行”,Yakit 会在状态栏提示输出路径。比如:/home/user/yakit-projects/temp/yak_ab12c_ca.pem /home/user/yakit-projects/temp/yak_ab12c_key.pem。
2、替换 MITM 默认 CA 文件
- 将刚生成的 *_ca.pem / *_key.pem 复制到 ~/yakit-projects/ 下,并重命名为 yak-mitm-ca.crt 和 yak-mitm-ca.key(一定要用这个文件名,MITM 启动时会读取它们)。
3、信任这份 CA
-
为避免浏览器报警,把 yak-mitm-ca.crt 导入到需要调试的系统或浏览器的“受信任根证书”列表。
-
这一步可以用 Yakit 的「安装 MITM 证书」按钮,也能手动在系统证书管理里导入。
4、生成专用 Server 证书(可选)
-
如果你想在某些场景使用固定的站点证书(而不是 MITM 动态签发),再用插件选择 Server,上传刚才的 CA/Key,并在 SAN 字段填写 *.yaksec.internal,yakit.example.com,10.10.10.10 之类的域名/IP。生成的 server PEM 可以直接配置到代理或反向网关中。
-
但 MITM 模块本身只需要 CA;它会按需伪造各域名的 server 证书。
5、重启 MITM 验证
-
重新启动 Yakit 的 MITM 模块,随便拦一条 HTTPS 请求。在浏览器里查看证书详情,你会看到 Issued by: YakSec Root CA,主体信息正是插件里填写的内容,说明 MITM 已经使用新的根证书。
-
由于 SAN 是在劫持时动态生成并匹配目标域名的,你只需在额外参数里写好希望 MITM 能覆盖的域名模式,就能避免“证书不匹配”的提示。
通过这个流程,我们就实现了“用户可控主体/签发者字符串”的诉求:自研 MITM 或 Yakit 内置模块都能使用插件生成的 CA/Key,证书链里的组织、城市、有效期完全按 GUI 输入来定。
本文首发于 Yak Project 公众号,阅读原文。
