一、關於加密和解密
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日更新:部分說明