讀古今文學網 > OpenStack系統架構設計實戰 > 11.2.4 簽名證書生成 >

11.2.4 簽名證書生成

Keystone的簽名證書是建立在PKI基礎之上的。在介紹Keystone之前,先介紹數據加密和PKI的基本概念。

1)權威認證機構(Certification Authoity):簡稱CA,是PKI的核心組成部分,稱作認證中心。它是數字證書的簽發機構。CA是PKI應用中權威的、可信任的、公正的第三方機構。

2)CA私鑰:非對稱加密算法中的密鑰分為公鑰和私鑰,公鑰可對外暴露,私鑰則須對外保密。簡單來說,私鑰可以用來簽名和解密,公鑰則用來解籤與加密。

3)CA公鑰證書:CA公鑰證書中包含了CA的公鑰信息,可以用CA公鑰證書對CA頒發的證書進行簽名驗證,以確認CA機構頒發證書的合法性。

4)簽名私鑰:用戶自己負責保存私鑰,簽名私鑰不能洩露,可以用來對傳輸數據進行簽名以保證數據的合法性。

5)簽名公鑰證書:由CA機構頒發,簽名證書上有CA的簽名,以表明該簽名證書的合法性。同時證書中保存的公鑰(公鑰與簽名私鑰為非對稱密鑰對)可以用來對數據進行解籤。

圖11-3說明如何用公、私鑰與數字簽名保證數據的完整性和不可抵賴性。A的公鑰就是來源於CA頒發的簽名公鑰證書,Bob可以和CA中心交互,CA中心利用CA的公鑰進行簽名驗證確認證書的合法性,Bob再用得到CA確認的、合法的A的公鑰來驗證Alice的簽名,這樣就可以保證數據的安全。

在Keystone的F版本之前,生成令牌ID的方法只有UUID一種方式。生成的令牌保存在Keystone的後台數據庫中,同時通過網絡傳給客戶端,客戶端有了令牌ID之後,會包含這一信息。Keystone在拿到這些信息之後,將會提取令牌ID和後台數據庫中的值進行比較,以驗證請求的合法性。

這樣的方式會存在並發的問題,如果有大量的用戶並發對Keystone請求,Ketstone將會成為一個性能瓶頸。而且,用戶通過Keystone的初始認證後,在訪問相關的服務時,會附加上Keystone返回給用戶的令牌,這些服務需要同Keystone交互驗證這個令牌的合法性,這樣會加重Keystone的性能負擔。

Keystone在F版本後引入了PKI機制,可以有效地解決Keystone交互頻繁造成的性能瓶頸的問題,同時也提高了安全性。Keystone利用PKI生成簽名證書的流程如下:

圖11-3 公鑰、私鑰與數字簽名的原理

1)客戶端發送用戶名密碼信息到Keystone進行驗證。Keystone校驗用戶名密碼以及可訪問資源等信息為合法之後,Keystone充當CA角色,用CA簽名私鑰對令牌元數據(元數據具體為該令牌頒發給的用戶、用戶所在的租戶信息、用戶在該租戶下的用戶角色,以及該令牌可訪問的服務目錄等信息)進行簽名,以生成簽名後的令牌。

2)令牌通過網絡發送到客戶端,客戶端收到令牌後緩存在客戶端本地。

3)各服務向Keystone認證時,Keystone向每個服務端點發送CA的公鑰證書和用戶簽名後的令牌對應的簽名公鑰證書。

4)客戶端發送API請求到服務端點的同時附加上令牌信息。服務端點提取令牌信息,服務端點用本地存放的用戶的簽名公鑰證書進行驗簽,確認用戶的合法性與訪問權限。

5)服務端點處理合法的請求,拒絕未通過驗證的請求。

引入PKI對用戶的令牌進行簽名後,只要合法用戶不洩露Keystone頒發給自己的私鑰,其他用戶將無法盜用或冒充這個合法用戶,否則非法用戶無法通過Keystone或者服務端點的簽名簽證。這極大地提升了Openstack用戶的安全性。

而且,通過在服務端點本地存放CA的公鑰證書和用戶的簽名公鑰證書,可以實現本地對Token合法性的驗證,不用和Keystone交互,大大減輕了Keystone的負擔,使其避免成為系統瓶頸。