更多使用技巧使用标准组件和协议的一个优点是它们可以非常简单地进行替换。例如,我们的开发大部分都采用了 Xvnc 服务器,还有一些方法可以取代上面方法中的 TightVNC。注意这些替代方法使用的命令行参数可能会稍有不同;不过,在所有情况中,原理都是相同的。几乎所有的 Linux 发行版都提供了根据发行版标准进行封装的 VNC 服务器,一些开源 VNC 项目甚至很容易从源代码进行安装。任何 VNC 服务器安装中最困难的部分是需要特定的默认字体。不过,即使在这种情况下,至少提供了明确的补救措施。
在浏览器中使用启用 SSL 的 VNC 查看器至少存在一点风险。它在所有主要浏览器中都可以使用,包括 Mozilla Firefox、Internet Explorer 和 Opera,不过所有浏览器都需要使用 Java runtime 1.4 或更高版本。当用户使用旧版本的 Microsoft Windows 操作系统时就会出现问题,旧系统仍然依赖于 Microsoft JVM 1.1。在这种情况下,VNC 查看器无法在 Internet Explorer 上运行,并发送报告表示找不到 VncViewer 类。惟一的解决方案是为 VNC 服务器提供一个非 SSL 的连接,并建议将 Java 升级到任何最新的 Java 运行时上。
默认情况下,大部分 VNC 服务器都 不 共享桌面;即任何连接都会关闭之前的连接。要进行协作、技术支持以及类似的应用,使用一个命令行参数 -alwaysshared 或类似方法来启动服务器,按照文档规范来执行。这样允许多个用户同时连接到同一个桌面上。
重点是什么?尽管您可能已经使用了 VNC、Web 服务、Java、SSL、浏览器等等,不过您可能从来没有将它们结合在一起使用。现在您究竟获得了什么呢?
证书和 SSL我们前面已经提到过,如果您正在使用 SSL,那么只需要重用证书就可以了,如果还没有使用 SSL,那只需要花费很少时间就可以开始使用它,严格来说并不如此。
从开发人员的观点来看,SSH 至少扮演了两个角色:
- 对 VNC 通信进行加密和认证,让您的远程桌面在充满敌意的 Internet 世界中可以具备基本的安全性。
- SSL 开放了对普通浏览器的使用能力。
如果浏览器无法找到信任的证书用于 SSL 通信,那么您(或者更严重,任何使用 Web 浏览器远程访问桌面的其他人)会看到 大量 的警告对话框 —— 甚至会多到不堪忍受。
在本文中,我们通过建议您使用已购买并使用的证书解决了这个问题。这个答案说大太大,说小也太小。例如,Sun 公司的 j2re 1.4 JVM 不仅要求由认证权威签名的证书,而且要求这个证书必须是来自高端 CA,包括 Verisign 和 Thawte。使用这种 JVM 的浏览器会将那些由不太出名的 CA 所签名的证书当作是自签名的证书对待。
另外一方面,本文强调了使用自签名的证书来实现通过 SSL 使用 VNC 是不可能的。如果您可以容忍不断弹出的浏览器警告,至少 可以 使用自己的证书做实验。
有关创建自签名证书的教程出人意料的多,它们都承诺将整个过程变得 “非常简单”。在某个层次上,它们所做的事情就是执行下面的命令行:
清单 4. 创建自签名的证书
openssl genrsa -des3 -out server.key 1024
openssl rsa -in server.key -out server.pem
openssl req -new -key server.key -out server.csr
openssl x509 -req -days 3560 -in server.csr \
-signkey server.key -out server.crt
cat server.pem server.crt > combined.pem
其中一些步骤要求该命令行具有交互作用。最关键问题是第 3 行中有关 “Common Name” 的;这个值要使用共享桌面所在主机的完全限定域名。通常,这个值就是 `hostname`。
如何获得证书是通过 SSL 使用 VNC 过程中最困难的部分;使用目前具备的证书,您应该可以非常简单地完成所有其他步骤。
实际上,您现在获得的东西非常多。首先,这是一个非常类似于 GUI 的 screen;也就是说,您可以在工作时启动 GUI 会话,并结合使用您具有的所有功能和性能,离开会话并通过任何一个具有 Java 功能的 Web 浏览器重新连接到相同的会话。这是一个功能非常强大的工具。
不过,您还获得了更多内容。VNC 对于电话会议来说非常方便。例如,我们使用它来为非技术用户建立一个复杂图形应用程序的展示。原则上来说,远程 X 服务器也可以执行相同的功能,但是 VNC 提供了很多优点:
- 安全性更具有可管理性。
- 与 X 相比,VNC 通常更容易通过防火墙。
- VNC 查看器比 X 服务器更容易安装 —— 尤其是那些免于安装的基于浏览器的查看器。
- 很容易通过 VNC 为多个查看器提供一个桌面。
- VNC 通常较少受到网络延迟的影响。
- X 认证(和 ssh 隧道)通常都是基于 /etc/passwd 级的帐号的,而基于 Web 的访问使用的则是 HTTP(S) 认证。创建并维护这种帐号需要很多经验,即使对于临时使用(例如电话会议演示)也是如此。
- 与 X 服务器相比,VNC 查看器需要更少的内存和相关硬件。
- VNC 服务器通常为只读访问提供了非常有用的配置。
另外使用该技术的例子的一个关键点是最繁重的加密计算负载是由 “本地” 代码非 Java 运行时来执行的。尽管假设网络延时是决定性能的第一个因素是非常安全的,但是加密和解密的代价太高,使得无法使用其他替代技术(除非使用具有极高性能的计算机)。通过 SSL 使用 VNC 的一个令人愉悦的优点是,在旧硬件甚至非常简单的硬件上使用标准软件就可以快速产生可以接受的响应能力。
您可能还有一些不同的需求和资源。您需要自己确定 VNC 与 Citrix、Windows Terminal services、 WebEx、Hamachi 以及其他 “远程” 解决方案所提供的商业软件相比到底如何。不过,我们已经看到通过 SSL 使用 VNC 已经解决了相当多的问题。
在后续文章中,我们将展示如何将 VNC 与其他虚拟化技术组合在一起实现功能强大的资源共享技术。不过在结束本文之前,有一点重要的问题需要提醒读者:VNC 存在非常严重的安全问题。由于 VNC 只使用一个会话密码进行保护,如果对标准 VNC 服务进行几个小时或几天的蛮力攻击,很可能就会破解。对 VNC 感兴趣的 “坏家伙们” 的数量正在迅速增加;请 确保 您对 VNC 使用了一个非常强壮的密码,至少有 8 个字母,最好是数字、字母和其他符号的组合。SSL 提供了很多保护机制,如果每次会话时间要持续几个小时,就应该考虑使用这些保护机制。在后续文章中我们将更详细地介绍安全性问题。
上面的方法利用了几个功能强大的开源示例,但是它本身几乎没有实现独创的编程。居然没有人编写文档来论述将这些组件组合起来,而这种组合非常的方便,这实在令人惊讶。有关 VNC、SSL 和其他内容的更详细介绍请参看 一节的内容。
结束语在下一篇文章中,我们将更详细介绍两个通过 SSL 使用 VNC 可以大展宏图的特定工作场所,以及如何在自己的环境中采用这种技术,包括如何与防火墙和代理协作使用。我们还将介绍使用 “本地” VNC 查看器与本文提到的承载浏览器的客户机协同工作何时能够成为一个优点。
这里要特别感谢 Matt Kennel,他和我们一样担心安全性问题,并对如何实际应用通过 SSL 使用 VNC 的技术与我们进行了讨论。 |