跳到主要内容

使用 CFSSL 生成自签名证书

小林
后端开发工程师, 专注Go开发、微服务和云原生

CFSSL 是 Cloudflare 提供的用于快速生成自签名证书的工具, 安装方便, 命令简单, 支持跨平台

robin-hood.png

安装

可以通过 Go 安装, 只安装 cfssl 和 cfssljson

go install github.com/cloudflare/cfssl/cmd/cfssl@latest
go install github.com/cloudflare/cfssl/cmd/cfssljson@latest

或者安装仓库下所有工具

go install github.com/cloudflare/cfssl/cmd/...@latest

如果没有 Go 环境, 可以在 GitHub Releases 下载编译好的二进制文件, 找到合适的版本和系统

生成 CA 证书和密钥

首先需要配置 csr 文件, 下面是一个简单的模板

config/ca-csr.json
{
"CN": "Autogenerated CA",
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"O": "Honest Achmed's Used Certificates",
"OU": "Hastily-Generated Values Divison",
"L": "San Francisco",
"ST": "California",
"C": "US"
}
]
}

用 cfssl命令行生成 CA 证书和私钥

cfssl gencert -initca config/ca-csr.json | cfssljson -bare certs/ca
提示

cfssl 工具只会将生成的证书和私钥以 JSON 的格式输出到 stdout, 所以需要 cfssljson 工具将输出切分成独立的文件

注意

cfssljson 工具不会自动创建目录, 所以需要提前建好目录

生成服务证书和私钥

配置服务证书的 csr 文件, 下面是一个简单的模板

config/req-csr.json
{
"CN": "etcd",
"hosts": [
"localhost",
"127.0.0.1",
"9.145.89.120",
"9.145.89.173",
"9.145.89.225"
],
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"O": "autogenerated",
"OU": "etcd cluster",
"L": "the internet"
}
]
}
  • hosts 可配置 IP 和域名
  • key 可配置加密的算法

配置 config 配置文件

config/ca-config.json
{
"signing": {
"default": {
"usages": [
"signing",
"key encipherment",
"server auth",
"client auth"
],
"expiry": "876000h"
}
}
}

用 cfssl命令行生成服务证书和私钥

cfssl gencert -ca certs/ca.pem -ca-key certs/ca-key.pem -config config/ca-config.json config/req-csr.json | cfssljson -bare certs/node0
  • certs/node0.pem: 服务证书
  • certs/node0-key.pem: 服务私钥

参考