Docker---docker生产环境之TLS通讯加密

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Docker---docker生产环境之TLS通讯加密相关的知识,希望对你有一定的参考价值。

Docker---docker生产环境之TLS通讯加密

                    Docker---docker生产环境之TLS通讯加密
一: 在docker中搭建TLS加密
- 在公司的docker业务中,一般为了防止链路劫持、会话劫持等问题导致docker通信时被中间人***,c/s两端应该通过加密方式通讯。
- 流程: 秘钥key---> 身份前面csr---->(服务器/客户端) (结合ca.pem) 制作证书pem                    
#实验环境
| 角色                   | IP地址             | 软件包    |
| ---------------------- | ------------------ | --------- |
| master(docker服务端) | 192.168.100.200/24 | docker-ce |
| client(docker客户端) | 192.168.100.190/24 | docker-ce |

通过在服务端上创建tls密钥证书,再下发给客户端,客户端通过私钥访问容器,这样就保证的docker通讯的安全性

CA证书只是一个官方认证的证书
接下来要创建server、client节点的证书
此时创建证书有三步
1.设置私钥 确保安全加密
2.私钥签名 确保身份真实不可抵赖
3.制作证书
csr是一个签名文件
#---------------------------------------master操作
1.环境部署
echo "127.0.0.1   master" >> /etc/hosts 
ping master "要能ping通"
2.创建ca秘钥
mkdir /root/tls && cd /root/tls
openssl genrsa -aes256 -out ca-key.pem 4096     ‘//使用rsa非对称秘钥,位数256位,-out 输出密钥文件ca-key.pem‘
ls
"包含ca-key.pem"
3.创建ca证书  ‘//输入CA秘钥密码123123‘
openssl req -new -x509 -days 1000 -key ca-key.pem -sha256 -subj "/CN=*" -out ca.pem
ls
"包含ca-key.pem  ca.pem"
4.创建服务器server私钥
openssl genrsa -out server-key.pem 4096 ‘//创建服务器秘钥‘
ls
"ca-key.pem  ca.pem  server-key.pem"
5.创建服务器server签名私钥
openssl req -subj "/CN=*" -sha256 -new -key server-key.pem -out server.csr
ls
"ca-key.pem  ca.pem  server.csr  server-key.pem"
6.使用ca证书和签名私钥,创建server-cert.pem证书  "输入123123密码"
openssl x509 -req -days 1000 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out server-cert.pem   
ls
"ca-key.pem  ca.pem  ca.srl  server-cert.pem  server.csr  server-key.pem"
7.生成客户端client密钥
openssl genrsa -out key.pem 4096
ls
"ca-key.pem  ca.pem  ca.srl  key.pem  server-cert.pem  server.csr  server-key.pem"
8.生成客户端client签名
openssl req -subj "/CN=client" -new -key key.pem -out client.csr
ls
"ca-key.pem  ca.pem  ca.srl  client.csr  key.pem  server-cert.pem  server.csr  server-key.pem"
9.创建配置文件
echo extendedKeyUsage=clientAuth > extfile.cnf
ls
"ca-key.pem  ca.srl      extfile.cnf  server-cert.pem  server-key.pem ca.pem      client.csr  key.pem      server.csr"
10.创建签名证书,输入123123密码
openssl x509 -req -days 1000 -sha256 -in client.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out cert.pem -extfile extfile.cnf ‘//基于ca证书,ca秘钥生成签名证书‘
ls
"ca-key.pem  ca.srl    client.csr   key.pem          server.csr ca.pem      cert.pem  extfile.cnf  server-cert.pem  server-key.pem"
11.删除多余文件(也可以不删)
rm -rf ca.srl client.csr extfile.cnf server.csr /tmp
ls
"ca-key.pem  ca.pem  cert.pem  key.pem  server-cert.pem  server-key.pem"
12.修改docker的配置文件,并且重启服务
vi /usr/lib/systemd/system/docker.service
    #ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock "注释"
添加ExecStart=/usr/bin/dockerd --tlsverify --tlscacert=/root/tls/ca.pem --tlscert=/root/tls/server-cert.pem --tlskey=/root/tls/server-key.pem -H tcp://0.0.0.0:2376 -H unix:///var/run/docker.sock
systemctl daemon-reload
systemctl restart docker
13.将(ca.pem)ca证书,(cert.pem)签名证书,(key.pem)客户端密钥复制到client的/etc/docker目录下
scp ca.pem root@192.168.100.190:/etc/docker/
scp cert.pem root@192.168.100.190:/etc/docker/
scp key.pem root@192.168.100.190:/etc/docker/

#--------------------------Client操作
1.在client上设置基本环境,且验证TLS
echo "192.168.100.200   master" >> /etc/hosts
ping master
ls /etc/docker/
    "ca.pem  cert.pem  daemon.json  key.json  key.pem"
cd /etc/docker/     "在/etc/docker/执行以下命令"
docker --tlsverify --tlscacert=ca.pem --tlscert=cert.pem --tlskey=key.pem -H tcp://master:2376 version

2.测试
----master
docker pull nginx
docker --tlsverify --tlscacert=ca.pem --tlscert=cert.pem --tlskey=key.pem -H tcp://master:2376  images
"master能查看到自己本地的镜像"
----client
docker --tlsverify --tlscacert=ca.pem --tlscert=cert.pem --tlskey=key.pem -H tcp://master:2376  images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               latest              7e4d58f0e5f3        2 weeks ago         133MB
"client也能查看到"
//报错内容
[root@master tls]# docker --tlsverify --tlscacert=ca.pem --tlscert=cert.pem --tlskey=key.pem -H tcp://master:2375 images
Cannot connect to the Docker daemon at tcp://master:2375. Is the docker daemon running?
[root@master tls]# docker --tlsverify --tlscacert=ca.pem --tlskey=server-key.pem --tlscert=server-cert.pem -H tcp://server:2376 images
error during connect: Get https://server:2376/v1.40/images/json: dial tcp: lookup server on 114.114.114.114:53: no such host

//报错一般是端口错误或者证书错误

以上是关于Docker---docker生产环境之TLS通讯加密的主要内容,如果未能解决你的问题,请参考以下文章

Docker:Docker 三剑客之 Docker Swarm

TiDB 生产集群与加密通讯TLS的辛酸苦辣 - 开启篇

docker

Docker安全之TLS加密通讯解析与配置验证

解决docker: error pulling image configuration: Get https://registry-1.docker.io/v2/library/mysql/: TLS

深入浅出Docker:Docker的集成测试部署之道