openstack中安全方面基础知识介绍及keystone的PKI

背景:

        做为公有云平台,安全性是一个非常需要考虑的因素,谈到安全首先就会想到加密解密,这里通过对openstack的keystone学习来对安全方面涉及到的基本概念进行讲解。

加密技术:

       说到加密简单来讲就是通过一种手段,发送方将数据A经过一个方法生成密文B,然后当接收方拿到密文B后通过一定方法可以重新获取数据A。而只要保证这个方法不被人知道,即使对方拿到密文B,也无法获取到信息。这里的方法其实就是常说的加密算法。常见的加密算法有对称加密算法和非对称加密算法。

对称加密

        常见的对称加密算法有DES、IDEA、RC2、RC4、SKIPJACK、RC5、AES等。他的思想就是通过秘钥K和算法,发送方将数据A转换成密文B(加密),然后接收方得到密文B后,通过秘钥K和算法逆向的解出数据A(解密)。这一算法最重要的就是双方协商好秘钥,以及算法,这样就可以在一个安全的环境下来进行传输。

非对称加密

       常见的费对称加密算法有RSAElgamal、背包算法、Rabin、D-H、ECC等。他的思想就是首先需要得到一对秘钥K-private和K-public。其中K-private就是私钥,K-public就是公钥。通过K-private加密的数据,只有拥有K-public的接收方才能获得,同样通过 K-public加密的数据,也只有拥有 K-private的接收方才能获得。

加密算法的应用

对称加密算法是最常用来做数据的加解密,因为相对非对称加密算法,对称加密算法拥有着更快的加解密速度。这在应用中是非常重要的。那么非对称加密算法又用在什么地方呢。这里就要讲一下非对称加密算法的2个应用方式。对称加密算法中必须要双方都协商出一个加密算法,以及拿到一个相同的秘钥,这样双方的通信才是安全的。那么在通信开始的时候,双方并没有一个共同的秘钥,这样此时的通信就只能通过明文进行。非对称加密算法就提供了这样一个秘钥协商的办法。
1.发送方向接受方询问,要求接受方提供一个公钥K-public
2.发送方通过K-public加密一段信息(即对称加密算法中的秘钥K)发送给接受方
3.接受方得到了K-public加密的信息,通过自己的K-private解出了秘钥K,此时双方都获取到了以后需要进行加密的秘钥,然后可以开始正常进行安全的通信。
在这一过程中可以看到K-public是可以由任何人获取到的。但是只有拥有K-private的接收方才可以解出正确的信息,所以这一方法用来秘钥协商非常的合适。上面的过程其实就是我们日常访问https的网站所进行的流程的一个简化版。
当然,非对称加密算法还可以用来解决身份认证的问题,这一技术也叫做数字签名。比如我们写借条时,签署上我们的名字,这样就无法抵赖了。在信息传输中一些非常重要的信息也是需要能够确认这一信息的确是由某个人发送的。
1.当发送方P使用K-private加密一段信息发送给接收方Q。
2.接收方Q可以通过K-public进行解密,如果校验无误,可以证明这一个信息必然是由P发送出来的。
这技术在需要进行身份认证的场合尤其重要。

秘钥管理:

在网络通信中有这很多很多的秘钥,这些秘钥是否合法,以及有效期限等都需要进行有效的管理。PKI就是这样的一种技术规范。
在PKI体系中最重要的组成就是CA(认证中心),CA是一个具有公信力的第三方,经过它认证过的秘钥,大家都认为是可信的。CA本身就是使用数字签名技术来对秘钥进行认证,保证秘钥的合法性和传输过程中不被篡改。比如我需要做一个网站,首先我就需要生成自己的秘钥对,K-public和K-private。我拿着K-public去CA进行签名,CA就通过它的私钥对K-public进行签名就变成了证书。这样以后通信时,用户拿着我的证书进行校验,发现是经过CA认证的,就可以确定我是一个合法网站,然后就会用我证书里面提供的K-public来和我进行秘钥协商,然后通信。我们的浏览器中预安装了一些CA的公钥,这样经过这些CA认证的网站就可以被认为是安全的。
当然PKI中还包含了秘钥的备份恢复,秘钥的更新,黑名单的发布和管理等等,这都是一个庞大的体系,来保证我们的秘钥的合法与安全。

keystone的授权认证

         keystone是openstack中用来进行授权认证的,它使用了2种方式,在配置文件中可以更改。一种是UUID,一种是PKI方式。

UUID方式

        这个方式比较简单,当用户拿着有效的用户名和密码去keystone认证后,keystone就会返回给他一个token,这个token就是一个uuid。以后用户进行其他操作时,都必须出示这个token。例如当nova接到一个请求后,就会用这个token去向keystone进行请求,keystone通过比对token,以及检查token的有效期,来判断token是否合法,然后返回给nova这一个请求是否合法。可以看到,这一方式十分简单,但是在大量业务场景下,keystone将会成为性能瓶颈。

PKI方式

       keystone中模拟了一个简单的PKI管理,在keystone初始化时,keystone生成了CA的公钥CA.pem和私钥CA.key。同时,产生了keystone自己的公钥keystone.pub和keystone.key,然后将keystone.pub进行了CA的签名,生成了keystone.pem。当用户拿着有效的用户名和密码去keystone认证后,keystone就将用户的基本信息通过keystone.key进行了加密,将这一密文作为token返回给用户。当用户发出一个请求,例如nova拿到token后,首先需要拿到keystone的证书keystone.pem(这一过程只需要进行一次),然后通过keystone.pem来进行解密,获得用户的信息,就可以知道该用户是否合法。
      对于用户的token还需要对token的合法时间,以及token还是否存在进行判断。所以当nova每一次拿到token后还会先向keystone询问一次token的失效列表,来查看token是否失效。当然这一过程对于keystone的负载还是相当轻的,所以PKI还是有效的解决了keystone成为性能瓶颈的问题。

参考资料

http://www.mirantis.com/blog/understanding-openstack-authentication-keystone-pki/















你可能感兴趣的:(openstack)