fedora core 6 用apache搭建svn的安全服务器

以前公司的源代码通过Subvision管理,通过https协议访问版本库,今天心血来潮,在自己的fedora core 6虚拟机上搭建svn安全服务器,并实现了在Windows下用TortoiseSVN访问。

1.配置svn版本库。
  默认情况下,FC6安装了svn软件。通过rpm -qa | grep svn来查看是否安装,如果没有安装,通过yum install svn来安装。下面配置一个版本库,库名repository。

  svnadmin create /usr/local/repository 建立版本库
  svnserve -d -r /usr/local/repository  启动svn服务
  netstat -l | grep svn 查看svn服务是否成功启动,正常情况下会出现一个svn的监听套接字
  tcp        0      0 *:svn                       *:*                         LISTEN
  将本地的项目import到版本库中
  svn import project file:///usr/local/repository/project -m "随便写点什么"

2.安装并配置apache
  yum install httpd

  Subversion需要版本化的控制,标准的 Http 协议不能满足需求。要让Apache与Subversion协同工作,需要使用 WebDAV(Web 分布式创作和版本控制, WebDAV 是 HTTP 1.1 的扩展)。为了使 Subversion 与 dav 模块通信,需要安装 mod_dav_svn 插件

  yum install mod_dav_svn

  接下来就是配置 Apache 的 httpd.conf 文件,让 Apache 在启动的时候加载上述模块。

  LoadModule dav_module modules/mod_dav.so
  LoadModule dav_svn_module modules/mod_dav_svn.so
  <Location /repository>
     DAV svn
     SVNPath /usr/local/repository
  </Location>

  重新启动 Apache,打开浏览器,输入 http://服务器IP/repository,就可以看到目录树

  上述是匿名用户均可以访问代码库,如何实现密码验证用户访问呢?Apache 提供了一个工具 htpasswd,用于生成用户文件,可以在 Apache 的安装目录下找到。

具体使用方法如下:
  htpasswd etc/svn/passwordfile username

接下来修改 httpd.conf,在 Location 标签中加入如下内容:
AuthType Basic
AuthName "svn repository"
AuthUserFile /etc/svn/passwordfile
Require valid-user

重启apache,打开浏览器,就可以实现用户的密码鉴权访问了。

3.配置ssl
  yum install mod_ssl
  配置httpd.conf文件,让Apache在启动的时候加载ssl模块
  LoadModule ssl_module modules/mod_ssl.so
  生成SSL 的证书和密钥了。首先,找到 openssl 程序及其配置文件 openssl.cnf,运行如下命令来生成 128 位的 RSA 私有密钥文件
  openssl genrsa -des3 -out server.key 1024  其中需要用户输入并确认自己的密码
  openssl req -new -key my-server.key -x509 -out server.crt -config /etc/pki/tls/ openssl.cnf  生成一个自签名的认证证书

上述命令都需要用户输入那个 key 文件的密码,以及一些网络设置信息,如域名,邮箱等。现在,我们可以在 Apache 的 ssl.conf 文件的路径下新建一个 ssl 目录,将 server.key 和 server.crt 文件都移动到 ssl 目录里面。然后修改 ssl.conf 文件,将 SSLCertificateKeyFile 和 SSLCertificateFile 项指向这两个文件。

最后,在httpd.conf配置文件的最后,加上如下 SSL 相关配置项:

SSLMutex default
SSLRandomSeed startup builtin
SSLSessionCache none
ErrorLog logs/SSL.log
LogLevel info
<VirtualHost 你自己的域名:443>
  SSLEngine On
  SSLCertificateFile /etc/httpd/conf.d/ssl/server.crt
  SSLCertificateKeyFile /etc/httpd/conf.d/ssl/server.key
</VirtualHost>

重启apache,其中需要输入认证的密码
在Windows下的TortoiseSVN中checkout:https://ip/repository/project