ChinaUnix.net 首页 | 博客 | Linux | 论坛 | 人才 | 培训 | 知识库 | 资料 | 读书 | 手册 | 精华 | 下载 | 沙龙 | 搜索
Linux首页 | Linux论坛 | 论坛精华 | 开源新闻 | 技术文章 | 专题专栏 | 新手指南 | 迁移方案 | 产品方案 | 开源项目 | 开源图书 | 软件下载 | 人才招聘 | Linux博客
  搜索

  产品与方案
·中科红旗全面打造现代化邮政体系
·红旗助力“网上审批服务” 推动电子政务
·红旗正版化开创呼和浩特网吧建设新起点
·红旗Linux助信息产业部邮件服务器“快跑”
·中标普华Linux 为电子政务信息化保驾护航
·中标普华Linux助力基金产业
·中标普华Office率先支持UOF标准
·中标普华邮件系统助力西藏政府信息化建设
·红旗Linux助力国库集中支付系统改革
·红旗助中信卫星 掀起GIS通信应用风暴
·红旗软件助力烟草总局 全面建设“数字烟草”
·红旗助力“信访阳光工程”打造畅通信访渠道
·红帽联合FIS发布下一代实时核心银行平台
·红旗助力金盾 打造全无忧出入境信息系统
·红旗Linux全力打造中国邮政总局名址信息库
·爱尔兰证交所从Unix迁移到红帽企业Linux
·一流的意大利银行选择使用红帽企业Linux
·PLUS Finanzservice选择使用红帽企业Linux
·红帽助力TransACT Communications 公司
·法国零售业巨头Lapeyre采用Redhat Linux
·旅游预订网站选择使用红帽企业Linux
·马哈拉施特拉邦政府的红帽解决之道
·美国联邦政府案例
·红帽为慕尼黑展览会提供现代化集群系统
·Yuba郡用开源软件和红帽产品提高了效率
·红帽企业Linux助印度理工建立高性能计算中心
·采用红帽Linux 将系统维护时间缩短了65%
·从UNIX迁移到Linux使Peñoles公司获益非浅
·Hikal公司用红帽企业Linux开展任务关键的ERP项目
·KDE3.5.4新版本发布
·芝加哥商业交易所从Unix向Linux迁移
·南方基金管理有限公司成功案例 Red Hat Linux
·广东北电通讯设备有限公司成功案例
·挪威国家石油公司从UNIX迁移到红帽Linux,成本减半
·中央电视台CCTV动画部案例 Red Hat Linux

  图书

鸟哥的Linux私房菜基础学..


Linux程序设计.第3版


Linux设备驱动开发详解


  下载
·Endian Firewall
·linux kernel(Linux 内核)
·CentOS
·Fedora Core 6
·Scientific Linux
·Slackware 11.0
·Gentoo Linux
·ubuntu-6.10-i386服务器版本
·ubuntu-6.10-amd64服务器版
·ubuntu-6.10-i386桌面版
·ubuntu-6.10-amd64桌面版
·Engarde Linux
您的位置: Linux时代 > 技术文档 > 网络通讯 >

使用SSL 保护VNC应用程序

日期:2007-03-09 作者:Kyler Laird 来自:linux.chinaunix.net


SSL 为使用 VNC 和标准 Web 浏览器对远程桌面进行方便、安全的访问提供了一种新颖的机制。

您希望使用比专有解决方案更方便并且具有比 ssh 更具安全性的方式来访问远程桌面吗?本文将介绍一种很好的方法,这是我们之前从未介绍过的一种技术。

这种想法是使用 SSL 为嵌入在 Web 页面中的一个简单 VNC 查看器提供安全性。这意味着实际上任何可以处理 Java 的 Web 浏览器都可以查看远程桌面,并与之进行交互;对于典型的情况来说这是一个功能十分强大的解决方案,包括电话协作、技术支持和供应。

计算机在这里,屏幕在那里

计算机在某个位置执行一个操作,在其他地方的人希望看到结果。符合这种描述的情况非常多,实现这种功能的方法也几乎同样多。有一种方法是将常规的单个桌面作为一个使用 HTTPS 协议进行保护的 Web URL 地址来发布,在与那些非软件专家的人一起工作时,这种方法特别方便。通过一个连接到远程桌面的超链接或仅在浏览器的地址栏输入 URL 即可进行远程访问,这对于 “平民” 用户来说非常方便。

只需要花几分钟的功夫,您就可以建立自己的远程桌面。这种方法的一个重要功能特性是它进行认证的方法:它并不基于登录级别的帐号,后者常见于基于 ssh、IPv6、OpenVPN 和大部分专有产品的远程访问机制,我们将展示如何为 SSL 设置帐号/密码对。这是一种非常 “轻量级” 的方法,可以与桌面主机上的其他用途隔离开来。同时,这种方法在 Web 上应用广泛,并且是一种关键的技术,大部分开发人员来此非常熟悉。

尽管只需要几个步骤就可以实现通过 SSL 来访问 VNC,但是这个配置的核心存在一个复杂的问题:Jva VNC 客户机不会连接到那些自己对证书进行签名的 SSL 站点上。更确切地说,流行浏览器所使用的 JVM 通常都需要经过 “受信任的第三方” 认证权威(CA)签名的证书。

这篇文章对读者进行了有效地分类。可能由于管理或开发安全 Web 站点的需要您已经开始使用 SSL,那就可以立即在 VNC-through-SSL 项目中使用相同的 Web 服务器和经过签名的证书。如果您 尚不具备 使用 SSL 的背景知识,那么这种技术则不是一个很好的入门。对您来说,更传统的 ssh 隧道或 Hamachi 以及商业解决方案可能是通向远程桌面的更简单起点。更多信息请参看侧栏的 证书和 SSL。

方法

第一个步骤是设置 VNC 服务器以及相应的隧道。对于这个步骤来说,您必须具有一个允许创建有效密钥文件的证书,包括一个私钥和一个公钥。将密钥放置在 /etc/ssl/certs/stunnel.pem。这个例子使用了 TightVNC 服务器并显示:5。


清单 1. 启动 TightVNC 服务器和隧道
$ tightvncserver :5
$ stunnel -d 5705 -r 5905 -p /etc/ssl/certs/stunnel.pem

尽管大部分 Linux 主机都进行了设置以允许任何用户都可以启动 vncserver,但是您很可能会需要 root 特权来有效地使用 stunnel。根据主机的安全性模型,您最好是执行下面的命令: sudo stunnel ...

现在,服务器应该为地址 there:5905 提供了一个未加密的连接,并为 there:5705 提供了一个加密连接。使用任何方便的 VNC 查看器来验证未加密连接,重定向到 yourhost:5。要确保 stunnel 已经启动并且正在运行,请使用下面的命令来搜索系统日志:


清单 2. 检查 stunnel 是否已成功
# grep stunnel /var/log/syslog|tail -24
Aug 21 18:58:17 there stunnel[5453]: Using '5905' as 
      tcpwrapper service name
Aug 21 18:58:17 there stunnel[5453]: stunnel 3.26 on 
      i386-pc-linux-gnu PTHREAD+LIBWRAP with OpenSSL 0.9.7e 25 Oct 2004
Aug 21 18:58:17 there stunnel[5454]: FD_SETSIZE=1024, 
      file ulimit=1024 -> 500 clients allowed

出现的错误 —— 密钥文件无效,没有足够的权限,或者端口已经被使用 —— 出现在同样的日志文件中。例如,如果缺少密钥,在日志中的形式如下:

Aug 21 18:58:17 there stunnel[5453]: /etc/ssl/certs/stunnel.pem: No such file or directory (2)

由于服务器可以同时处理未加密端口和已加密端口,下面让我们转到 VNC Web 客户机上来。要启用这种功能,需要从 x11vnc 项目中下载启用 SSL 的 Java VNC 查看器。在下载源 tarball 文件之后,就可以使用位于 x11vnc-X.Y.Z/classes/ssl/VncViewer.jar 和 x11vnc-X.Y.Z/classes/ssl/SignedVncViewer.jar 中的 Java 代码了。设置一个目录来存放 VNC 的内容,将 VncViewer.jar 拷贝到这个目录中,并创建一个 HTML 源文件。这个样例 HTML 文件允许通过 SSL 连接到 there:5705


清单 3. 连接到 there:5705 上
<html>
<body>
<applet code="VncViewer.class" archive="VncViewer.jar" width="800" height="600">
<param name="PORT" value="5705" />
<param name="HOST" value="there" />
<param name="Open New Window" value="no" />
<!-- the following helps in Opera:
<param name="Cursor shape updates" value="Disable" />
-->
</applet>
</body>
</html>

HTTP 和 HTTPS 都可以为该 applet 服务。假设 HTML 和 Jar 文件在端口 80 上使用了 HTTP 服务,URI 为 /vnc,那么地址 http://there/vnc 就会显示这个桌面。记住要对您的浏览器启用 Java!另外,还要注意 HOST 参数和源地址要使用相同的主机名;Java applet 的安全模型必须要求这样做。

 

更多使用技巧

使用标准组件和协议的一个优点是它们可以非常简单地进行替换。例如,我们的开发大部分都采用了 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 的技术与我们进行了讨论。

原文链接:http://www.ibm.com/developerworks/cn/linux/l-sslvnc.html

本文被浏览



 相关新闻

利用IP 别名托管多个SSL 站点2007-01-19 13:23:10
使用 OpenSSL API 进行安全编程(2)2006-11-14 15:08:00
使用 OpenSSL API 进行安全编程(3)2006-11-10 16:22:47
Linux OPENSSL服务器2001-11-06 09:00:01


 相关评论
关于我们 | 联系方式 | 广告合作 | 诚聘英才 | 网站地图 | 免费注册

Copyright © 2001-2006 ChinaUnix.net All Rights Reserved

感谢所有关心和支持过ChinaUnix的朋友们

京ICP证041476号