CA证书创建过程.md

1、创建私有CA

创建CA目录结构

1
2
3
4
5
6
7
sudo mkdir -p /etc/ca
cd /etc/ca

#输入并记住密码
sudo openssl genrsa -aes256 -out ca.key.pem 4096


然后生成根证书:

1
openssl req -new -x509 -days 3650 -key ca.key.pem -out ca.crt.pem

依次回答问题,也可以使用subj参数直接创建:

1
2
openssl req -new -x509 -days 3650 -key ca.key.pem -out canew.crt.pem \
-subj "/C=CN/ST=Beijing/L=Beijing/O=JGS/OU=DEV/CN=k8s-c1"

2、创建服务器证书(以git.lan为例)
创建一个子目录保存服务器证书

1
sudo mkdir servers

生成服务器私钥

1
sudo openssl genrsa -out /etc/ca/servers/git.lan.key.pem 2048

创建证书签名请求(CSR)

1
openssl req -new -key /etc/ca/servers/git.lan.key.pem -out /etc/ca/servers/git.lan.csr.pem -subj "/C=CN/ST=Beijing/L=Beijing/O=JGS/OU=DEV/CN=git.lan"

创建证书扩展文件(在/etc/ca/servers/中执行)

1
2
3
4
5
6
7
8
9
10
11
sudo tee git.lan.ext > /dev/null <<EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names

[alt_names]
DNS.1 = git.lan
# 如果需要,可以添加更多域名
# DNS.2 = docker.lan
EOF

使用 CA 签发服务器证书

1
2
3
4
sudo openssl x509 -req -in /etc/ca/servers/git.lan.csr.pem \
-CA /etc/ca/ca.crt.pem -CAkey /etc/ca/ca.key.pem -CAcreateserial \
-out /etc/ca/servers/git.lan.crt.pem -days 3650 -sha256 \
-extfile /etc/ca/servers/git.lan.ext

git.lan.crt.pem是服务器证书
git.lan.key.pem是私钥

证书验证:

1
sudo openssl x509 -in git.lan.crt.pem -text -noout

验证证书链

1
sudo openssl verify -CAfile /etc/ca/ca.crt.pem git.lan.crt.pem

上面两个用于服务器设置

例如,Nginx设置,将上述两个文件拷贝到相应目录/etc/nginx/ssl/

1
2
3
4
5
6
7
8
9
server {
listen 443 ssl; # 默认HTTPS端口
server_name git.lan; # 自定义域名

ssl_certificate /etc/nginx/ssl/git.lan.crt.pem;
ssl_certificate_key /etc/nginx/ssl/git.lan.key.pem;

# 其他配置同上
}

Windows客户端:
双击ca.crt.pem,选择 “安装证书” → “当前用户” 或 “本地计算机”;
选择 “将所有证书放入下列存储” → “浏览” → 选择 “受信任的根证书颁发机构”;

Ubuntu:

1
2
3
4
5
6
# 复制 CA 证书到系统信任目录 如果远程拷贝使用SCP
#sudo scp zhenlei@k8s-c1-main.lan:/etc/ca/ca.crt.pem /usr/local/share/ca-certificates/ca.crt
sudo cp /etc/ca/ca.crt.pem /usr/local/share/ca-certificates/ca.crt

# 更新信任存储
sudo update-ca-certificates