Cloudstack 更换console proxy服务证书以及dns服务

console proxy服务流程:

在cloudstack中,每个zone里面有一个console proxy vm,这个vm用于实现在web界面上登录所有的虚拟机的功能. 为了安全的考虑,这个web使用了https连接. 首先在web上打开远程终端的时候,会请求一个类似https://10-20-36-127.realhostip.com的页面,而realhostip.com这个dns服务器会按照对应规则,返回10.20.36.127的ip,这个ip就是console proxy vm的ip地址,后续的https请求,都会跟这个ip通信. 在这个流程中,cloudstack使用了realhostip.com的公用?dns解析服务.如果想把这个服务替换掉,我们有两步要做,第一步是建立自己的域名服务器,例如:realhostip.xxxx.com,第二步是为这个域名生成一个宽匹配的ssl证书.并更新cloudstack中使用的证书,这个证书主要应用在console proxy vm上的java web程序中.更新这个证书,cloudstack是提供一个web界面的,可是在3.0.2中,有一个bug导致这个过程不能完成,我们会采用一些步骤来绕过这个过程. 下面我们介绍这两个步骤:

建立自己的dns服务器:

  1. 创建自己的dns服务器,实现根据固定规则返回ip地址,代码地址:http://lisux.me/lishuai/?p=529,保存后启动python即可
  2. 修改上级域名的记录,让本域的ns记录指向新域名服务器的ip。
    realhostip.xxxx.com. NS realhostns.xxxx.com.
    realhostns.xxxx.com. A 63.8.173.24
  3. 等待ttl后测试:# dig 10-10-10-10.realhostip.xxxx.com +short 10.10.10.10
  4. 更换cloudstack中的域名服务,在全局设置(global setting)中,找到consoleproxy.url.domain选项,更改为:realhostip.xxxx.com,然后重启cloudstack服务.

创建证书并更换证书:

创建证书:

  1. 创建一张自签名的证书: # openssl req -new -x509 -days 3650 -nodes -out myser.crt -keyout myprivt.pem 其中的选项: Country Name (2 letter code) [XX]:CN State or Province Name (full name) []:shanghai Locality Name (eg, city) [Default City]:shanghai Organization Name (eg, company) [Default Company Ltd]:xxxx Organizational Unit Name (eg, section) []:xxxx Common Name (eg, your name or your server’s hostname) []:*.realhostip.xxxx.com Email Address []:shuai@xxxx.com注意为了创建宽匹配证书,Common Name前面有”*.”
  2. 按照cloudstack要求,两次更改私有key格式: # openssl pkcs8 -topk8 -in myprivt.pem -out yourprivate.pkcs8.encrypted.key 其中需要输入密码 # openssl pkcs8 -in yourprivate.pkcs8.encrypted.key -out yourprivate.pkcs8.key 需要输入刚才输入的密码 这样,我们就创建好一个证书文件:myser.crt,还有一个私有key:yourprivate.pkcs8.key

更换证书:

在cloudstack中Infrastructure界面可以看到updata ssl certificate按钮,点击这个就可以更换证书,遗憾的是在cloudstack3.0.2中,这个功能有一个bug,因为连接http发送的get url太长,导致操作不能完成,官方介绍在cloudstack4之后修复了这个bug,可惜我们没法更换版本解决这个问题,所以我们采用另一种方法,用ssh客户端转发cloudstack管理节点的端口到本地,然后连接本地的8080端口来操作,成功几率大幅提升哦~不保证100%,50%大概有~我已经涕泪交零了~看招:

  1. putty中创建新连接,并在Connection->SSH->Tunnels中添加Local转发端口,Source Port为8080,Destionation为:10.20.67.242:8080(cloudstack管理节点),然后点击Add,最后打开此连接登录机器.然后就可以通过访问本地的8080端口访问到10.20.67.242:8080了,我们打开浏览器http://127.0.0.1:8080/client/并登录管理界面
  2. 在Infrastructure界面点击updata ssl certificate按钮,在Certificate中粘贴myser.crt的内容,在PKCS#8 Private Key粘贴yourprivate.pkcs8.key的内容,在DNS Domain Suffix (i.e., xyz.com):中输入:realhostip.xxxx.com,提交,可能有一定失败几率.
  3. 重启cloudstack服务,在更新ssl后,会自动重启console proxy vm,重新打开远程控制台的时候需要认证自签名证书.
此条目发表在python, 虚拟化分类目录。将固定链接加入收藏夹。