411 12
发新话题
打印

用 Apache 结合 Subversion 搭建安全的版本控制环境

用 SSL 实现安全的网络传输

通过 Apache 的网络链接,版本库中的代码和数据可以在互联网上传输,为了避免数据的明文传输,实现安全的版本控制,需要对数据的传输进行加密。Apache 提供了基于 SSL 的数据传输加密模块 mod_ssl,有了它,用户就可以用 https 协议访问版本库,从而实现数据的加密传输了。SSL 协议及其实现方式,是一个非常复杂的话题,本文只是介绍 Apache 提供的最基本的SSL配置方法,更加详细的介绍内容,请参考 http://httpd.apache.org/docs-2.0/ssl/ 上的文档。

开始配置前,我们需要一个实现 Apache 中 SSL 模块的动态程序库,通常名为 mod_ssl.so,及其配置文件,通常名为 ssl.conf。这个实现是跟 Apache 的版本相关的,不匹配的版本是不能用的;而且,并不是每一个 Apache 的版本都自带了相关实现文件,很多情况下,我们需要自己去搜寻相关文件。另外,我们还需要 OpenSSL 软件及其配置文件,来生成加密密钥和数字证书。这里,我们可以使用一些免费网站,如 http://hunter.campbus.com/ 上提供的集成版本的 Apache。

有了相关的工具和文件,我们就可以开始生成 SSL 的证书和密钥了。首先,我们需要找到 openssl 程序及其配置文件 openssl.cnf,运行如下命令来生成 128 位的 RSA 私有密钥文件
复制内容到剪贴板
代码:
my-server.key:
openssl genrsa -des3 -out my-server.key 1024
Loading 'screen' into random state - done
Generating RSA private key, 1024 bit long modulus
.....++++++
........++++++
e is 65537 (0x10001)
Enter pass phrase for server.key:********
Verifying - Enter pass phrase for server.key:********
命令运行期间需要用户输入并确认自己的密码。

现在,我们需要 SSL 的认证证书,证书是由 CA(certificate authority) 发放并且认证的。为此,我们可以用如下命令生成一个 CSR(Certificate Signing Request) 文件发给 CA,从而得到 CA 的认证:
复制内容到剪贴板
代码:
openssl req -new -key my-server.key -out my-s erver.csr -config openssl.cnf
当然,一般情况下,如果 Subversion 的用户不是太多,安全情况不是很复杂,我们也可以生成一个自签名的认证证书,从而省去了向 CA 申请认证的麻烦。如下命令:
复制内容到剪贴板
代码:
openssl req -new -key my-server.key -x509 -out my-server.crt -config openssl.cnf
以上两个命令都需要用户输入那个 key 文件的密码,以及一些网络设置信息,如域名,邮箱等等,这里输入的服务器域名应该与 Apache 配置文件当中的一致。现在,我们可以在 Apache 的 conf 目录下新建一个 ssl 目录,将 my-server.key 和 my-server.crt 文件都移动到 ssl 目录里面。然后修改 ssl.conf 文件,将 SSLCertificateKeyFile 和 SSLCertificateFile 项指向这两个文件。

如果 Apache 的 module 目录里面没有 mod_ssl.so 文件,可以将事先准备好的文件拷贝过去。然后,我们可以设置 Apache 的配置文件 httpd.conf,将 ssl 模块加入其中:
复制内容到剪贴板
代码:
LoadModule ssl_module modules/mod_ssl.so
然后,在配置文件的最后,加上如下 SSL 相关配置项:
复制内容到剪贴板
代码:
SSLMutex default
SSLRandomSeed startup builtin
SSLSessionCache none

ErrorLog logs/SSL.log
LogLevel info
<VirtualHost svntest.ut.cn.ibm.com:443>
  SSLEngine On
  SSLCertificateFile conf/ssl/my-server.crt
  SSLCertificateKeyFile conf/ssl/my-server.key
</VirtualHost>
这样,基本的设置工作就完成了。重新启动 Apache 服务器,现在可以用 https 协议代替 http 协议来访问版本库了。如果要限定版本库只能用 https 访问,我们可以在 Apache 配置文件当中 Subversion 部分加上 “SSLRequireSSL”。如下:
复制内容到剪贴板
代码:
<Location /repos>
  DAV svn
  SVNPath /etc/svn/repos
  ………….#other items
  SSLRequireSSL
</Location>


总结

Subversion 以其优良的版本控制功能,灵活的网络访问模型,以及与 Apache 服务器联合配置所带来的更强大的管理控制功能,逐渐在开源软件开发的实践当中得到广泛的应用。本文重点介绍了 Subversion 服务器端的配置以及与 Apache 服务器联合配置的基本步骤和简单应用,实现了简单的实例应用。读者如果想要进一步了解相关信息,请参考文章后面列出的相关资料。


参考资料

  • Subversion 官方网站:Subversion 的发源地,提供最权威的介绍和最新的下载。
  • Subclipse 官方网站:Subversion 配套的插件站点,提供 Eclipse 中 Subversion 的插件下载和文档。
  • Subversion 手册:官方提供的全面而细致的使用说明书。
  • IETF RFC 2518 WebDAV 的规范和工作原理的原始文档。
  • Subversion 简介:developerWorks Java 专区中的一篇介绍 Subversion 客户端插件使用方法的文章 (Elliotte Harold,developWorks 2006 年 7 月 06 日)。
  • 用 Subversion 构建版本控制环境 :developerWorks Java 专区中的一篇介绍 Subversion 客户端安装,配置,插件使用的文章 (刘冬,developWorks 2005 年 9 月)

作者简介


吴玥颢,目前就职于 IBM 中国开发中心 Harmony 开发团队。 除了对 JAVA 和脚本语言的热爱之外,他的兴趣还包括哲学、神话、历史与篮球。此外他还是个电脑游戏高手。您可以通过wuyuehao@cn.ibm.com联系到他。


胡睿,目前就职于 IBM 中国开发中心 Harmony 开发团队。 主要负责类库开发的技术工作,对 J2SE、J2EE、C/C++、全球化技术、软件测试等有浓厚的兴趣。另外,他对历史、电影、音乐与羽毛球等也十分热爱。您可以通过ruihu@cn.ibm.com联系到他。


[ 本帖最后由 夏雪 于 2007-6-22 20:14 编辑 ]
不在乎爱情到最后有什么结果,只要爱过。。。。

TOP

 411 12
发新话题