应用私钥加密的密文只可以用公钥解密,所以 OpenStack 须求用户访问其 API

1.用户输入用户名密码,发送给keystone。

2.Keystone验证用户名密码,并且生成token(UUID),发送给客户端。

(3)Fernet认证原理:

其中,‘token_data’是赢得的user、role、endpoint、catlog等音信集合,而最重视的言语是cms使用签名生成token的经过:cms_sign_token,使用默许的sha256措施加密,处理进度使用process,进行数量的读取、处理, 

3.客户端缓存UUID token

 

公开密钥加密,也称之为非对称加密(asymmetric
cryptography,加密密钥和平化解密密钥不等同),在那种密码学方法中,必要部分密钥,分别为公钥(Public
Key)和私钥(Private
Key),公钥是堂而皇之的,私钥是非公开的,需用户稳当保管。假使把加密和平消除密的流程当做函数
C(x) 和 D(x),P 和 S 分别代表公钥和私钥,对明文 A 和密文 B
而言,数学的角度上有以下公式:

             
                   ‘-outform’, ‘PEM’,

4.客户端发送具体的推行请求给openstack
API

上述代码申明,token 包括了
user_id,project_id,domain_id,methods,expires_at
等信息,重要的是,它从未 service_catalog,所以 region
的数码并不影响它的轻重缓急。self.pack()
最后调用如下代码对上述新闻加密:

 

A = D(B,
P)

           
token_json = jsonutils.dumps(token_data,
cls=utils.PKIEncoder)

             
                                CONF.signing.keyfile))  
#DEFAULT_TOKEN_DIGEST_ALGORITHM=sha256

staged key
相较于secondary key,它更有机遇成为primary key。

             
                   ‘-nocerts’, ‘-noattr’, 

             
                   ‘-md’, message_digest, ],

             
                                CONF.signing.certfile,

(2)PKI认证原理:

           
token_json = jsonutils.dumps(token_data,
cls=utils.PKIEncoder)

那么上述0
表示的是staged key,1 代表的是primary key,

公开密钥加密,也称为非对称加密(asymmetric
cryptography,加密密钥和平化解密密钥不平等),在那种密码学方法中,必要一些密钥,分别为公钥(Public
Key)和私钥(Private
Key),公钥是芸芸众生的,私钥是非公开的,需用户安妥保管。固然把加密和解密的流水生产线当做函数
C(x) 和 D(x),P 和 S 分别代表公钥和私钥,对明文 A 和密文 B
而言,数学的角度上有以下公式:

             
                                CONF.signing.certfile,

secondary
key(次次密钥)有x-1个,从Primary退役下来的,用于解密当初它加密过的token

说到底output,
err = process.communicate(data)
生成Token-id,这几个进度涉及到openssl相关的加密技术。

对此用户的token,还需实行token的官方时间,以及token依然否存在进展判定。所以当nova每趟得到token后还需向keystone询问二遍token的曲折列表,检查token是或不是失效。这一历程对于keystone的负荷照旧非凡轻的,所以PKI依然实惠消除了keystone质量瓶颈的标题。

图片 1

3.客户端缓存token(UUID)

其中,‘token_data’是获得的user、role、endpoint、catlog等消息集合,而最首要的话语是cms使用签名生成token的长河:cms_sign_token,使用暗许的sha256方法加密,处理进度使用process,进行多少的读取、处理, 

def _get_token_id(self, token_data):
   return uuid.uuid4().hex

 

           
token_id = str(cms.cms_sign_token(token_json,

计算:OpenStack服务中的每2个API Endpoint都有一份keystone签发的申明,失效列表和根证书。API不用在直接去keystone认证token是还是不是合法,只供给遵照keystone的证书和失灵列表就能够规定token是不是合法。不过此间依旧会有每便都亟待请求keystone去取得失效列表的操作,不可防止。

浮动的样例:144d8a99a42447379ac37f78bf0ef608

UUID格局源码分析:

5、OpenStack
API向 keystone请求token认证

 

 图片 2

fernet的数量质量最佳,原因是它不供给后端持久化操作(采取 Key
Rotation
期限 更换密钥,只要Keystone具有访问这么些key的权杖,更新后的token就不需求在keystone数据库中存款和储蓄,缓解了数据库负载压力),并且token的印证,使用的是密钥进行解密,能够直接得出token
Data的新闻,从而进行token的逾期认证。它的失败原因,只只怕是token过期了,大概是token放到了cache缓存中,不过曾经被回收了。追根究底,依然token过期了。

 图片 3

             
                   ‘-nosmimecap’, ‘-nodetach’,

小结:OpenStack服务中的每1个API Endpoint都有一份keystone签发的证书,失效列表和根证书。API不用在一贯去keystone认证token是不是合法,只需求基于keystone的证件和失灵列表就足以分明token是还是不是合法。不过此地还是会有每一趟都急需请求keystone去获取失效列表的操作,不可幸免。

         
 process = subprocess.Popen([‘openssl’, ‘cms’, ‘-sign’,

只要Keystone具有访问那么些key的权位,token就不供给在keystone数据库中储存

primary
key(主密钥)有且唯有1个,名为为x,当前用来加密解密token

 

 图片 4

图片 5

A = D(B,
P)

(3)Fernet认证原理:

staged
key(次密钥)有且唯有1个,命名为0,准备下3个rotation时变成Primary
key,可以解密token

 

             
                  stdout=subprocess.PIPE,

 图片 6

当集群运维较长一段时间后,访问其 API
会变得奇慢无比,究其原因在于 Keystone 数据库存款和储蓄了大气的 token
导致品质太差,消除的不二法门是常常清理
token。为了幸免上述难点,社区建议了Fernet
token
,fernet
是近日主流推荐的token格式,它使用 cryptography 对称加密库(symmetric
cryptography,加密密钥和平化解密密钥相同) 加密 token,具体由 AES-CBC
加密和散列函数 SHA256 签名。Fernet 是专为
API token 设计的一种轻量级安全音信格式,不要求仓库储存于数据库,减弱了磁盘的
IO,带来了迟早的性格提高。为了升高安全性,需求运用 Key
Rotation
 更换密钥。

8.Token失效,拒绝客户端请求,重返401。

    def
_get_token_id(self, token_data):

开首的讲,token
是用户的一种凭证,需拿正确的用户名/密码向 Keystone
申请才能获取。倘若用户每回都应用用户名/密码访问 OpenStack
API,简单败露风声用户音信,带来安全隐患。所以 OpenStack 要求用户访问其 API
前,必须先取得 token,然后用 token 作为用户凭据访问 OpenStack
API。 

图片 7

             
                  stdin=subprocess.PIPE,

 

 

             
                   ‘-signer’, signing_cert_file_name,

2.Keystone验证用户名密码,并且生成token(UUID),发送给客户端。

只要Keystone具有访问这个key的权杖,token就不需求在keystone数据库中储存

当用户必要举办操作时(比如访问nova成立虚拟机),用户拿着有效的用户名/密码先去keystone认证,keystone再次来到给用户2个token(即UUID)。之后用户展开其余操作(如访问nova),先出示那一个token给nova-api,nova收到请求后,就用这些token去向keystone进行呼吁验证。keystone通过比对token,以及检查token的有效期,判断token的管用,最终回来给nova结果。

keystone认证格局:UUID、PKI、Fernet;

fernet的数额品质最棒,原因是它不供给后端持久化操作(选取 Key
Rotation
定期 更换密钥,只要Keystone具有访问那么些key的权位,更新后的token就不供给在keystone数据库中储存,缓解了数据库负载压力),并且token的辨证,使用的是密钥实行解密,能够直接得出token
Data的新闻,从而实行token的超时认证。它的破产原因,只大概是token过期了,大概是token放到了cache缓存中,但是曾经被回收了。追根究底,照旧token过期了。

             
                   ‘-nocerts’, ‘-noattr’, 

             
                  stderr=subprocess.PIPE,

(1)UUID认证原理:

当用户拿着用户名/密码去keystone认证后,keystone将用户的中坚音讯经过keystone.key进行加密,并将密文作为token返还给用户。当用户拿着token发送请求时(例如访问nova),nova获得用户token时,通过事先获得keystone的证件keystone.pem(这一历程只须求实行3遍)举行解密,获取用户音讯。

4.客户端发送具体的推行请求(nova boot)和UUID给keystone。

当集群运转较长一段时间后,访问其 API
会变得奇慢无比,究其原因在于 Keystone 数据仓库储存储了大气的 token
导致品质太差,化解的不二法门是隔三差五清理
token。为了幸免上述难题,社区提议了Fernet
token
,fernet
是时下主流推荐的token格式,它选择 cryptography 对称加密库(symmetric
cryptography,加密密钥和解密密钥相同) 加密 token,具体由 AES-CBC
加密和散列函数 SHA256 签名。Fernet 是专为
API token 设计的一种轻量级安全消息格式,不须求仓库储存于数据库,缩小了磁盘的
IO,带来了迟早的属性进步。为了进步安全性,要求使用 Key
Rotation
 更换密钥。

secondary
key(次次密钥)有x-二个,从Primary退役下来的,用于解密当初它加密过的token

在keystone伊始化时,keystone生成了CA的公钥CA.pem和私钥CA.key,同时keystone发生了温馨的公钥keystone.pub和私钥keystone.key,然后将keystone.pub进行CA的签署,生成keystone.pem。

简短叙述一下fernet采取 Key
Rotation
 更换密钥的法则,暗中认可的更替长度是3,当以keystone-manage
fernet-setup生成密钥时,会看到0、1三个目录表征,那分别是何许看头吧?

staged
key(次密钥)有且唯有三个,命名为0,准备下二个rotation时改为Primary
key,能够解密token

 图片 8

7.Token失效,拒绝客户端请求,重回401。

primary
key绝比较其余三种key,它的目录最高,并且能够加密、也能够解密;

那么上述0
表示的是staged key,1 代表的是primary key,

 图片 9

             
                   ‘-nosmimecap’, ‘-nodetach’,

5.Keystone从http请求中收获token,并检讨token是还是不是可行

6.Token管用,处理请求,并重回客户端请求结果

             
                   ‘-outform’, ‘PEM’,

4.客户端发送具体的施行请求(nova boot)和UUID给keystone。

 该token
的深浅相似在 200 多 Byte 左右,样例:

归纳叙述一下fernet接纳 Key
Rotation
 更换密钥的原理,暗许的轮换长度是3,当以keystone-manage
fernet-setup生成密钥时,会看到0、1八个目录表征,那分别是怎么意思吧?

PKI的流程,首先要求利用 keystone-manage
pki_setup命令生成CA及有关的令牌机制,其代码如下所示:

B = C(A,
S)

             
                  stderr=subprocess.PIPE,

primary
key相比较其它二种key,它的目录最高,并且能够加密、也足以解密;

转移的样例:144d8a99a42447379ac37f78bf0ef608

数字签名又称之为公钥数字签名,首先选拔 Hash
函数对新闻生成摘要,摘要经私钥加密后称为数字签名。接收方用公钥解密该数字签名,并与吸收消息生成的摘要做相比较,倘诺双方一致,便得以肯定该消息的完整性和真实性。

1.user在客户端输入用户名密码,发送给keystone。

1.user在客户端输入用户名密码,发送给keystone。

在此,需求提一下多个概念:

 AES256加密token,SHA256
HMAC验证完整性,

       
try:

7.Token实惠,处理请求,并重回openstack
api请求结果

 AES256加密token,SHA256
HMAC验证完整性,

PKI的流水线,首先须求选拔 keystone-manage
pki_setup命令生成CA及连锁的令牌机制,其代码如下所示:

2.Keystone验证用户名密码,并且生成token(UUID),发送给客户端。

 

当用户拿着用户名/密码去keystone认证后,keystone将用户的为主音讯透过keystone.key举办加密,并将密文作为token返还给用户。当用户拿着token发送请求时(例如访问nova),nova拿到用户token时,通过事先得到keystone的证件keystone.pem(这一经过只供给实行一回)进行解密,获取用户音讯。

 

在keystone先河化时,keystone生成了CA的公钥CA.pem和私钥CA.key,同时keystone爆发了友好的公钥keystone.pub和私钥keystone.key,然后将keystone.pub实行CA的签订契约,生成keystone.pem。

         
 process = subprocess.Popen([‘openssl’, ‘cms’, ‘-sign’,

 

staged key
相较于secondary key,它更有机会变成primary key。

其间加密函数
C(x), 解密函数 D(x) 以及公钥 P
均是公然的。选用公钥加密的密文只好用私钥解密,选取私钥加密的密文只好用公钥解密。非对称加密普遍应用在平安世界,诸如常见的
HTTPS,SSH 登录等。

keystone认证格局:UUID、PKI、Fernet;

知识点复习:

5.Keystone从http请求中取得token,并检查token是不是有效

6.Keystone从http请求中赢得token,并检讨token是不是管用

    def
_get_token_id(self, token_data):

             
                   ‘-inkey’, signing_key_file_name,

UUID token
是长度固定为 32 Byte 的自由字符串,由 uuid.uuid4().hex
生成。

 

4.客户端发送具体的履行请求给openstack
API

2.Keystone验证用户名密码,并且生成token(UUID),发送给客户端。

       
try:

对此用户的token,还需举办token的官方时间,以及token依然否留存进展判定。所以当nova每1遍获得token后还需向keystone询问三回token的曲折列表,检查token是或不是失效。这一经过对于keystone的载荷依旧优良轻的,所以PKI还是实惠解决了keystone品质瓶颈的难题。

1.用户输入用户名密码,发送给keystone。

gAAAAABWfX8riU57aj0tkWdoIL6UdbViV-632pv0rw4zk9igCZXgC-sKwhVuVb-wyMVC9e5TFc
7uPfKwNlT6cnzLalb3Hj0K3bc1X9ZXhde9C2ghsSfVuudMhfR8rThNBnh55RzOB8YTyBnl9MoQ
XBO5UIFvC7wLTh_2klihb6hKuUqB6Sj3i_8

缺陷:每一回请求都要透过keystone实行求证,造成品质瓶颈。

CMS
token一般都当先1600个字节,样例:

 

 图片 10

 图片 11

 

(2)PKI认证原理:

             
                  close_fds=True)

知识点复习:

缺陷:每便请求都要因此keystone举办认证,造成质量瓶颈。

             
                  stdout=subprocess.PIPE,

           
token_id = str(cms.cms_sign_token(token_json,

图片 12

 

             
                   ‘-md’, message_digest, ],

如上代码注解,token 蕴含了
user_id,project_id,domain_id,methods,expires_at
等新闻,主要的是,它从不 service_catalog,所以 region
的多少并不影响它的高低。self.pack()
最后调用如下代码对上述音信加密:

 

数字签名又称为公钥数字签名,首先利用 Hash
函数对消息生成摘要,摘要经私钥加密后称为数字签名。接收方用公钥解密该数字签名,并与吸收接纳音讯生成的摘要做相比,假如两者一致,便足以肯定该音信的完整性和实事求是。

在此,供给提一下八个概念:

3.客户端缓存token(UUID)

CMS
token一般都当先1600个字节,样例:

             
                                CONF.signing.keyfile))  
#DEFAULT_TOKEN_DIGEST_ALGORITHM=sha256

gAAAAABWfX8riU57aj0tkWdoIL6UdbViV-632pv0rw4zk9igCZXgC-sKwhVuVb-wyMVC9e5TFc
7uPfKwNlT6cnzLalb3Hj0K3bc1X9ZXhde9C2ghsSfVuudMhfR8rThNBnh55RzOB8YTyBnl9MoQ
XBO5UIFvC7wLTh_2klihb6hKuUqB6Sj3i_8

UUID token
是长度固定为 32 Byte 的随机字符串,由 uuid.uuid4().hex
生成。

primary
key(主密钥)有且唯有1个,名为为x,当前用于加密解密token

6.Token有效,处理请求,并赶回客户端请求结果

 该token
的尺寸相似在 200 多 Byte 左右,样例:

 

             
                   ‘-signer’, signing_cert_file_name,

深切浅出的讲,token
是用户的一种凭证,需拿正确的用户名/密码向 Keystone
申请才能取得。假设用户每趟都采纳用户名/密码访问 OpenStack
API,不难败露风声用户音信,带来安全隐患。所以 OpenStack 须要用户访问其 API
前,必须先拿走 token,然后用 token 作为用户凭据访问 OpenStack
API。 

6.Keystone从http请求中拿走token,并检讨token是不是管用

             
                  stdin=subprocess.PIPE,

(1)UUID认证原理:

 图片 13

 

def _get_token_id(self, token_data):
   return uuid.uuid4().hex

终极output,
err = process.communicate(data)
生成Token-id,那么些进度涉及到openssl相关的加密技术。

7.Token失效,拒绝客户端请求,再次回到401。

             
                   ‘-inkey’, signing_key_file_name,

7.Token管用,处理请求,并再次回到openstack
api请求结果

3.客户端缓存UUID token

8.Token失效,拒绝客户端请求,重临401。

             
                  close_fds=True)

B = C(A,
S)

UUID方式源码分析:

5、OpenStack
API向 keystone请求token认证

 图片 14

当用户需求举办操作时(比如访问nova创立虚拟机),用户拿着有效的用户名/密码先去keystone认证,keystone重返给用户3个token(即UUID)。之后用户展开其余操作(如访问nova),先出示那一个token给nova-api,nova收到请求后,就用这一个token去向keystone实行呼吁验证。keystone通过比对token,以及检查token的有效期,判断token的可行,最后回来给nova结果。

当中加密函数
C(x), 解密函数 D(x) 以及公钥 P
均是当面的。选取公钥加密的密文只好用私钥解密,采纳私钥加密的密文只好用公钥解密。非对称加密科学普及使用在安整个世界,诸如常见的
HTTPS,SSH 登录等。

相关文章

网站地图xml地图