Docker Daemon Socket TLS 加密
为了防止链路劫持、会话劫持等问题导致 Docker 通信时被中 间人攻击,c/s 两端应该通过加密方式通讯
1.创建文件夹,修改主机名(方便后续使用)
mkdir /tls
cd /tls
hostnamectl set-hostname server
bash
2.客户机操作
hostnamectl set-hostname client
vi /etc/hosts
/etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.95.132 server
3.创建ca秘钥,设定秘钥密码
openssl genrsa -aes256 -out ca-key.pem 4096
4.创建ca证书
openssl req -new -x509 -days 365 -key ca-key.pem -sha256 -out ca.pem
5.创建服务器密钥
openssl genrsa -out server-key.pem 4096
6.证书签名请求 (CSR)
openssl req -subj "/CN=server" -sha256 -new -key server-key.pem -out server.csr
7.接下来,我们将用我们的 CA 签署公钥:
由于可以通过 IP 地址和 DNS 名称建立 TLS 连接,因此在创建证书时需要指定 IP 地址。例如,要允许使用192.168.95.133(测试用的Client)和连接127.0.0.1:
echo subjectAltName = DNS:server,IP:192.168.95.133,IP:127.0.0.1 >> extfile.cnf
将 Docker 守护进程密钥的扩展使用属性设置为仅用于服务器身份验证:
echo extendedKeyUsage = serverAuth >> extfile.cnf
8.生成签名证书:
openssl x509 -req -days 365 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out server-cert.pem -extfile extfile.cnf
9.生成客户端秘钥
openssl genrsa -out key.pem 4096
9.签名客户端
openssl req -subj '/CN=client' -new -key key.pem -out client.csr
10.创建配置文件
echo extendedKeyUsage = clientAuth > extfile-client.cnf
11.生成签名证书
openssl x509 -req -days 365 -sha256 -in client.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out cert.pem -extfile extfile-client.cnf
12.修改docker的配置文件,并且重启服务
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:2388
systemctl daemon-reload
systemctl restart docker
13.将 /tls/ca.pem
/tls/cert.pem
/tls/key.pem
三个文件复制到客户机的~/.docker/
下
14.服务端本地验证
docker --tlsverify --tlscacert=/tls/ca.pem --tlscert=/tls/cert.pem --tlskey=/tls/key.pem -H=127.0.0.1:2388 version
15.客户端验证
证书默认会去
~/.docker
下找
docker --tlsverify -H=192.168.95.132:2388 version
发表评论 取消回复