Docker TLS 证书一键生成脚本(安全加密远程访问)
Docker TLS 证书一键生成脚本(安全加密远程访问)
这是一键自动生成 Docker TLS 加密证书的 Shell 脚本,无需手动输入复杂命令,自动生成 CA 证书、服务端证书、客户端证书,配置好权限,直接复制就能用,完美适配 CentOS7 / AlmaLinux9。
脚本功能
- 一键生成CA 根证书 + Docker 服务端证书 + 客户端证书
- 自动设置证书权限(Docker 强制要求证书权限 600/400)
- 自动打包客户端证书(方便下载到本地使用)
- 自动输出 Docker 守护进程 TLS 启动配置
- 支持自定义服务器IP/域名(必须填写,否则远程无法连接)
Docker TLS 证书一键生成脚本
docker_tls_gen.sh
#!/bin/bash# Docker TLS 证书一键生成脚本# 作用:生成安全加密证书,用于 Docker 远程加密访问 (2376端口)# 执行:chmod +x docker_tls_gen.sh && ./docker_tls_gen.sh# 注意:必须填写你的服务器公网IP/域名set-e# ====================== 请修改这里 ======================# 你的 Docker 服务器 IP 或者 域名(远程访问使用)DOCKER_HOST="192.168.1.100"# 证书存放目录CERT_DIR="/etc/docker/certs.d"# 证书有效期(天)EXPIRY_DAYS=3650# ========================================================# 颜色输出RED='\033[0;31m'GREEN='\033[0;32m'YELLOW='\033[1;33m'NC='\033[0m'# 检查 root 权限if[$(id-u)-ne0];thenecho-e"${RED}请使用 root 用户执行脚本!${NC}"exit1fi# 检查 opensslif!command-vopenssl&>/dev/null;thenecho-e"${YELLOW}正在安装 openssl...${NC}"yuminstall-yopensslfi# 创建证书目录mkdir-p${CERT_DIR}cd${CERT_DIR}echo-e"${GREEN}==================== 开始生成 Docker TLS 证书 ====================${NC}"echo-e"${YELLOW}服务器地址:${DOCKER_HOST}${NC}"echo-e"${YELLOW}证书目录:${CERT_DIR}${NC}"# ========== 1. 生成 CA 根证书 ==========echo-e"\n${YELLOW}[1/5] 生成 CA 根证书...${NC}"openssl genrsa-aes256-passoutpass:docker-outca-key.pem4096openssl req-new-x509-days${EXPIRY_DAYS}-keyca-key.pem-passinpass:docker-sha256-outca.pem-subj"/CN=docker-ca"# ========== 2. 生成服务端私钥 ==========echo-e"${YELLOW}[2/5] 生成服务端私钥...${NC}"openssl genrsa-aes256-passoutpass:docker-outserver-key.pem4096# ========== 3. 生成服务端证书签名请求 ==========echo-e"${YELLOW}[3/5] 生成服务端证书签名请求...${NC}"openssl req-new-keyserver-key.pem-passinpass:docker-sha256-outserver.csr-subj"/CN=${DOCKER_HOST}"# 配置扩展信息(支持IP/域名)echo"subjectAltName = IP:${DOCKER_HOST},IP:127.0.0.1">extfile.cnfecho"extendedKeyUsage = serverAuth">>extfile.cnf# ========== 4. 签发服务端证书 ==========echo-e"${YELLOW}[4/5] 签发服务端证书...${NC}"openssl x509-req-days${EXPIRY_DAYS}-inserver.csr-CAca.pem-CAkeyca-key.pem-passinpass:docker-CAcreateserial-outserver-cert.pem-extfileextfile.cnf# ========== 5. 生成客户端证书 ==========echo-e"${YELLOW}[5/5] 生成客户端证书...${NC}"openssl genrsa-aes256-passoutpass:docker-outkey.pem4096openssl req-new-keykey.pem-passinpass:docker-outclient.csr-subj'/CN=client'echo"extendedKeyUsage = clientAuth">extfile-client.cnf openssl x509-req-days${EXPIRY_DAYS}-inclient.csr-CAca.pem-CAkeyca-key.pem-passinpass:docker-CAcreateserial-outcert.pem-extfileextfile-client.cnf# 删除临时文件rm-f./*csr ./*srl extfile.cnf extfile-client.cnf# 移除证书密码(方便Docker启动,无需手动输入密码)echo-e"\n${YELLOW}移除证书密码...${NC}"openssl rsa-inserver-key.pem-passinpass:docker-outserver-key.pem openssl rsa-inkey.pem-passinpass:docker-outkey.pem# 设置证书权限(Docker 强制要求)echo-e"${YELLOW}设置证书安全权限...${NC}"chmod-v0400 ca-key.pem server-key.pem key.pemchmod-v0444 ca.pem server-cert.pem cert.pemchown-vroot:root ./*# 打包客户端证书tarzcf docker-client-certs.tar.gz ca.pem cert.pem key.pemecho-e"\n${GREEN}==================== 证书生成完成!====================${NC}"echo-e"${GREEN}证书目录:${CERT_DIR}${NC}"echo-e"${GREEN}客户端证书包:${CERT_DIR}/docker-client-certs.tar.gz${NC}"# 输出 Docker 启动配置echo-e"\n${YELLOW}==================== Docker TLS 启动配置 ====================${NC}"cat<<EOF 请将以下配置写入 /etc/docker/daemon.json : { "hosts": ["tcp://0.0.0.0:2376", "unix:///var/run/docker.sock"], "tls": true, "tlsverify": true, "tlscacert": "${CERT_DIR}/ca.pem", "tlscert": "${CERT_DIR}/server-cert.pem", "tlskey": "${CERT_DIR}/server-key.pem" } 配置完成后重启 Docker: systemctl daemon-reload systemctl restart docker 远程连接命令(客户端): docker --tlsverify --tlscacert=ca.pem --tlscert=cert.pem --tlskey=key.pem -H${DOCKER_HOST}:2376 info EOF使用方法(3 步搞定)
1. 脚本内修改服务器IP
打开脚本,把DOCKER_HOST改成你自己的服务器IP/域名
DOCKER_HOST="192.168.1.100"# 改成你的服务器公网IP2. 授权并执行
chmod+x docker_tls_gen.sh ./docker_tls_gen.sh3. 配置 Docker 并重启
脚本执行完成后,自动输出配置,直接复制粘贴即可:
# 编辑 Docker 配置vi/etc/docker/daemon.json# 粘贴脚本输出的配置# 保存退出# 重启 Dockersystemctl daemon-reload systemctl restartdocker客户端远程连接 Docker
脚本会自动打包客户端证书:/etc/docker/certs.d/docker-client-certs.tar.gz
- 下载到本地电脑
- 解压得到 3 个文件:
ca.pemcert.pemkey.pem
- 使用命令远程连接:
docker--tlsverify--tlscacert=ca.pem--tlscert=cert.pem--tlskey=key.pem-H你的服务器IP:2376 info总结
- 一键生成:无需手动输入 openssl 命令,全自动生成
- 安全合规:证书权限严格按照 Docker 要求配置
- 开箱即用:自动输出配置,直接复制就能启用 TLS 加密
- 远程安全:2376 端口加密访问,杜绝未授权访问
