千家信息网

Docker启用TLS实现安全配置的步骤

发表于:2024-10-16 作者:千家信息网编辑
千家信息网最后更新 2024年10月16日,前言之前开启了docker的2375 Remote API,接到公司安全部门的要求,需要启用授权,翻了下官方文档Protect the Docker daemon socket启用TLS在docker
千家信息网最后更新 2024年10月16日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安全错误 数据库的锁怎样保障安全 服务器宕机解决方法 上海参考软件开发一体化 企业数据库信息安全 四川联想服务器虚拟化多少钱 优质软件开发哪里做得好 远程服务器文件管理 RUP软件开发过程包括 有网络安全模式就死机 越狱网络安全吗 数据库字典生成数据库 ldb文件时什么数据库 服务器开机时硬盘读文件卡住 个人软件开发网站源码 计算机网络技术吉林省 pmm 数据库监控 丰南区网络营销软件开发常见问题 苏州科技学院网络安全实验 如何提高基层辅警网络安全 迷你世界怎么搞崩服务器 公司服务器下载后会有记录吗 oecd数据库有立陶宛的数据吗 世界最好的关系数据库 网络安全技术与应用课后 智能软件开发价格走势 云服务器是不是都要重新换系统 求职网络安全公司的愿景 数据库模型图 设计工具 宁波网络安全宣传主题展 网络安全整改技术协议 织梦修改数据库密码后
0