Docker启用TLS实现安全配置的步骤
发表于:2025-12-02 作者:千家信息网编辑
千家信息网最后更新 2025年12月02日,前言之前开启了docker的2375 Remote API,接到公司安全部门的要求,需要启用授权,翻了下官方文档Protect the Docker daemon socket启用TLS在docker
千家信息网最后更新 2025年12月02日Docker启用TLS实现安全配置的步骤
前言
之前开启了docker的2375 Remote API,接到公司安全部门的要求,需要启用授权,翻了下官方文档
Protect the Docker daemon socket
启用TLS
在docker服务器,生成CA私有和公共密钥
$ openssl genrsa -aes256 -out ca-key.pem 4096Generating RSA private key, 4096 bit long modulus............................................................................................................................................................................................++........++e is 65537 (0x10001)Enter pass phrase for ca-key.pem:Verifying - Enter pass phrase for ca-key.pem:$ openssl req -new -x509 -days 365 -key ca-key.pem -sha256 -out ca.pemEnter pass phrase for ca-key.pem:You are about to be asked to enter information that will be incorporatedinto your certificate request.What you are about to enter is what is called a Distinguished Name or a DN.There are quite a few fields but you can leave some blankFor some fields there will be a default value,If you enter '.', the field will be left blank.-----Country Name (2 letter code) [AU]:State or Province Name (full name) [Some-State]:QueenslandLocality Name (eg, city) []:BrisbaneOrganization Name (eg, company) [Internet Widgits Pty Ltd]:Docker IncOrganizational Unit Name (eg, section) []:SalesCommon Name (e.g. server FQDN or YOUR name) []:$HOSTEmail Address []:Sven@home.org.au
有了CA后,可以创建一个服务器密钥和证书签名请求(CSR)
$HOST 是你的服务器ip
$ openssl genrsa -out server-key.pem 4096Generating RSA private key, 4096 bit long modulus.....................................................................++.................................................................................................++e is 65537 (0x10001)$ openssl req -subj "/CN=$HOST" -sha256 -new -key server-key.pem -out server.csr
接着,用CA来签署公共密钥:
$ echo subjectAltName = DNS:$HOST,IP:$HOST:127.0.0.1 >> extfile.cnf $ echo extendedKeyUsage = serverAuth >> extfile.cnf
生成key:
$ openssl x509 -req -days 365 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem \ -CAcreateserial -out server-cert.pem -extfile extfile.cnfSignature oksubject=/CN=your.host.comGetting CA Private KeyEnter pass phrase for ca-key.pem:
创建客户端密钥和证书签名请求:
$ openssl genrsa -out key.pem 4096Generating RSA private key, 4096 bit long modulus.........................................................++................++e is 65537 (0x10001)$ openssl req -subj '/CN=client' -new -key key.pem -out client.csr
修改extfile.cnf:
echo extendedKeyUsage = clientAuth > extfile-client.cnf
生成签名私钥:
$ openssl x509 -req -days 365 -sha256 -in client.csr -CA ca.pem -CAkey ca-key.pem \ -CAcreateserial -out cert.pem -extfile extfile-client.cnfSignature oksubject=/CN=clientGetting CA Private KeyEnter pass phrase for ca-key.pem:
将Docker服务停止,然后修改docker服务文件
[Unit]Description=Docker Application Container EngineDocumentation=http://docs.docker.io[Service]Environment="PATH=/opt/kube/bin:/bin:/sbin:/usr/bin:/usr/sbin"ExecStart=/opt/kube/bin/dockerd --tlsverify --tlscacert=/root/docker/ca.pem --tlscert=/root/docker/server-cert.pem --tlskey=/root/docker/server-key.pem -H unix:///var/run/docker.sock -H tcp://0.0.0.0:2375ExecStartPost=/sbin/iptables -I FORWARD -s 0.0.0.0/0 -j ACCEPTExecReload=/bin/kill -s HUP $MAINPIDRestart=on-failureRestartSec=5LimitNOFILE=infinityLimitNPROC=infinityLimitCORE=infinityDelegate=yesKillMode=process[Install]WantedBy=multi-user.target
然后重启服务
systemctl daemon-reloadsystemctl restart docker.service
重启后查看服务状态:
systemctl status docker.service● docker.service - Docker Application Container Engine Loaded: loaded (/etc/systemd/system/docker.service; enabled; vendor preset: enabled) Active: active (running) since Thu 2019-08-08 19:22:26 CST; 1 min ago
已经生效。
使用证书连接:
复制ca.pem,cert.pem,key.pem三个文件到客户端
docker --tlsverify --tlscacert=ca.pem --tlscert=cert.pem --tlskey=key.pem -H=$HOST:2375 version连接即可
docker-java 启用TLS
项目里使用docker的java客户端docker-java调用docker,为了支持TLS,在创建客户端时,需要增加TLS设置。
首先将ca.pem cert.pem key.pem这三个文件拷贝到本地,例如E:\\docker\\",
然后DefaultDockerClientConfig里withDockerTlsVerify设为true,并设置certpath为刚拷贝的目录。
DefaultDockerClientConfig.Builder builder = DefaultDockerClientConfig.createDefaultConfigBuilder() .withDockerHost("tcp://" + server + ":2375") .withApiVersion("1.30"); if (containerConfiguration.getDockerTlsVerify()) { builder = builder.withDockerTlsVerify(true) .withDockerCertPath("E:\\docker\\"); } return DockerClientBuilder.getInstance(builder.build()).build()大工搞定。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对的支持。
服务
客户
客户端
密钥
文件
服务器
证书
生成
三个
内容
拷贝
学习
支持
安全
价值
公司
前言
安全部门
官方
就是
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
数据库范式描述正确
sql数据库考证
网络技术发展趋势分析
义乌市莫林网络技术有限公司
服务器迁移需要多少钱
蜀门连不到服务器
海外免费加速服务器
服务器中间件是什么
分批数据库怎么获取
浪潮服务器设置sata
维普数据库是哪个公司的
数据库实例 英文
csgo刀服务器
哪里有网络安全课程
百度云服务器管理员密码
达梦数据库查找文件路径
游戏突然找不到服务器怎么回事
游戏服务器数据
数据库小程序可以在别人机上用吗
无代码的软件开发平台
广州应用软件开发工程师
数据库技术是从
软件开发技术精还是广
阅读数据库设计
潘泓丞软件开发公司
安徽省平台土地确权数据库
高防服务器需要备案吗
ebooss直聘网络安全审查
加工网络技术服务
数据库技术文案爱情