|
一、关于加密和解密
CloudStack存储一些敏感密码和密钥用于提供安全保障。这些值被自动加密。
- 数据库密钥
- 数据库密码
- SSH密钥
- 计算节点root密码
- VPN密码
- 用户API密钥
- VNC密码
CloudStack使用简单的java加密库(JASYPT)。使用数据库密钥加密和解密数据值,随着数据库密码一起存储在CloudStack内部属性文件中。 上面列出的其他加密值, 例如 SSH 密钥, 也被记录在CloudStack数据库中。
当然,数据库密钥本身不可以公开存储-必须被加密存储。那么,CloudStack如何阅读它呢?从外部源启动管理服务器期间必须提供另一个密钥。有2种方法提供该密钥:从文件加载或者由CloudStack的管理员提供。CloudStack数据库中有个配置项,将会告知使用了哪种方法。如果加密类型设置为 “file,” 密钥必须存在于位置已知的文件中。如果加密类型设置为 “web,” 管理员则会运行
1
| com.cloud.utils.crypt.EncryptionSecretKeySender
|
工具,关键在于连接至管理服务器中一个已知的端口。
在CloudStack初始化的过程中设置加密类型,数据库密钥和管理服务器密钥。这些都是CloudStack数据库设置脚本的参数(cloud-setup-databases)。默认值是file,password和password。当然,强烈建议你修改这些密钥值。
好了,更多信息查看CloudStack官方文档。
直接上干货。
二、解密虚拟机VNC密码
新版本CS中默认启用虚拟机的VNC密码,保证安全性。但,CPVM的性能,呵呵。
所以当不想通过CPVM时,需要解密VNC密码才能连接直接通过vnc工具连接。
以KVM为例:
(其实kvm虚拟机有另外一个办法可以修改vnc密码,就是使用virt-manager修改该虚拟机vnc端口,但不会永久生效)。
1.在CloudStack UI中查找该虚拟机的内部名称。例如:i-2-15-VM
2.在CloudStack数据库中查找该虚拟机加密后的vnc密码
1
2
3
4
5
6
7
| 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库路径为:
1
| [iyunv@localhost ~]# /usr/share/cloudstack-common/lib/jasypt-1.9.0.jar
|
使用如下命令解密:
1
2
3
| [iyunv@localhost ~]# java -cp /usr/share/cloudstack-common/lib/jasypt-1.9.0.jar
org.jasypt.intf.cli.JasyptPBEStringDecryptionCLI input="上步骤中得到的vnc密码"
password="数据库密钥"
|
例如:
1
2
3
4
5
6
7
8
9
10
11
| [iyunv@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表中查出加密后的主机密码字段
1
2
3
4
5
6
7
8
9
10
| 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值,进行解密
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| [iyunv@localhost ~]# java -cp /usr/share/cloudstack-common/lib/jasypt-1.9.0.jar
org.jasypt.intf.cli.JasyptPBEStringDecryptionCLI
input="jQ5GklnC7FEShUJUo0uZs4p9LYclP8ng" password="password"
[iyunv@localhost ~]# java -cp
/usr/share/cloudstack-common/lib/jasypt-1.9.0.jar
org.jasypt.intf.cli.JasyptPBEStringDecryptionCLI
input="f8qWuceOf6AzeN+AJ82OYQN7mSqiqYPU" password="password"
[iyunv@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"
[iyunv@localhost ~]# java -cp
/usr/share/cloudstack-common/lib/jasypt-1.9.0.jar
org.jasypt.intf.cli.JasyptPBEStringDecryptionCLI
input="OcU/tzEcZXzKhjaxQA8n48usagBXCpPm" password="password"
|
其中,OUTPUT即为解密后的密码。
其他类型密码解密不再演示,自行测试。
|
|