欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Docker容器----TLS加密通讯

程序员文章站 2022-06-03 14:25:18
...

Docker容器----TLS加密通讯

一:介绍TLS

​ TLS (Transport Layer Security)指传输层安全,是解决网络安全的重量级武器。传输层安全最早由网景公司所开发,那时的名字还不叫TLS,而是SSL(Secure Sockets Layer),即安全套接字层。

1、TLS的目的

​ 目的是建立起一个安全的通道。在建立安全通道时可以安全地传输数据之前,要经历一个TLS 握手过程 。 可以理解 TLS 协议是一个两阶段的协议 , 一个是握手阶段,一个是应用数据加密传输阶段。

Docker容器----TLS加密通讯

​ 同时,TLS 的协议又具有层次结构,所有的报文都会通过记录层协议 Record Layer Protocol 进行打包传输; 在记录层协议之上,又分为握手协议 Handshake Protocol,改变密码规格协;ChangeCipherSpec Protocol,警告协议 Alert Protocol,以及应用数据协议 Application Data Protocol 。

Docker容器----TLS加密通讯

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**文件’

Docker容器----TLS加密通讯

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证书’

Docker容器----TLS加密通讯

4、创建服务器端的私钥
[aaa@qq.com tls]# openssl genrsa -out server-key.pem 4096

Docker容器----TLS加密通讯

5、认证服务器私钥,签名私钥
[aaa@qq.com tls]# openssl req -subj "/CN=*" -sha256 -new -key server-key.pem -out server.csr
‘使用server-key.pem **文件进行签名,生产私钥证书’

Docker容器----TLS加密通讯

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:创建服务端的证书’

Docker容器----TLS加密通讯

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

Docker容器----TLS加密通讯

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

Docker容器----TLS加密通讯

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行添加准启动内容’

Docker容器----TLS加密通讯

重新启动服务和进程
[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

Docker容器----TLS加密通讯