docker 通信加密

目录

一、DockerClient端与DockerDaemon的通信安全(https证书)

1.1 背景

1.2 使用证书访问的工作流程

1.3 部署思路

1.4 证书创建过程

1.4.1 环境准备

1.4.2 创建一个存放目录

1.4.2 生成ca证书

1.4.3 用ca证书签发server端证书

1.4.4 用ca证证书签发client端证书

1.4.5 删除两个证书签名请求文件和扩展配置文件

1.4.6 配置docker服务配置文件

1.4.7 重启docker服务

1.4.8 修改服务端的主机名和ip映射

1.4.9 本地验证

1.4.10 在客户端上操作

1.5 避免Docker容器中信息泄露


一、DockerClient端与DockerDaemon的通信安全(https证书)

1.1 背景

为了防止链路劫持、会话劫持等问题导致Docker通信时被中间人攻击,c/s两端应该通过TLS加密方式通讯

1.2 使用证书访问的工作流程

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


(1)客户端发起请求,连接到服务器的进程端口。
(2)服务器必须要有一套数字证书(证书内容有公钥、证书颁发机构、失效日期等)。
(3)服务器将自己的数字证书发送给客户端(公钥在证书里面,私钥由服务器持有)。
(4)客户端收到数字证书之后,会验证证书的合法性。如果证书验证通过,就会生成一个随机的密钥对,用证书的公钥加密。
(5)客户端将公钥加密后的密钥发送到服务器。
(6)服务器接收到客户端发来的密文密钥之后,用自己之前保留的私钥对其进行非对称解密,解密之后就得到客户端的密钥,然后用客户端密钥对返回数据进行对称加密,这样传输的数据都是密文了。
(7)服务器将加密后的密文数据返回到客户端。
(8)客户端收到后,用自己的密钥对其进行对称解密,得到服务器返回的数据

 

1.3 部署思路

首先创建ca证书,ca证书只是一个官方认证的证书,接下来要创建server、client节点的证书
此时创建证书有三步:
1.设置私钥,确保安全加密
2.使用私钥签名,确保身份真实不可抵赖
3.使用ca证书制作证书

1.4 证书创建过程

1.4.1 环境准备

服务器ip组件
master192.168.80.11docker-ce
client192.168.80.12docker-ce

1.4.2 创建一个存放目录

mkdir /tls
cd /tls/

 

 

1.4.2 生成ca证书

1)创建ca私钥

openssl genrsa -aes256 -out ca-key.pem 4096			#输入123456
==========================================================
genrsa:使用RSA算法产生私钥
-aes256:使用256位密钥的AES算法对私钥进行加密,这样每次使用私钥文件都将输入密码,可省略
-out:输出文件的路径,若未指定输出文件,则为标准输出
4096:指定私钥长度,默认为1024。该项必须为命令行的最后一项参数
==========================================================

2)创建ca证书

openssl req -new -x509 -days 1000 -key ca-key.pem -sha256 -subj "/CN=*" -out ca.pem			#输入123456
==========================================================
req:执行证书签发命令
-new:新证书签发请求
-x509:生成x509格式证书,专用于创建私有CA时使用
-days:证书的有效时长,单位是天
-key:指定私钥路径
-sha256:证书摘要采用sha256算法
-subj:证书相关的用户信息(subject的缩写)
-out:输出文件的路径
==========================================================

 

1.4.3 用ca证书签发server端证书

1)创建服务器私钥

openssl genrsa -out server-key.pem 4096

 

2)生成证书签名请求文件(csr文件)

openssl req -new -key server-key.pem -sha256 -subj "/CN=*" -out server.csr

3)使用ca证书与私钥证书签发服务端签名证书

openssl x509 -req -days 1000 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out server-cert.pem     #输入123456
==========================================================
x509:生成x509格式证书
-req:输入csr文件
-in:要输入的csr文件
-CA:指定ca证书的路径
-CAkey:指定ca证书的私钥路径
-CAcreateserial:表示创建证书序列号文件,创建的序列号文件默认名称为ca.srl
==========================================================

1.4.4 用ca证证书签发client端证书

1)生成客户端私钥

openssl genrsa -out client-key.pem 4096

2)生成证书签名请求文件

openssl req -new -key client-key.pem -subj "/CN=*" -out client.csr

3)创建扩展配置文件,使秘钥适合客户端身份验证

echo extendedKeyUsage=clientAuth > extfile.cnf

4)使用ca证书签发客户端签名证书

openssl x509 -req -days 1000 -sha256 -in client.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out client-cert.pem -extfile extfile.cnf   #输入123456

1.4.5 删除两个证书签名请求文件和扩展配置文件

rm -rf ca.srl client.csr extfile.cnf server.csr

1.4.6 配置docker服务配置文件

vim /usr/lib/systemd/system/docker.service
--13行--修改
ExecStart=/usr/bin/dockerd --tlsverify --tlscacert=/tls/ca.pem --tlscert=/tls/server-cert.pem --tlskey=/tls/server-key.pem -H tcp://0.0.0.0:2376 -H unix:///var/run/docker.sock

1.4.7 重启docker服务

systemctl daemon-reload
systemctl restart docker
netstat -natp | grep 2376

1.4.8 修改服务端的主机名和ip映射

hostnamectl set-hostname master
su

vim /etc/hosts	
127.0.0.1   master

1.4.9 本地验证

cd /tls/
docker --tlsverify --tlscacert=ca.pem --tlscert=server-cert.pem --tlskey=server-key.pem -H tcp://master:2376 pull cirros

docker --tlsverify --tlscacert=ca.pem --tlscert=server-cert.pem --tlskey=server-key.pem -H tcp://master:2376 images

1.4.10 在客户端上操作

1.将/tls目录中的ca.pem、client-cert.pem、client-key.pem 三个文件复制到另一台主机
scp ca.pem 192.168.80.12:/etc/docker/
scp client-cert.pem 192.168.80.12:/etc/docker/
scp client-key.pem 192.168.80.12:/etc/docker/

2.修改客户端的主机名和ip映射
hostnamectl set-hostname client
su

vim /etc/hosts
192.168.80.11   master

3.客户端验证
cd /etc/docker/
docker --tlsverify --tlscacert=ca.pem --tlscert=client-cert.pem --tlskey=client-key.pem -H tcp://master:2376 images

1.5 避免Docker容器中信息泄露

近几年Github上大量泄露个人或企业各种账号密码,出现这种问题一般都使用 dockerfile 或者 docker-compose 文件创建容器。如果这些文件中存在账号密码等认证信息,一旦Docker容器对外开放,则这些宿主机上的敏感信息也会随之泄露

可以通过以下方式检查容器创建模板的内容。
# check created users
grep authorized_keys $dockerfile

# check OS users
grep "etc/group" $dockerfile

# Check sudo users
grep "etc/sudoers.d" $dockerfile

# Check ssh key pair
grep ".ssh/.*id_rsa" $dockerfile

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值