Docker容器----TLS加密通讯
程序员文章站
2022-06-03 14:25:18
...
Docker容器----TLS加密通讯
一:介绍TLS
TLS (Transport Layer Security)指传输层安全,是解决网络安全的重量级武器。传输层安全最早由网景公司所开发,那时的名字还不叫TLS,而是SSL(Secure Sockets Layer),即安全套接字层。
1、TLS的目的
目的是建立起一个安全的通道。在建立安全通道时可以安全地传输数据之前,要经历一个TLS 握手过程 。 可以理解 TLS 协议是一个两阶段的协议 , 一个是握手阶段,一个是应用数据加密传输阶段。
同时,TLS 的协议又具有层次结构,所有的报文都会通过记录层协议 Record Layer Protocol 进行打包传输; 在记录层协议之上,又分为握手协议 Handshake Protocol,改变密码规格协;ChangeCipherSpec Protocol,警告协议 Alert Protocol,以及应用数据协议 Application Data Protocol 。
2、CA认证
证书颁发机构(CA, Certificate Authority)即颁发数字证书的机构。是负责发放和管理数字证书的权威机构,并作为电子商务交易中受信任的第三方,承担公钥体系中公钥的合法性检验的责任。
CA 证书颁发的时候,证书中是包含**对的,同时用户信息也是进行加密的,所以CA颁发的证书具有两个特点:用户发送的信息都是加密的;身份的唯一性。
二:构建TLS加密通信
- ### 实验环境
一台作为master节点(192.168.48.150)
一台作为client客户端(192.168.48.138)
前提是两台虚拟机都要装好docker的环境。
-
### 实验步骤
-
在master节点上配置
1、修改主机名,并配置hosts文件
[aaa@qq.com ~]# hostnamectl set-hostname master
[aaa@qq.com ~]# su
[aaa@qq.com ~]# vim /etc/hosts
127.0.0.1 master ‘末行添加’
2、创建目录和ca**
[aaa@qq.com ~]# mkdir /tls
[aaa@qq.com ~]# cd /tls
[aaa@qq.com tls]# openssl genrsa -aes256 -out ca-key.pem 4096
‘openssl :开放源代码的软件库包,应用程序可以使用这个包来进行安全通信,避免窃听’
‘genrsa:rsa 非对称**’
‘-aes256:指定**长度为256位’
‘-out ca-key.pem:创建ca-key.pam**文件’
3、创建ca证书
[aaa@qq.com 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证书’
4、创建服务器端的私钥
[aaa@qq.com tls]# openssl genrsa -out server-key.pem 4096
5、认证服务器私钥,签名私钥
[aaa@qq.com tls]# openssl req -subj "/CN=*" -sha256 -new -key server-key.pem -out server.csr
‘使用server-key.pem **文件进行签名,生产私钥证书’
6、 使用ca证书与私钥证书签名,输入密码,生成服务器证书
[aaa@qq.com 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:创建服务端的证书’
7、客户端**生成,使用**进行签名
[aaa@qq.com tls]# openssl genrsa -out key.pem 4096
[aaa@qq.com tls]# openssl req -subj "/CN=clinet" -new -key key.pem -out client.csr
8、创建配置文件
[aaa@qq.com tls]# echo extendedKeyUsage=clientAuth > extfile.cnf
9、创建签名证书,需指定ca证书、ca秘钥、客户端前面和刚生成的配置文件
[aaa@qq.com 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文件
[aaa@qq.com tls]# rm -rf ca.srl client.csr extfile.cnf server.csr
[aaa@qq.com tls]# vim /lib/systemd/system/docker.service
‘注释14行默认的准启动内容’
‘在15行添加准启动内容’
重新启动服务和进程
[aaa@qq.com tls]# systemctl daemon-reload
[aaa@qq.com tls]# systemctl restart docker
11、 将 /tls/ca.pem 、/tls/cert.pem 、/tls/key.pem 这三个文件复制到客户端/etc/docker下,需输入root密码
[aaa@qq.com tls]# scp ca.pem aaa@qq.com:/etc/docker/
[aaa@qq.com tls]# scp cert.pem aaa@qq.com:/etc/docker/
[aaa@qq.com tls]# scp key.pem aaa@qq.com:/etc/docker/
[aaa@qq.com ~]# hostnamectl set-hostname client
[aaa@qq.com ~]# vim /etc/hosts
192.168.48.150 master
[aaa@qq.com ~]# cd /etc/docker/
[aaa@qq.com docker]# ls
[aaa@qq.comt docker]# docker --tlsverify --tlscacert=ca.pem --tlscert=cert.pem --tlskey=key.pem -H tcp://master:2376 version