一、TLS加密通信
在公司的docker业务中,一般为了防止链路劫持、会话劫持等问题导致docker通信时
被中间人攻击,C/S两端应该通过加密方式通讯。
二、搭建部署
2.1、搭建环境
两台虚拟机都安装了 docker-ce。
server端-----10.0.0.10
client端------10.0.0.20
2.2、server端部署
1、修改主机名,并配置hosts文件
hostnamectl set-hostname master
su
vim /etc/hosts
127.0.0.1 master ‘末行添加’
2、创建目录和ca密钥
[root@master ~]# mkdir /tls
[root@master ~]# cd /tls
[root@master tls]# openssl genrsa -aes256 -out ca-key.pem 4096
‘openssl :开放源代码的软件库包,应用程序可以使用这个包来进行安全通信,避免窃听’
‘genrsa:rsa 非对称密钥’
‘-aes256:指定密钥长度为256位’
‘-out ca-key.pem:创建ca-key.pam密钥文件’
Generating RSA private key, 4096 bit long modulus
.......................................++
..................................................................++
e is 65537 (0x10001)
Enter pass phrase for ca-key.pem: #输入密码
Verifying - Enter pass phrase for ca-key.pem: #确认密码
[root@master tls]# ls
ca-key.pem #生成的密匙
3、创建ca证书
[root@master tls]# openssl req -new -x509 -days 1000 -key ca-key.pem -sha256 -subj "/CN=*" -out ca.pem
‘ -days 1000:有效期是1000天 ’
‘req -new:请求创建新的证书’
‘-x509:证书的一个参数’
‘-key:指定密钥文件’
‘-sha256:哈希验证’
‘-subj “/CN=*”:指定项目名称’
‘-out ca.pam:产生出ca证书’
[root@master tls]# openssl req -new -x509 -days 1000 -key ca-key.pem -sha256 -subj "/CN=*" -out ca.pem
Enter pass phrase for ca-key.pem: #输入创建ca密匙时的密码
[root@master tls]# ls
ca-key.pem ca.pem #官方颁布的证书
4、创建服务器端的私钥
[root@master tls]# openssl genrsa -out server-key.pem 4096
Generating RSA private key, 4096 bit long modulus
........................................................................................................++
...........++
e is 65537 (0x10001)
[root@master tls]# ls
ca-key.pem ca.pem server-key.pem
5、认证服务器私钥,签名私钥
[root@master tls]# openssl req -subj "/CN=*" -sha256 -new -key server-key.pem -out server.csr
‘使用server-key.pem 密钥文件进行签名,生产私钥证书’
[root@master tls]# ls
ca-key.pem ca.pem server.csr server-key.pem
6、 使用ca证书与私钥证书签名,输入密码,生成服务器证书
[root@master tls]# openssl x509 -req -days 1000 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out server-cert.pem
‘openssl x509:使用openssl方式生成 509证书’
‘-in server.csr :导入签名文件’
‘-CA ca.pam :加入CA官方授权的证书’
‘-CAcreateserial -out server-cert.pem:创建服务端的证书’
Signature ok
subject=/CN=*
Getting CA Private Key
Enter pass phrase for ca-key.pem: #输入密码
[root@master tls]# ls
ca-key.pem ca.pem ca.srl server-cert.pem server.csr server-key.pem
7、客户端密钥生成,使用密钥进行签名
[root@master tls]# openssl genrsa -out key.pem 4096
Generating RSA private key, 4096 bit long modulus
.............++
...........................................++
e is 65537 (0x10001)
[root@master tls]# openssl req -subj "/CN=clinet" -new -key key.pem -out client.csr
[root@master tls]# ls
ca-key.pem ca.pem ca.srl client.csr key.pem server-cert.pem server.csr server-key.pem
8、创建配置文件
[root@master tls]# echo extendedKeyUsage=clientAuth > extfile.cnf
9、创建签名证书,需指定ca证书、ca秘钥、客户端前面和刚生成的配置文件
[root@master tls]# openssl x509 -req -days 1000 -sha256 -in client.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out cert.pem -extfile extfile.cnf
10、删除多余的文件,配置docker service文件
[root@master tls]# rm -rf ca.srl client.csr extfile.cnf server.csr
[root@master tls]# vim /lib/systemd/system/docker.service
‘注释14行默认的准启动内容’
‘在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
加载单元,重启服务
[root@master tls]# systemctl daemon-reload
[root@master tls]# systemctl restart docker
11、 将 /tls/ca.pem 、/tls/cert.pem 、/tls/key.pem 这三个文件复制到客户端/etc/docker下,需输入root密码
[root@master tls]# scp ca.pem root@10.0.0.20:/etc/docker/
[root@master tls]# scp cert.pem root@10.0.0.20:/etc/docker/
[root@master tls]# scp key.pem root@10.0.0.20:/etc/docker/
客户端验证
[root@localhost ~]# hostnamectl set-hostname client
[root@localhost ~]# su
[root@client ~]# vim /etc/hosts
10.0.0.10 master
[root@client ~]# cd /etc/docker/
[root@client docker]# ls
ca.pem cert.pem daemon.json key.json key.pem
[root@client docker]# docker --tlsverify --tlscacert=ca.pem --tlscert=cert.pem --tlskey=key.pem -H tcp://master:2376 version