要让docker守护进程支持国密tls,需三方面协同:一、用gmssl等国密openssl生成sm2/sm4证书链;二、在daemon.json中严格配置tlsverify、证书路径及hosts;三、验证国密握手、日志套件及内核cgroup v2支持。

要让 Docker 守护进程支持国密 TLS(SM2/SM4)证书通道,核心是替换默认的 OpenSSL 密码套件、使用国密引擎签发证书,并在 daemon.json 中启用严格验证。这不是简单改几个路径,而是需从证书生成、守护进程配置、内核与运行时兼容性三方面协同加固。
使用国密引擎生成 SM2/SM4 证书链
必须用支持国密的 OpenSSL 3.0+(如 gmssl 或启用了国密引擎的 OpenSSL),不能用普通 RSA/AES 工具生成:
- 生成国密根 CA 私钥和证书:
gmssl genpkey -algorithm sm2 -out ca.key -pkeyopt ec_paramgen_curve:sm2p256v1gmssl req -x509 -new -key ca.key -out ca.pem -days 3650 -subj "/CN=MyOrg-GM-CA" - 为 Docker 主机生成服务端证书(关键:含 SAN,覆盖所有访问 IP/DNS):
gmssl genpkey -algorithm sm2 -out server.keygmssl req -new -key server.key -out server.csr -subj "/CN=localhost"echo "subjectAltName = IP:192.168.10.5,IP:127.0.0.1,DNS:docker-prod.internal" > extfile.cnfecho "extendedKeyUsage = serverAuth" >> extfile.cnfgmssl x509 -req -in server.csr -CA ca.pem -CAkey ca.key -CAcreateserial -out server.pem -days 365 -extfile extfile.cnf - 私钥权限必须设为
600,属主为root:docker,否则 Docker 启动会拒绝加载。
配置 daemon.json 启用国密 TLS 双向验证
编辑 /etc/docker/daemon.json,只保留安全监听项,禁用明文端口:
用于端到端视频本地化流程的轻量编排器,路由至四个专注子技能——/wjs-transcribing-audio、/wjs-translating-subtitles...
- 移除
tcp://:2375,仅保留"tcp://0.0.0.0:2376"; - 显式启用双向认证:
"tlsverify": true(比"tls": true更严格); - 指定证书路径(全部为绝对路径):
"tlscacert": "/etc/docker/certs/ca.pem","tlscert": "/etc/docker/certs/server.pem","tlskey": "/etc/docker/certs/server.key"; - 添加
"hosts"字段明确声明监听方式,避免隐式 fallback:"hosts": ["unix:///var/run/docker.sock", "tcp://0.0.0.0:2376"]。
验证国密握手与运行时兼容性
配置后不能只看 Docker 是否启动,要确认国密协议真正生效:
- 用
gmssl s_client -connect 192.168.10.5:2376 -CAfile /etc/docker/certs/ca.pem测试连接,输出中应出现Server public key is SM2和SSL handshake has read ... bytes and written ... bytes,且无no shared cipher报错; - 检查 Docker 日志:
journalctl -u docker | grep -i "tls\|sm2\|cipher",确认加载了国密套件(如TLS_SM4_GCM_SM3); - 国产 OS(如 openEuler 22.03、UOS Server 23)需确认已启用 cgroup v2 并关闭 cgroup v1:
cat /proc/sys/fs/cgroup/max_depth应返回1(表示 v2 模式),否则 TLS 加固可能因内核资源隔离异常而降级。
客户端同步部署国密信任链
管理终端或 CI/CD 节点需完成对应配置才能建立可信连接:
- 将
ca.pem、cert.pem(客户端证书)、key.pem(客户端私钥)放入~/.docker/目录; - 设置环境变量(Linux/macOS):
export DOCKER_HOST=tcp://192.168.10.5:2376export DOCKER_TLS_VERIFY=1export DOCKER_CERT_PATH=$HOME/.docker; - 执行
docker info,返回结果中应包含Security Options: seccomp apparmor gmsm(gmsm表示国密模块已激活)。










