需要用到的工具:
- cfssl,生成私钥,公钥,证书等信息,输出的为json格式
- cfssljson,把上面的 json 内容输出格式为 pem 的文件
- cfssl-certinfo,查看证书信息
可到 Github 直接下载可执行文件
1. 生成 CA 证书
ca 证书为“根证书”,可信链条上的根节点,一般内置在浏览器或操作系统中;为方便使用 cfssl 创建证书,我们先创建一下配置文件 ca-config.json,用来在证书签名时方便选择场景应用:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
{
"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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
{
"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 证书
1
2
|
# 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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
{
"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"
}
]
}
|
使用命令
1
2
|
# 将会生成三个文件 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