一、使用cfssl工具创建自签名证书
环境准备
确保已安装
cfssl
和cfssljson
。可以通过以下命令安装1
2
3
4
5
6# 下载 cfssl 和 cfssljson 可执行文件
wget -O /usr/local/bin/cfssl https://pkg.cfssl.org/R1.2/cfssl_linux-amd64
wget -O /usr/local/bin/cfssljson https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64
# 赋予执行权限
chmod +x /usr/local/bin/cfssl /usr/local/bin/cfssljson
步骤 1:生成根 CA 证书
首先创建一个自签名根 CA 证书,这可以用于签发后续的服务端证书。
创建 CA 配置文件
ca-config.json
:1
2
3
4
5
6
7
8
9
10
11
12
13{
"signing": {
"default": {
"expiry": "867240h"
},
"profiles": {
"www": {
"expiry": "867240h",
"usages": ["signing", "key encipherment", "server auth", "client auth"]
}
}
}
}注意文件中的证书失效时间。
2.创建 CA 请求文件
ca-csr.json
:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16{
"CN": "My CA",
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "US",
"L": "San Francisco",
"O": "My Organization",
"OU": "My Org Unit",
"ST": "California"
}
]
}3.使用cfssl生成CA证书和私钥:
1
cfssl gencert -initca ca-csr.json | cfssljson -bare ca
步骤 2:生成 NGINX 服务器证书
创建服务器证书的请求文件
server-csr.json
:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22{
"CN": "my-nginx-server",
"hosts": [
"example.com",
"www.example.com",
"localhost",
"127.0.0.1"
],
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "US",
"L": "San Francisco",
"O": "My Organization",
"OU": "My Org Unit",
"ST": "California"
}
]
}注意配置文件中的hosts字段要包含域名。
2.使用 cfssl
生成服务器证书:
1 | cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=www server-csr.json | cfssljson -bare server |
生成的文件包括:
server.pem
: 服务器证书server-key.pem
: 服务器私钥
二、使用openssl创建自签名证书
1.创建 CA 私钥
1 | $ openssl genrsa -out ca.key 2048 |
2.生成 CA 的自签名证书
1 | openssl req \ |
注意生成证书的有效期
3.生成需要颁发证书的私钥
1 | $ openssl genrsa -out server.key 2048 |
4.生成要颁发证书的证书签名请求,证书签名请求当中的 Common Name 必须区别于 CA 的证书里面的 Common Name
1 | $ openssl req \ |
5.用 2 创建的 CA 证书给 4 生成的 签名请求 进行签名
1 | $ openssl x509 \ |