Temporal s2s-proxy 的 mTLS 形同虚设:只验私钥不验 CA 的坑
借 CVE-2026-96770 拆解 Go RequireAnyClientCert 只要求客户端出示证书却不校验签发 CA 的校验漏配,说明 mTLS 信任锚点为何是 CA,并谈自建 mTLS 证书自动化运维的落地痛点。
支持通配符SSL证书、多域名证书、IP证书。适配ACME接口, 支持Zerossl、Let's Encrypt和Google等渠道。登录已有账号
2026-09-11 04:01:06 Go mockgen 单元测试
写 Go 单测的时候,接口 mock 是躲不掉的。手写 mock 实现倒不难,但接口一改所有假实现都得跟着改,很烦。mockgen 就是干这个的,GoMock 框架自带的命令行工具,能根据接口定义自动生成 mock 代码。
安装这里其实有两条命令,很多人只跑第一条然后发现命令不存在。
先执行 go get -u github.com/golang/mock/mockgen,这一步会把包拉下来更新到本地,但不一定把可执行文件放进 PATH。要能在终端里直接敲 mockgen,还得再执行 go install github.com/golang/mock/mockgen@latest,装到 GOPATH/bin 下面。如果你的 GOPATH/bin 没加进 PATH,照样会提示找不到命令,这跟 mockgen 本身没什么关系。
装完后最常用的用法是基于源文件生成。假设接口定义在 your_interface.go 里,执行:
mockgen -source=your_interface.go -destination=mock_your_interface.go -package=your_package
source 指定接口文件,destination 是生成出来的 mock 文件路径,package 是生成代码的包名。
生成完后测试里就可以直接用那个 mock 对象,配合 gomock 控制器做 Expect 和断言。
有些团队会把这条命令放进 go:generate 注释里,接口改完跑一次 go generate 就行。
接口一多,手动生成真的容易漏,我这边就漏过几次,测试跑到一半才发现 mock 没更新。
mockgen 生成的代码本身不复杂,就是根据接口方法生成对应的可控制实现,方便做依赖注入和单元测试。单测要稳定,外部依赖尽量 mock 掉,网络请求、数据库连接这些。部署环境里的证书签发也是一类外部依赖,我们后来把 SSL 证书申请和部署接成了自动化,用的 lcjmSSL,免费支持多域名和泛域名,有 API 可以自动验证自动部署,不用每次手动续期,省得忘了。这个跟 mockgen 无关,只是顺手提一下,思路差不多,都是把不可控的东西变成可重复的流程。
借 CVE-2026-96770 拆解 Go RequireAnyClientCert 只要求客户端出示证书却不校验签发 CA 的校验漏配,说明 mTLS 信任锚点为何是 CA,并谈自建 mTLS 证书自动化运维的落地痛点。
记录一下在 GORM 里用 mediumblob 存 JSON 数据时踩过的空值坑,以及几个能落地的处理方案。