RH236GlusterFS-数据传输加密(理论)
RHCSA专栏:戏说 RHCSA 认证
RHCE专栏:戏说 RHCE 认证
此文章(第十五章 GlusterFS-数据传输加密(理论))收录在RHCA专栏:RHCA 回忆录
在数据传输过程中,将数据进行加密,防止非授权用户的访问
通过TLS/SSL来实现
在gluster中,主要有两个地方需要加密:
-
I/O加密,客户端---->server
-
管理加密,在一个信任的存储池内,各个节点gusterd进程之间也要连接,所以也要加密
TLS/SSL加密
CA中心
1.server创建自己的密钥对(公钥+私钥),并且使用自己的私钥生成证书申请文件,生成证书申请的时候,还会把自己的公钥也放进去
2.将生成的证书申请文件,发送到CA中心进行签名
3.CA中心,有自己的密钥对和自签名证书,自签名证书里包含了CA中心的公钥,使用自己的私钥,对收到的证书申请进行签名,并回传给server
验证过程
1.客户端发送访问请求到server
2.server将经过CA中心签过名的证书发送给客户端
3.客户端收到这个证书,首先要对这个证书进行验证,因为这个证书是用CA中心的私钥创建的,所以需要用CA中心的公钥进行验证,而CA中心的公钥就在CA中心的自签名证书里,也就是说客户端需要有CA中心的自签名证书
4.如果验证成功,也就说明server是受信任的
5.同理,server端也可以验证客户端
加密过程
加密分对称加密和非对称加密
非对称加密:更加安全,相对于对称加密来说,加解密过程非常慢
对称加密:密码容易泄漏,但加解密速度快
所以,我们可以先通过非对称加密来传输对称加密的密码,然后使用对称加密来进行数据的加解密。
1.客户端生成一个随机密码,使用server的公钥加密,并传递给server
2.server使用自己的私钥解密,得到这个密码
3.随后,双方就使用这个密码进行对称加解密
创建CA中心
让自己成为CA中心,这个配置大概在172行
# vim /etc/pki/tls/openssl.cnf
basicConstraints=CA:TRUE
# /etc/pki/tls/misc/CA -newca
配置一个新的CA中心,命令执行后会有一个交互,交互过程中输入国家(C)、省名(ST)、城市名、组织名(O)、团队名(OU)、common name(一般为域名,CN)、邮箱(emailAddress),文件名直接回车就好,保护私钥密码可不输,直接回车。交互后的信息可以在/etc/pki/CA/index.txt中查看,此信息可以用在申请证书申请文件上,使填写的信息除了common name之外,与CA证书的自签名信息一致,防止中途填错信息导致证书申请文件生成错误。
生成的CA根证书
# ls /etc/pki/CA/cacert.pem
生成的CA私钥
# ls /etc/pki/CA/private/cakey.pem
证书和密钥
在所有节点和客户端(此处以node1为例)
生成node1的RSA私钥
# openssl genrsa -out /etc/ssl/glusterfs.key 2048
#注意,密钥文件名字必须叫glusterfs.key
创建证书申请文件
# openssl req -new -sha256 -key /etc/ssl/glusterfs.key \
-out /etc/ssl/node1.csr \
-subj '/C=CN/ST=GD/O=togogo/OU=rhca/CN=client/emailAddress=admin@togogo.com'
将申请文件传到CA中心:
# scp /etc/ssl/node1.csr root@desktop:/root
到CA中心
将申请文件传到CA中心,生成被CA签名过的证书:
# openssl ca -keyfile /etc/pki/CA/private/cakey.pem \
-cert /etc/pki/CA/cacert.pem \
-in /root/node1.csr \
-out /root/pem/node1.pem
注意,如果想为某一个主机重新生成证书,COMMON NAME一样,默认是不允许的,除非:
# vim /etc/pki/tls/openssl.cnf
unique_subject = no
或是在此文件删除对应条目:
# vim /etc/pki/CA/index.txt
否则会出现如下报错
Sign the certificate? [y/n]:y
failed to update database
TXT_DB error number 2
unable to write 'random state'
造成原因如下:
This thing happens when certificates share common data. You cannot have two
certificates that look otherwise the same.
1. 修改demoCA下 index.txt.attr
将
unique_subject = yes
改完
unique_subject = no
2. 删除index.txt,然后重新创建一个同名空白文件
# rm index.txt
# touch index.txt
将签过名的证书传给server和client
# scp /etc/pki/CA/newcerts/[签过名的私钥证书].pem root@node1:/etc/ssl/glusterfs.pem
(这个其实是 -out 制定路径的证书)
目录下应该有两个.pem文件,一个是刚生成的证书,一个CA自签名的证书,可以cat看一下内容确认,(OpenSSL Generated Certificate)自签名证书需要进行下面的操作:
注意:证书名称必须叫glusterfs.pem
将CA中心的自签名证书传给server和client,一般为/etc/pki/CA/index.txt的第一条:
# scp /etc/pki/CA/newcerts/[CA中心的自签名证书].pem root@node1:/etc/ssl/glusterfs.ca
(其实就是一开始时,CA中心生成在 /etc/pki/CA/cacert.pem 的证书)
注意:证书名称必须叫glusterfs.ca
注:需要为所有节点创建证书,包括客户端,因为服务端也要验证客户端
配置加密
配置加密分为配置管理加密和配置I/O加密:
配置管理加密
在所有节点
# touch /var/lib/glusterd/secure-access
创建这个文件,表示启用服务器之间,及客户端和服务器之间使用加密,需要在所有节点和客户端都有
# systemctl restart glusterd
注意,以上步骤要在所有节点完成
配置I/O加密
先停止volume
# gluster volume stop vol1
设置vol1这个volume允许其它server和客户端,通过ssl验证
# gluster volume set vol1 auth.ssl-allow 'node1,node2,node3,node4,desktop'
注意,后面要写证书里面的common name
设置存储卷开启加密
# gluster volume set vol1 client.ssl on
# gluster volume set vol1 server.ssl on
启动卷:
# gluster volume start vol1
配置使用DH算法,实现对称密钥的交换
# openssl dhparam -out /etc/ssl/dhparam.pem 2048
在所有server节点执行,文档没这步,如果不做,后面客户端可能挂载不上,如果挂载不上,可查看日志:tail /var/log/glusterfs/mnt-vol1.log
配置客户端
设置开启管理加密:
# touch /var/lib/glusterd/secure-access
拷贝CA证书及加密私有证书到客户端:
# scp /etc/pki/CA/newcerts/***.pem root@desktop:/etc/ssl/glusterfs.ca
# scp /etc/pki/CA/newcerts/***.pem root@desktop:/etc/ssl/glusterfs.pem
配置DH算法:
# openssl dhparam -out /etc/ssl/dhparam.pem 2048
挂在卷测试:
# mount -t glusterfs node1:/vol1 /mnt/vol1
总结
以上就是【金鱼哥】对Gluster数据传输加密的分享 。希望能对看到此文章的小伙伴有所帮助。
如果这篇【文章】有帮助到你,希望可以给【金鱼哥】点个赞👍,创作不易,相比官方的陈述,我更喜欢用【通俗易懂】的文笔去讲解每一个知识点,如果有对【运维技术】感兴趣,也欢迎关注❤️❤️❤️ 【金鱼哥】❤️❤️❤️,我将会给你带来巨大的【收获与惊喜】💕💕!