CloudStack密碼加密和解密

一、關於加密和解密
CloudStack存儲一些敏感密碼和密鑰用於提供安全保障。這些值被自動加密。

  • 數據庫密鑰(該密鑰不是數據庫用戶密碼,而是在使用cloudstack-setup-databases初始化數據庫時,如果加了-m 選項,對db.properties文件中關鍵參數進行加密。默認爲“password”,可在/etc/cloudstack/management/key文件中查看)

  • 數據庫密碼

  • SSH密鑰

  • 計算節點root密碼

  • ***密碼

  • 用戶API密鑰

  • VNC密碼

CloudStack使用簡單的java加密庫(JASYPT)。使用數據庫密鑰加密和解密數據值,隨着數據庫密碼一起存儲在CloudStack內部屬性文件中。 上面列出的其他加密值, 例如 SSH 密鑰, 也被記錄在CloudStack數據庫中。
當然,數據庫密鑰本身不可以公開存儲-必須被加密存儲。那麼,CloudStack如何閱讀它呢?從外部源啓動管理服務器期間必須提供另一個密鑰。有2種方法提供該密鑰:從文件加載或者由CloudStack的管理員提供。CloudStack數據庫中有個配置項,將會告知使用了哪種方法。如果加密類型設置爲 “file,” 密鑰必須存在於位置已知的文件中。如果加密類型設置爲 “web,” 管理員則會運行

com.cloud.utils.crypt.EncryptionSecretKeySender

工具,關鍵在於連接至管理服務器中一個已知的端口。

在CloudStack初始化的過程中設置加密類型,數據庫密鑰和管理服務器密鑰。這些都是CloudStack數據庫設置腳本的參數(cloud-setup-databases)。默認值是file,password和password。當然,強烈建議你修改這些密鑰值。
好了,更多信息查看CloudStack官方文檔。
直接上乾貨。

二、解密虛擬機VNC密碼
新版本CS中默認啓用虛擬機的VNC密碼,保證安全性。但,CPVM的性能,呵呵。
所以當不想通過CPVM時,需要解密VNC密碼才能連接直接通過vnc工具連接。
以KVM爲例:
(其實有兩個簡單的方式可以讓你快速得到VNC密碼:1、在kvm主機中通過 "virsh edit 虛擬機名稱",進去編輯狀態,可以查看到明文的VNC密碼。2、通過virt-manager打開某個虛擬機,先在details裏面種手動將VNC密碼修改,然後再使用更改後的密碼登錄;第二個方法慎用,可能會造成CS頁面中Console功能異常,不過虛擬機關機,再開機後密碼會重新生成,console恢復正常。)。
1.在CloudStack UI中查找該虛擬機的內部名稱。例如:i-2-15-VM
2.在CloudStack數據庫中查找該虛擬機加密後的vnc密碼

mysql> select vnc_password from cloud.vm_instance where instance_name = 'i-2-15-VM' or name = 'InstanceName';
+----------------------------------------------+
| vnc_password                                 |
+----------------------------------------------+
| mmwJnTulUgSWyd/NdiXAkRtI+y+33h5dbuk4+OGpkck= |
+----------------------------------------------+
1 row in set (0.00 sec)


3.使用jasypt庫解密
jasypt庫路徑爲:

[root@localhost ~]# /usr/share/cloudstack-common/lib/jasypt-1.9.0.jar

使用如下命令解密:

[root@localhost ~]# java -cp /usr/share/cloudstack-common/lib/jasypt-1.9.0.jar 
org.jasypt.intf.cli.JasyptPBEStringDecryptionCLI input="上步驟中得到的vnc密碼" 
password="數據庫密鑰(參見前面解釋)"

例如:

[root@localhost ~]# java -cp 
/usr/share/cloudstack-common/lib/jasypt-1.9.0.jar 
org.jasypt.intf.cli.JasyptPBEStringDecryptionCLI 
input="mmwJnTulUgSWyd/NdiXAkRtI+y+33h5dbuk4+OGpkck=" password="password"
----ENVIRONMENT-----------------
Runtime: Sun Microsystems Inc. OpenJDK 64-Bit Server VM 20.0-b12 
----ARGUMENTS-------------------
input: mmwJnTulUgSWyd/NdiXAkRtI+y+33h5dbuk4+OGpkck=
password: password
----OUTPUT----------------------
f7d7ae4bac54cfa2


其中,OUTPUT即爲解密後的vnc密碼,使用該密碼連接VNC控制檯。


三、解密計算節點root密碼
還是以kvm爲例,該密碼爲添加主機時使用的root密碼。
1.在數據庫host_details表中查出加密後的主機密碼字段

mysql> select * from cloud.host_details where name="password";
+----+---------+----------+----------------------------------+
| id | host_id | name     | value                            |
+----+---------+----------+----------------------------------+
| 10 |       1 | password | jQ5GklnC7FEShUJUo0uZs4p9LYclP8ng |
| 20 |       4 | password | f8qWuceOf6AzeN+AJ82OYQN7mSqiqYPU |
| 30 |       5 | password | 6icHGY6p5O+fq+hrJ/CRv9u+SaVPvvmj |
| 40 |       6 | password | OcU/tzEcZXzKhjaxQA8n48usagBXCpPm |
+----+---------+----------+----------------------------------+
4 rows in set (0.00 sec)


2.複製value值,進行解密

[root@localhost ~]# java -cp /usr/share/cloudstack-common/lib/jasypt-1.9.0.jar 
org.jasypt.intf.cli.JasyptPBEStringDecryptionCLI 
input="jQ5GklnC7FEShUJUo0uZs4p9LYclP8ng" password="password"
[root@localhost ~]# java -cp
 /usr/share/cloudstack-common/lib/jasypt-1.9.0.jar 
org.jasypt.intf.cli.JasyptPBEStringDecryptionCLI 
input="f8qWuceOf6AzeN+AJ82OYQN7mSqiqYPU" password="password"
[root@localhost ~]# java -cp
 /usr/share/cloudstack-common/lib/jasypt-1.9.0.jar 
org.jasypt.intf.cli.JasyptPBEStringDecryptionCLI 
input="6icHGY6p5O+fq+hrJ/CRv9u+SaVPvvmj" password="password"
[root@localhost ~]# java -cp
 /usr/share/cloudstack-common/lib/jasypt-1.9.0.jar 
org.jasypt.intf.cli.JasyptPBEStringDecryptionCLI 
input="OcU/tzEcZXzKhjaxQA8n48usagBXCpPm" password="password"


其中,OUTPUT即爲解密後的密碼。

其他類型密碼解密不再演示,自行測試。



2015-01-29日更新:部分說明

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章