安全通信 TLS 生产环境
秘钥key----》身份签名csr----》服务器/客户端(结合ca)----》证书pem
一、认识TLS协议
【1】TLS的介绍
传输层安全性协议(英语:Transport Layer Security,缩写作TLS),及其前身安全套接层(Secure Sockets Layer,缩写作SSL)是一种安全协议,目的是为互联网通信提供安全及数据完整性保障。网景公司(Netscape)在1994年推出首版网页浏览器,网景导航者时,推出HTTPS协议,以SSL进行加密,这是SSL的起源。IETF将SSL进行标准化,1999年公布第一版TLS标准文件。随后又公布RFC 5246 (2008年8月)与RFC 6176(2011年3月)。在浏览器、邮箱、即时通信、VoIP、网络传真等应用程序中,广泛支持这个协议。主要的网站,如Google、Facebook等也以这个协议来创建安全连线,发送数据。目前已成为互联网上保密通信的工业标准。
【2】SSL的介绍
SSL包含记录层(Record Layer)和传输层,记录层协议确定传输层数据的封装格式。传输层安全协议使用X.509认证,之后利用非对称加密演算来对通信方做身份认证,之后交换对称密钥作为会谈密钥(Session key)。这个会谈密钥是用来将通信两方交换的数据做加密,保证两个应用间通信的保密性和可靠性,使客户与服务器应用之间的通信不被攻击者窃听。
【3】TLS算法
(1)密钥交换和密钥协商
在客户端和服务器开始交换TLS所保护的加密信息之前,他们必须安全地交换或协定加密密钥和加密数据时要使用的密码。用于密钥交换的方法包括:
使用RSA算法生成公钥和私钥(在TLS握手协议中被称为TLS_RSA),Diffie-Hellman(在TLS握手协议中被称为TLS_DH);
临时Diffie-Hellman(在TLS握手协议中被称为TLS_DHE),椭圆曲线迪菲-赫尔曼(在TLS握手协议中被称为TLS_ECDH);
临时椭圆曲线Diffie-Hellman(在TLS握手协议中被称为TLS_ECDHE),匿名Diffie-Hellman(在TLS握手协议中被称为TLS_DH_anon)和预共享密钥(在TLS握手协议中被称为TLS_PSK)。
(2)TLS加密的更新
TLS_DH_anon和TLS_ECDH_anon的密钥协商协议不能验证服务器或用户,因为易受中间人攻击因此很少使用。只有TLS_DHE和TLS_ECDHE提供前向保密能力。在交换过程中使用的公钥/私钥加密密钥的长度和在交换协议过程中使用的公钥证书也各不相同,因而提供的强健性的安全。2013年7月,Google宣布向其用户提供的TLS加密将不再使用1024位公钥并切换到2048位,以提高安全性。
二、docker安全通信的配置
【1】docker-tls加密通讯
为了防止链路劫持,会话劫持等问题导致docker通信是被中间人攻击,c/s两端应该通过加密方式通讯
mkdir /opt/tls
cd /opt/tls
hostnamectl set-hostname master
su
vim /etc/hosts
127.0.0.1 master
【2】创建ca秘钥
openssl genrsa -aes256 -out ca-key.pem 4096 //输入123123
【3】创建ca证书
openssl req -new -x509 -days 1000 -key ca-key.pem -sha256 -subj "/CN=*"-out ca.pem //输入123123
【4】创建服务器私钥
openssl genrsa -out server-key.pem 4096
【5】签名私钥
openssl req -subj "/CN=*" -sha256 -new -key server-key.pem -out server.csr
【6】使用ca证书与私钥证书签名,输入123123
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 key.pem 4096
【8】签名客户端
openssl req -subj "/CN=client" -new -key key.pem -out client.csr
【9】创建配置文件
echo extendedKeyUsage=clientAuth > extfile.cfn
【10】签名证书,输入123123,需要(签名客户端,ca证书,ca秘钥)
openssl x509 -req -days 1000 -sha256 -in client.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out cert.pem -extfile.cnf
【11】删除多余文件
rm -rf ca.srl client.csr extfile.cnf server.csr
【12】配置docker
vim /lib/systemd/system/docker.service
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
mkdir /tls
mv ./*.pem /tls
【13】重启进程和重启docker服务
systemctl daemon-reload
systemctl restart docker
【14】将/tls/ca.pem /tls/cert.pem /tls/key.pem三个文件复制到另一台主机
scp ca.pem root@192.168.60.10:/etc/docker/
scp cert.pem root@192.168.60.10:/etc/docker/
scp key.pem root@192.168.60.10:/etc/docker/
【15】本地验证
docker --tlsverify --tlscacert=ca.pem --tlscert=cert.pem --tlskey=key.pem -H tcp://master:2376 version
docker pull nginx
【16】client上面的操作
vim /etc/hosts
192.168.60.100 master
docker --tlsverify --tlscacert=ca.pem --tlscert=cert.pem --tlskey=key.pem -H tcp://master:2376 version