(っ●ω●)っ

使用 OpenSSL 签发根证书和服务器证书

2025-03-02

生成 CA 证书

CA = Certificate Authority 权威证书颁发机构

生成证书私钥

此步骤进行完之后会生成 ca.key 的私钥文件。

1
openssl genrsa -aes256 -out ca.key 2048

生成 CSR 并签发 CA 证书

CSR = Certificate Signing Request 证书签发请求

-key ca.key 引用 CA 的私钥文件,-out ca.csr 生成证书请求文件(CSR)。

此步骤进行完之后会生成 ca.csr 的证书请求文件、证书本体文件 ca.crt

1
openssl req -new -x509 -sha256 -key ca.key -out ca.csr -config openssl.cnf

生成服务器证书

修改配置文件

文件路径:/etc/pki/tls/openssl.cnf,在 [usr_cert] 内添加以下配置,添加证书的“使用者可选名称(SAN)”:

1
2
3
4
5
6
subjectAltName = @dns_names

[ dns_names ]
DNS.0 = example.com
DNS.1 = *.example.com
DNS.x = ...

生成证书私钥

此步骤进行完之后会生成 server.key 的私钥文件。

1
openssl genrsa -aes256 -out server.key 2048

去除密钥口令

文件名要与上述生成的私钥文件名称一致。

  • 如果不去除密钥口令,每当需要使用该证书的服务(如 nginx、httpd 等)启动时会提示输入口令。
1
openssl rsa -in server.key -out server.key

生成 CSR

此步骤进行完之后会生成 server.csr 的证书请求文件。

1
openssl req -new -key server.key -out server.csr

签发服务器证书

使用刚刚生成的 CA 证书进行签发。

1
openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key -config openssl.cnf -extensions usr_cert

证书格式转换

pem 转 pfx

server.keyserver.crt 转换成 pfx 证书格式。

1
openssl pkcs12 -export -out server.pfx -inkey server.key -in server.crt [-CAfile ca.crt]

pfx 转 pem

server.pfx 转换成 pem 格式。

只提取私钥文件

提取完后目录会出现 private.key 私钥文件。

1
openssl pkcs12 -in server.pfx -nocerts -out private.key -nodes

private.key 文件内容:

1
2
3
4
5
6
7
-----BEGIN PRIVATE KEY-----
MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCdPEZiA52YlVuX
jlS6N6ZIAjzCV5Zek1aKSuVuMq+fKC0NV/ILBqz4ny2TAt1jwmUuKEv8lnXPJC/i
... ... ... ...
O7TEeDDSJLWBgQZg7Wl6UPK2N3GsXwGxF9U+PWtlP0uNfPUaXbjVcp2Cz24Fud1r
xIMSIREE9tBJGTm5uAa07g==
-----END PRIVATE KEY-----

只提取证书文件

提取完后目录会出现 public.crt 证书文件。

1
openssl pkcs12 -in server.pfx -nokeys -out public.crt

public.crt 文件内容:

1
2
3
4
5
6
7
-----BEGIN CERTIFICATE-----
MIIDczCCAlugAwIBAgIBATANBgkqhkiG9w0BAQsFADAcMRowGAYDVQQDDBFsaW51
eDEuc2tpbGxzLmxhbjAeFw0yNDA5MDQwOTU1MTFaFw0yOTA5MDMwOTU1MTFaMGox
... ... ... ...
9kaW97SGtjF/9AdE8gqUjL+0ZbPDh1Rn9FBvjPzAvyPZM0GdOTu6m+XGm4NBThcY
U96ZhQNyD9UG5Y/3914VohfVfjRySAM=
-----END CERTIFICATE-----

同时提取私钥和证书

提取完后,私钥和证书内容会合并保存在同一个文件(all.pem)。

1
openssl pkcs12 -in server.pfx -nodes -out all.pem

all.pem 文件内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Bag Attributes
localKeyID: 03 62 5B .. ..
subject=C = CN, ST = Beijing, L = Beijing, O = skills, OU = system, CN = *.skills.lan
issuer=CN = linux1.skills.lan
-----BEGIN CERTIFICATE-----
MIIDczCCAlugAwIBAgIBATANBgkqhkiG9w0BAQsFADAcMRowGAYDVQQDDBFsaW51
eDEuc2tpbGxzLmxhbjAeFw0yNDA5MDQwOTU1MTFaFw0yOTA5MDMwOTU1MTFaMGox
... ... ... ...
9kaW97SGtjF/9AdE8gqUjL+0ZbPDh1Rn9FBvjPzAvyPZM0GdOTu6m+XGm4NBThcY
U96ZhQNyD9UG5Y/3914VohfVfjRySAM=
-----END CERTIFICATE-----
Bag Attributes
localKeyID: 03 62 5B .. ..
Key Attributes: <No Attributes>
-----BEGIN PRIVATE KEY-----
MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCdPEZiA52YlVuX
jlS6N6ZIAjzCV5Zek1aKSuVuMq+fKC0NV/ILBqz4ny2TAt1jwmUuKEv8lnXPJC/i
... ... ... ...
O7TEeDDSJLWBgQZg7Wl6UPK2N3GsXwGxF9U+PWtlP0uNfPUaXbjVcp2Cz24Fud1r
xIMSIREE9tBJGTm5uAa07g==
-----END PRIVATE KEY-----