需要用到的工具:
- cfssl,生成私钥,公钥,证书等信息,输出的为json格式
- cfssljson,把上面的 json 内容输出格式为 pem 的文件
- cfssl-certinfo,查看证书信息
可到 Github 直接下载可执行文件
1. 生成 CA 证书
ca 证书为“根证书”,可信链条上的根节点,一般内置在浏览器或操作系统中;为方便使用 cfssl 创建证书,我们先创建一下配置文件 ca-config.json,用来在证书签名时方便选择场景应用:
{
"signing": {
"default": {
"expiry": "43800h"
},
"profiles": {
"server": {
"expiry": "43800h",
"usages": [
"signing",
"key encipherment",
"server auth"
]
},
"client": {
"expiry": "43800h",
"usages": [
"signing",
"key encipherment",
"client auth"
]
},
"peer": {
"expiry": "43800h",
"usages": [
"signing",
"key encipherment",
"server auth",
"client auth"
]
}
}
}
}
随后,创建 CA 证书的详细信息文件,也是个 json:ca.json
{
"CN": "SelfSignedCa",
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"ST": "Guangdong",
"L": "Guangzhou",
"O": "Hello.Inc",
"OU": "System"
}
]
}
字段 | 字段说明 |
---|---|
CN | common name, 一般代表网站地址 |
C | country, 国家代码,如 CN, US |
ST | state,州,省 |
L | locality, 城市 |
O | organization 组织名称 |
OU | 其他信息 |
使用以下命令创建 CA 证书
# cfssl工具生成的结果都为 json 格式,需要使用 cfssljson 进行转义为证书文件,-bare 指定证书文件名前缀
cfssl gencert -initca ca-csr.json | cfssljson -bare ca
将会生成三个文件
- ca.pem, ca 证书
- ca-key.pem ca的私钥
- ca.csr ca证书签名请求,生成 ca.pem 的中间产物,无用,但可以用来在证书过期后进行重签名
2. 使用 CA 签名其他证书
为证书生成配置文件,如为 etcd 使用的证书配置:etcd-csr.json
{
"CN": "etcd",
// usage for website , please add hosts
// hosts: ["www.xxx.com"]
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"ST": "Guangdong",
"L": "Guangzhou",
"O": "Hello.Inc",
"OU": "System"
}
]
}
使用命令
# 将会生成三个文件 etcd.pem, etcd-key.pem, etcd.csr
cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=peer etcd-csr.json | cfssljson -bare etcd
3. 查看
使用 cfssl-certinfo 查看证书 cfssl-certinfo -cert etcd.pem