文章

自签名泛域名证书

自签名泛域名证书

openssl

以下是生成自签名泛域名证书的命令:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 生成 CA 私钥
openssl genrsa -out ca.key 2048

# 生成 CA 证书
openssl req -x509 -new -nodes -key ca.key -sha256 -days 1024 -out ca.crt -subj "/CN=MySelfSignedCA"

# 生成 *.test.cn 私钥
openssl genrsa -out wildcard.test.cn.key 2048

# 生成 *.test.cn 证书请求
openssl req -new -key wildcard.test.cn.key -out wildcard.test.cn.csr -subj "/CN=*.test.cn"

# 签署 *.test.cn 证书
openssl x509 -req -in wildcard.test.cn.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out wildcard.test.cn.crt -days 365 -sha256 -extfile <(printf "subjectAltName=DNS:*.test.cn")

这些命令用于生成一个自签名证书颁发机构(CA)的私钥和证书,然后为 *.test.cn 泛域名生成私钥和证书请求,并使用 CA 签署该请求以生成自签名证书。生成的证书可以用于测试或内部环境中的 HTTPS 服务。

证书文件:wildcard.test.cn.crt

私钥文件:wildcard.test.cn.key

cfssl

cfssl 是一个开源的证书签名请求(CSR)生成器和证书颁发者,用于生成自签名证书或者由CA签名的证书。以下是使用 cfssl 生成自签名证书的步骤:

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
35
36
37
38
39
40
41
42
43
44
45
46
# 创建配置文件 config.json
echo '{
  "signing": {
    "default": {
      "expiry": "8760h"
    },
    "profiles": {
      "www": {
        "expiry": "8760h",
        "usages": ["signing", "key encipherment", "server auth", "client auth"]
      }
    }
  }
}' > config.json

# 创建 CSR 配置文件 csr.json
echo '{
  "CN": "example.com",
  "hosts": [
    "192.168.146.130",
    "192.168.146.139",
    "192.168.146.142"
  ],
  "key": {
    "algo": "rsa",
    "size": 2048
  },
  "names": [
    {
      "C": "US",
      "L": "San Francisco",
      "O": "Example Inc.",
      "ST": "California",
      "OU": "IT"
    }
  ]
}' > csr.json

# 生成 CA 证书和私钥
cfssl gencert -initca ca-csr.json | cfssljson -bare ca

# 生成服务器证书和私钥
cfssl gencert   -ca=ca.pem   -ca-key=ca-key.pem   -config=ca-config.json   -profile=kubernetes   ca-csr.json | cfssljson -bare server

# 验证服务器证书
openssl x509 -in server.pem -text -noout
  • ca-config.json:定义 CA 的签名配置。
  • ca-csr.json:定义 CA 证书的请求信息。
  • server-csr.json:定义服务器证书的请求信息。
本文由作者按照 CC BY 4.0 进行授权