Docker安全加固----TLS加密通信

Docker安全加固----TLS加密通信

为了防止会话劫持、链路劫持等一系列中间人攻击,成为了Docker安全通信的首要目标。为了解决这个问题,我们可以使用TLS加密,为主机颁发认证证书,只有通过认证才可以通过。

一、什么是中间人攻击?

中间人攻击是一种非常常见的黑客攻击的手段,如果两台主机,a主机和b主机在通信。这个这个过程被另一台c主机窃听到了两台主机之间的通信内容,如果不加密的话,黑客有可能篡改其中的通信内容,这样就会导致发送的信息并非本意。

二、TSL加密通信让通信更加安全

构建TSL加密通信:这里需要准备两台主机,一台作为master节点,另一台作为客户机。

(1)、主节点的操作

1.配置hosts文件:

[root@master tls]# vi /etc/hosts
#将本地127地址解析为主机名
127.0.0.1   master
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
修改主机名
hostnamectl set-hostname master
su

2.创建ca秘钥文件
创建一个TLS文件目录在其中进行相关操作。

#创建目录
mkdir /tls
生成ca秘钥文件
#用openssl生成非对称256位秘钥,-out表示生成
openssl genrsa -aes256 -out ca-key.pem 4096

Docker安全加固----TLS加密通信_第1张图片
3.创建ca证书

#指定证书有效期为1000天,指向刚才生成的ca秘钥,指定项目名称,-subj ,-out 生成ca.pem证书。
openssl req -new -x509 -days 1000 -key ca-key.pem -sha256 -subj "/CN=*" -out ca.pem

在这里插入图片描述
4.创建服务器的私钥

#非对称私钥
 openssl genrsa -out server-key.pem 4096

Docker安全加固----TLS加密通信_第2张图片
5.认证服务器私钥,签名服务器私钥。

#需要对刚才的服务器私钥进行认证的过程,指定项目名称和服务器私钥名称。
openssl req -subj "/CN=*" -sha256 -new -key server-key.pem -out server.csr

在这里插入图片描述
6.使用ca证书和服务器私钥签名创建一个服务器的证书。

指定ca秘钥和私钥证书的签名
openssl x509 -req -days 1000 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out server-cert.pem

在这里插入图片描述
7.生成客户端秘钥

openssl genrsa -out server-key.pem 4096

8.签名客户端秘钥进行认证。

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

9.创建配置文件。

echo extendedKeyUsage=clientAuth > extfile.cnf

在这里插入图片描述
10.签名证书,需要指定ca证书、ca秘钥、客户端签名和刚才生成的配置文件。

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

11.三处配置文件和签名。

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

12.配置docker的docker.server

vi /lib/systemd/system/docker.service

#在第15行出处添加证书
 [Service]
     10 Type=notify
     11 # the default is not to use systemd for cgroups because the delegate issues still
     12 # exists and systemd currently does not support the cgroup feature set required
     13 # for containers run by docker
     14 #ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
     15 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
     16 ExecReload=/bin/kill -s HUP $MAINPID

13.将 /tls/ca.pem /tls/cert.pem /tls/key.pem 三个文件复制到另一台主机。

scp ca.pem [email protected]:/etc/docker/
scp cert.pem [email protected]:/etc/docker/
scp key.pem [email protected]:/etc/docker/

14.在本地终端进行TSL加密通信验证。

docker --tlsverify --tlscacert=ca.pem --tlscert=cert.pem --tlskey=key.pem -H tcp://master:2376 version
docker pull nginx

这里用的是相对路径,如果在其他路径一定要使用秘钥的绝对路径。
Docker安全加固----TLS加密通信_第3张图片
15.清空iptables规则否则,节点无法与其通信。

iptables -F

(2)、节点的操作

1.配置hosts解析master节点。

vi /etc/hosts
192.168.80.106 master

2.在其他终端验证通信加密。这里的命令也是相对路径。在/etc/docker目录中。

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

Docker安全加固----TLS加密通信_第4张图片这样TSL加密通信就完成了!

你可能感兴趣的:(docker)