CFSSL是CloudFlare开源的一款PKI/TLS工具,CFSSL包含一个命令行工具和一个用于签名,验证并且捆绑TLS证书的HTTP API服务,环境构建方面需要 Go 1.12+。
安装一些实用的命令行工具,其中包括 cfssl、cfssljson。cfssljson 程序,从 cfssl 获取 JSON 输出,并将证书、密钥、CSR和 bundle 写入指定位置。
# 生成默认CA配置json配置文件
# ca-config.json:可以定义多个 profiles,分别指定不同的过期时间、使用场景等参数;后续在签名证书时使用某个 profile
$ sudo cfssl print-defaults config > ca-config.json
$ sudo cfssl print-defaults csr > ca-csr.json
[root@ho cfssl]# cfssl print-defaults config
{
"signing": { # 表示该证书可用于签名其它证书;生成的 ca.pem 证书中 CA=TRUE
"default": {
"expiry": "168h"
},
"profiles": {
"www": {
"expiry": "8760h",
"usages": [
"signing",
"key encipherment",
"server auth" # 表示client可以用该 CA 对server提供的证书进行验证
]
},
"client": {
"expiry": "8760h",
"usages": [
"signing",
"key encipherment",
"client auth" # 表示server可以用该CA对client提供的证书进行验证
]
}
}
}
}
[root@ho cfssl]# cfssl print-defaults csr
{
"CN": "example.net", # Common Name,从证书中提取该字段作为请求的用户名 (User Name),浏览器使用该字段验证网站是否合法
"hosts": [ # 如果 hosts 字段不为空则需要指定授权使用该证书的 IP 或域名列表
"example.net",
"www.example.net"
],
"key": {
"algo": "ecdsa",
"size": 256
},
"names": [
{
"C": "US",
"ST": "CA",
"L": "San Francisco",
"O": "Client-CA", # Organization,从证书中提取该字段作为请求用户所属的组 (Group)
"OU": "System"
}
]
}
# 生产CA证书和私钥
# 根证书文件: ca.pem
# 根证书私钥: ca-key.pem
# 根证书申请文件: ca.csr
$ cfssl gencert -initca ca-csr.json | cfssljson -bare ca