#!/bin/bash # 定义证书存储目录 CERT_DIR="/etc/docker/certs" mkdir -p "$CERT_DIR" cd "$CERT_DIR" # 提示用户输入主机名/IP 地址列表 read -p "请输入 Docker 守护进程的主机名或 IP 地址,用逗号分隔(例如:10.0.10.19,localhost): " DOCKER_HOSTS if [ -z "$DOCKER_HOSTS" ]; then echo "主机名/IP 地址不能为空!" exit 1 fi # 生成 CA 私钥和证书 openssl genrsa -out ca-key.pem 4096 openssl req -x509 -new -nodes -key ca-key.pem -days 36500 -out ca.pem -subj "/C=CN/ST=Chongqing/L=Chongqing/O=LiteyukiStudio/CN=MyCA" # 生成服务器密钥和证书签名请求(CSR) openssl genrsa -out server-key.pem 4096 openssl req -new -key server-key.pem -out server.csr -subj "/C=CN/ST=Chongqing/L=Chongqing/O=LiteyukiStudio/CN=$DOCKER_HOSTS" # 创建一个配置文件来指定 SANs cat > san.cnf <> san.cnf echo "IP.$((i+1)) = ${HOSTS[$i]}" >> san.cnf done # 生成服务器证书 openssl x509 -req -days 36500 -in server.csr -CA ca.pem -CAkey ca-key.pem -set_serial 01 -out server-cert.pem -extfile san.cnf -extensions req_ext # 删除不必要的 CSR 文件和配置文件 rm -f server.csr san.cnf # 生成客户端密钥和证书签名请求(CSR) openssl genrsa -out client-key.pem 4096 openssl req -new -key client-key.pem -out client.csr -subj "/C=CN/ST=Chongqing/L=Chongqing/O=LiteyukiStudio/CN=client" # 生成客户端证书 openssl x509 -req -days 36500 -in client.csr -CA ca.pem -CAkey ca-key.pem -set_serial 02 -out client-cert.pem # 删除不必要的客户端 CSR 文件 rm -f client.csr # 设置权限 chmod 0400 ca-key.pem server-key.pem client-key.pem chmod 0444 ca.pem server-cert.pem client-cert.pem echo "证书生成完成,保存在 $CERT_DIR 目录下。"