由于本地自建了Nginx,需要HTTPS访问,所以这里记录一下 Linux 下的 证书自签名和自信任。
操作环境:Ubuntu 24.04
假设我要签署的服务器域名 kiosk.io
自签证书
- 安装 openssl
1
| sudo apt-get install openssl -y
|
- 生成 RootCA 的私钥
1
| openssl genrsa -out ca.key 2048
|
- 创建一个名为
ca.cnf
的配置文件,其中包含以下内容:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| [ req ]
default_bits = 2048
prompt = no
default_md = sha256
distinguished_name = dn
[ dn ]
C = CN
ST = Beijing
L = Beijing
O = AAAOrganization
OU = AAA
CN = AAA
[ v3_ca ]
subjectAltName = @AAA
[ alt_names ]
DNS.1 = ssl-aaa.com
|
然后使用该配置文件创建CA证书:
1
| openssl req -x509 -new -nodes -key ca.key -sha256 -days 3650 -out ca.crt -config ca.cnf
|
- 生成 kiosk.io 服务器私钥
1
| openssl genrsa -out kiosk.io.key 2048
|
- 创建 kiosk.io 服务器域名的证书签名请求(CSR):
openssl.cnf
是一个 OpenSSL 配置文件,它包含了用于证书签名请求(CSR)、证书和证书颁发机构(CA)的设置。一个完整的 openssl.cnf
文件可能包含多个部分,用于定义不同的配置选项。以下是一个基本的 openssl.cnf
文件示例,它包含了用于生成自签名 CA 证书和服务器证书的配置:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
| [ req ]
default_bits = 2048
prompt = no
distinguished_name = req_distinguished_name
req_extensions = v3_req
[ req_distinguished_name ]
C = CB
ST = Beijing
L = Beijing
O = Kiosk Organization
OU = KioskUnit
CN = www.kiosk.io
[ v3_req ]
basicConstraints = CA:TRUE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment, dataEncipherment
subjectAltName = @alt_names
[ alt_names ]
DNS.1 = www.kiosk.io
DNS.2 = kiosk.io
|
创建
1
| openssl req -new -key kiosk.io.key -out kiosk.io.csr -reqexts v3_req -config openssl.cnf
|
- 使用 CA 证书签署服务器 kiosk.io 的 CSR
1
| openssl x509 -req -in kiosk.io.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out kiosk.io.crt -days 365 -extensions v3_req -extfile openssl.cnf
|
- 验证证书
1
| openssl verify -CAfile ca.crt kiosk.io.crt
|
证书自信任
正常情况下,本地的 Chrome 浏览器是不信任的, 如下图
Linux系统:
在Linux系统中,添加CA证书通常涉及到更新系统的证书库。以下是在Ubuntu和其他基于Debian的系统上的步骤:
将CA证书复制到证书库目录:
1
| sudo cp /path/to/your/ca.crt /usr/local/share/ca-certificates/
|
这里的/path/to/your/ca.crt
是你的CA证书文件的路径。
更新证书库:
1
| sudo update-ca-certificates
|
这个命令会更新系统的证书库,并自动将新添加的证书包含进去。
更新 Chrome 浏览器的根证书
1
| chrome -> 设置 -> 隐私设置和安全性 -> 管理证书 -> 导入
|