徒手实现一个自建CA
字数 800 2025-08-15 21:30:59
自建CA证书权威指南
自建CA的意义
- 成本节约:商业SSL证书每年费用约1000元/域名,自建CA可大幅降低证书成本
- 安全性增强:
- 浏览器默认不信任自建CA证书,形成天然访问屏障
- 可实现双端证书认证,必须同时拥有CA根证书和客户端证书才能访问
- 灵活扩展:
- 可自定义实现ACME协议分发证书
- 可添加各种自定义功能
- 企业应用:提升内部系统安全等级的基础设施
技术实现
使用Go语言实现,核心依赖:
crypto/rsa:生成RSA公钥私钥对crypto/x509:生成证书及相关文件cobra:命令行框架
工具使用指南
1. 环境准备
git clone https://github.com/v1xingyue/wingCA
cd wingCA
make # 编译生成Linux/Mac可执行文件
2. 生成根证书
./wingCA init --confirm
输出示例:
[54cfc84] 2020/06/06 17:10:17 Begin Init Root CA
2020/06/06 17:10:17 Your CA Name Info :
CN=ArkRootCA,O=Ryan Ark Center,POSTALCODE=061219,
STREET=NoWhere Road 9+3/4 Site Corner,L=Beijing,ST=Beijing,C=CN
2020/06/06 17:10:17 current crt serial number : 10001
2020/06/06 17:10:18 Your CA Root Have Been Put ./ssl/root/rootCA.crt
3. 签发网站证书
./wingCA issue --type site \
--common a.b.ssl.com.cn \
--email xingyue@ssl.com.cn \
--ip 127.0.0.1 \
--ip 10.41.13.133 \
--site a.b.ssl.com.cn \
--site "*.d.ssl.com.cn" \
--site localhost
参数说明:
--type site:签发网站证书--common:通用名称(CN)--email:联系邮箱--ip:证书包含的IP地址--site:证书包含的域名(支持通配符)
输出示例:
2020/06/06 17:12:00 Issue Site :
Names : [a.b.ssl.com.cn *.d.ssl.com.cn localhost]
ips: [127.0.0.1 10.41.13.133]
email: xingyue@ssl.com.cn
commonName: a.b.ssl.com.cn
2020/06/06 17:12:00 current crt serial number : 10002
2020/06/06 17:12:00 Issue Success !
Cert Path : ./ssl/site/a.b.ssl.com.cn.crt
Key Path : ./ssl/private/a.b.ssl.com.cn.key
4. 签发客户端证书(用于双端认证)
./wingCA issue --type client \
--email xingyue@ssl.com.cn \
--withp12 \
--password super
参数说明:
--type client:签发客户端证书--withp12:生成.p12格式证书--password:设置.p12文件密码
输出示例:
[54cfc84] 2020/06/06 17:12:45 Issue Client :
email : xingyue@ssl.com.cn
common name : xingyue
2020/06/06 17:12:45 current crt serial number : 10003
2020/06/06 17:12:45 Issue Success !
Cert Path : ./ssl/client/xingyue.crt
Key Path : ./ssl/private/xingyue.key
2020/06/06 17:12:45 Make p12 file
2020/06/06 17:12:45 p12 file path : ./ssl/p12/xingyue.p12
5. 启动双端认证测试站点
./wingCA sample --common a.b.ssl.com.cn --double
输出示例:
[54cfc84] 2020/06/06 17:14:04 start sample site -> a.b.ssl.com.cn
startDouble -> true
2020/06/06 17:14:04 validate command :
2020/06/06 17:14:04 curl -v --cert ssl/client/xingyue.crt --key ssl/private/xingyue.key https://127.0.0.1
2020/06/06 17:14:04 Start Double validate site ...
6. 测试双端认证
curl -v \
--cacert ssl/root/rootCA.crt \
--cert ssl/client/xingyue.crt \
--key ssl/private/xingyue.key \
https://127.0.0.1
成功响应示例:
* SSL connection using TLSv1.2 / ECDHE-RSA-AES128-GCM-SHA256
* Server certificate:
* subject: CN=a.b.ssl.com.cn@1591434720
* start date: Jun 6 09:12:00 2020 GMT
* expire date: Sep 4 09:12:00 2020 GMT
* subjectAltName: host "127.0.0.1" matched cert's IP address!
* issuer: C=CN; ST=Beijing; L=Beijing; street=NoWhere Road 9+3/4 Site Corner; postalCode=061219; O=Ryan Ark Center; CN=ArkRootCA
* SSL certificate verify ok.
< HTTP/2 200
< content-type: text/plain; charset=utf-8
hello double validate https
关键注意事项
- 根证书安全:根证书私钥必须严格保护,泄露会导致整个CA体系失效
- 证书有效期:注意监控证书有效期,及时续签
- 客户端部署:双端认证需要预先在客户端安装CA根证书
- 浏览器信任:如需浏览器信任,需手动导入根证书到受信任的根证书颁发机构存储区
高级应用场景
- 企业内网安全:为内部系统(邮箱、ERP等)签发专用证书
- 微服务认证:服务间通信使用双向TLS认证
- 设备认证:为IoT设备签发客户端证书实现安全接入
通过这套自建CA系统,可以构建完整的企业级证书管理体系,大幅提升系统安全性同时降低证书成本。