docker之生成CA证书及服务器公钥等 📅 2026/6/30 22:15:52 先清理所有文件cd/etc/docker/cert # 删除所有文件包括带特殊字符的 rm-f*.pem*.csr*.cnf*.srl2/dev/nullrm-f*$\r2/dev/nullrm-f create_tls_certs.sh # 确认清理 ls-la没有目录的话创建目录# 创建证书目录 mkdir-p/etc/docker/cert进入目录cd/etc/docker/cert创建证书生成脚本在 cert 目录下cat/etc/docker/cert/create_tls_certs.shEOF#!/bin/bash ##DockerTLS证书生成脚本 # 功能生成Docker远程TLS连接所需的证书 # 使用方法sh/etc/docker/cert/create_tls_certs.sh # 生成文件ca.pem,ca-key.pem,server-cert.pem,server-key.pem,cert.pem,key.pem ##----------配置信息----------SERVER211.985.11.26#Docker服务器IP或域名PASSWORDabcl2022#CA私钥密码(maven仓库setting文件中的密码)COUNTRYCN# 国家代码STATESICHUAN# 省份CITYCHENGDU# 城市ORGANIZATIONBAI# 组织名称ORGANIZATIONAL_UNITDev# 组织单位EMAIL876543210qq.com# 邮箱地址 #------------------------------echoecho开始生成 Docker TLS 证书echo服务器地址: ${SERVER}echo证书目录: /etc/docker/certecho# 切换到证书目录 cd/etc/docker/cert||exit1# 清理旧文件可选 # rm-f*.pem*.csr*.cnf*.srl2/dev/null#1.生成CA私钥使用AES256加密 echo步骤 1/6: 生成 CA 私钥...openssl genrsa-aes256-passout pass:${PASSWORD}-out ca-key.pem2048#2.生成CA证书 echo步骤 2/6: 生成 CA 证书...openssl req-new-x509-passinpass:${PASSWORD}-days3650\-key ca-key.pem-sha256-out ca.pem \-subj/C${COUNTRY}/ST${STATE}/L${CITY}/O${ORGANIZATION}/OU${ORGANIZATIONAL_UNIT}/CN${SERVER}/emailAddress${EMAIL}#3.生成服务器私钥 echo步骤 3/6: 生成服务器私钥...openssl genrsa-out server-key.pem2048#4.生成服务器证书请求文件 echo步骤 4/6: 生成服务器证书请求...openssl req-subj/CN${SERVER}-new-key server-key.pem-out server.csr #5.签发服务器证书 echo步骤 5/6: 签发服务器证书...openssl x509-req-days3650-in server.csr \-CAca.pem-CAkeyca-key.pem-passinpass:${PASSWORD}\-CAcreateserial-out server-cert.pem #6.生成客户端证书 echo步骤 6/6: 生成客户端证书...openssl genrsa-out key.pem2048openssl req-subj /CNclient-new-key key.pem-out client.csr # 创建客户端扩展配置 echoextendedKeyUsage clientAuthextfile.cnf # 签发客户端证书 openssl x509-req-days3650-in client.csr \-CAca.pem-CAkeyca-key.pem-passinpass:${PASSWORD}\-CAcreateserial-out cert.pem-extfile extfile.cnf #7.设置权限 echoecho设置文件权限...chmod0400ca-key.pem key.pem server-key.pem chmod0444ca.pem server-cert.pem cert.pem #8.清理临时文件 rm-f client.csr server.csr extfile.cnf ca.srl echoechoecho✅ 证书生成完成echoechoecho生成的文件列表ls-la/etc/docker/cert/*.pem echo echo 证书文件说明 echo ca-key.pem - CA 私钥妥善保管 echo ca.pem - CA 证书 echo server-key.pem - 服务器私钥 echo server-cert.pem - 服务器证书 echo key.pem - 客户端私钥 echo cert.pem - 客户端证书 echo echo EOF # 给脚本执行权限 chmod x /etc/docker/cert/create_tls_certs.sh echo ✅ 脚本已创建: /etc/docker/cert/create_tls_certs.sh执行脚本生成证书cd/etc/docker/cert./create_tls_certs.sh验证证书cd/etc/docker/cert # 查看所有证书文件 ls-la*.pem # 验证证书 echo验证服务器证书openssl verify-CAfileca.pem server-cert.pem echoecho验证客户端证书openssl verify-CAfileca.pem cert.pem echoecho验证证书匹配SERVER_MOD$(openssl x509-noout-modulus-in server-cert.pem|openssl md5)KEY_MOD$(openssl rsa-noout-modulus-in server-key.pem|openssl md5)if[$SERVER_MOD$KEY_MOD];then echo✅ 服务器证书和私钥匹配elseecho❌ 服务器证书不匹配fiCLIENT_MOD$(openssl x509-noout-modulus-in cert.pem|openssl md5)CLIENT_KEY_MOD$(openssl rsa-noout-modulus-in key.pem|openssl md5)if[$CLIENT_MOD$CLIENT_KEY_MOD];then echo✅ 客户端证书和私钥匹配elseecho❌ 客户端证书不匹配fi配置 Docker 使用证书# 使用 override 方式配置 mkdir-p/etc/systemd/system/docker.service.d cat/etc/systemd/system/docker.service.d/override.confEOF[Service]ExecStartExecStart/usr/bin/dockerd-Htcp://0.0.0.0:2375-Hunix:///var/run/docker.sock --tlsverify --tlscacert/etc/docker/cert/ca.pem --tlscert/etc/docker/cert/server-cert.pem --tlskey/etc/docker/cert/server-key.pemEOF# 重新加载并重启 systemctl daemon-reload systemctl restart docker # 查看状态 systemctl status docker.service # 查看监听端口 netstat-tlnp|grep docker下载证书到本地需要下载以下三个文件到本地/etc/docker/cert/ca.pem/etc/docker/cert/cert.pem/etc/docker/cert/key.pem如果启动失败查看日志journalctl-u docker.service-n50--no-pager