docker——tls(ssl)加密通信
DockerClient端与DockerDaemon的通信安全(https证书)
背景
为了防止链路劫持、会话劫持等问题导致Docker通信时被中间人攻击,c/s两端应该通过TLS加密方式通讯
使用证书访问的工作流程
通过在服务端上创建tls密钥证书,再下发给客户端,客户端通过私钥访问容器,这样就保证的docker通讯的安全性
(1)客户端发起请求,连接到服务器的进程端口。
(2)服务器必须要有一套数字证书(证书内容有公钥、证书颁发机构、失效日期等)。
(3)服务器将自己的数字证书发送给客户端(公钥在证书里面,私钥由服务器持有)。
(4)客户端收到数字证书之后,会验证证书的合法性。如果证书验证通过,就会生成一个随机的密钥对,用证书的公钥加密。
(5)客户端将公钥加密后的密钥发送到服务器。
(6)服务器接收到客户端发来的密文密钥之后,用自己之前保留的私钥对其进行非对称解密,解密之后就得到客户端的密钥,然后用客户端密钥对返回数据进行对称加密,这样传输的数据都是密文了。
(7)服务器将加密后的密文数据返回到客户端。
(8)客户端收到后,用自己的密钥对其进行对称解密,得到服务器返回的数据
部署思路
首先创建ca证书,ca证书只是一个官方认证的证书,接下来要创建server、client节点的证书
此时创建证书有三步:
1.设置私钥,确保安全加密
2.使用私钥签名,确保身份真实不可抵赖
3.使用ca证书制作证书
证书创建过程
环境准备
服务器 | ip | 组件 |
---|---|---|
master | 192.168.80.11 | docker-ce |
client | 192.168.80.12 | docker-ce |
创建一个存放目录
mkdir /tls
cd /tls/
生成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
============