代码改变世界

Ubuntu 9.10 Server 配置基于SSL的Subversion

2010-02-09 20:06  BAsil  阅读(2086)  评论(0编辑  收藏  举报

1 配置准备

  Ubuntu 9.10 Server 英文版。服务器版还是以稳定高效为主,也没有安装图形界面,另外主要是通过putty.exe远程访问。没有采用中文版的原因是,在shell下,中文字体可能没有安装总显示乱码,拜过谷哥大神,未解决。

2 安装软件及模块一览

  (1)Apache2.2.14  自己下载编译。未用ubuntu 9.10 server 下apt-get安装的apache2 是因为这个版本的apache2在启用ssl的时候总是报undefined symbol apr_ldap_ssl_init错误,此处我怀疑可能是ubuntu9.10 server的问题,我在虚拟机ubuntu 8.04 desktop下配置成功。

  (2)OpenSSL 通过apt-get install openssl 安装即可

  (3)Subversion 自己编译下载。很不幸,我无法使用ubuntu的subversion来成功配置SSL。

3 Ubuntu & Linux  

鉴于大家可能对不同发行版的linux不太了解,我简单介绍一下,并比较apache2的Ubuntu版本和自主安装的安装及配置文件路径

   以下摘自Wiki

     One can distinguish between commercially backed distributions, such as Fedora (Red Hat), openSUSE (Novell), Ubuntu (Canonical Ltd.), and Mandriva Linux (Mandriva) and entirely community-driven distributions such as Debian and Gentoo, though there are other distributions that are driven neither by a corporation nor a community, perhaps most famously Slackware.

简单翻译一下,就是说linux有商业支持的发行版如Fedora,openSUSE,Ubuntu和社区推动的版本如Debian和Gentoo。另外Ubuntu本身又是基于Debian的,这点大家应该清楚。

   

  Ubuntu Apache2 自主安装Apache2
安装目录 /etc/apache2
指定路径
例如:
/usr/local/apache2
应用程序 /etc/sbin/apache2
/etc/lib/apache2
/usr/local/apache2/bin/httpd
服务 /etc/init.d/apache2  restart /usr/local/apache2/bin/httpd –k restart 
(不知还有没有别的方式?)
配置文件 /etc/apache2/apache2.conf
/etc/apache2/httpd.conf (通常为空)
/etc/apache2/ports.conf
/etc/apache2/mods_available/
/etc/apache2/sites_available/
apache2.conf负责调用其他的配置文件
/usr/local/apache2/conf/httpd.conf
/usr/local/apache2/conf/extra/
httpd.conf负责调用extra文件夹下的配置文件

4 自主安装Apache2

#sudo wget http://apache.etoak.com/httpd/httpd-2.2.14.tar.gz
#sudo tar -zxvf httpd-2.2.14.tar.gz    
#cd httpd-2.2.14               
#sudo ./configure   --enable-dav --enable-dav-fs --enable-so   --enable-ssl --enable-maintainer-mode -prefix=/usr/local/apache2   --enable-mods-shared=all   
#sudo make                         
#sudo make install

   注意./configure 时确保enable-dav和enable-ssl,其中dav模块是通过apache2存储文件的基础。
5 安装OpenSSL

#sudo apt-get install openssl

6 安装Subversion

# sudo apt-get install build-essential openssl ssh expat libxyssl-dev libssl-dev   
# sudo apt-get remove subversion   
# sudo dpkg --purge subversion   
# wget http://subversion.tigris.org/downloads/subversion-1.6.2.tar.gz
# wget http://subversion.tigris.org/downloads/subversion-deps-1.6.2.tar.gz
# tar xvfz subversion-1.6.2.tar.gz   
# tar xvfz subversion-deps-1.6.2.tar.gz   
# cd subversion-1.6.2/neon/   
# ./configure --prefix=/usr/local --with-ssl --with-pic  
# make   
# sudo make install      
# ./configure --prefix=/usr/local --with-ssl --with-neon=/usr/local   
# make   
# sudo make install  

  注意:首先移除ubuntu自带的subversion,随后进行编译安装。其中subversion-deps-1.6.2.tar.gz是Subversion客户端使用的Neon库,它不仅仅可以用来验证服务器证书,也可以必要时提供客户端证书,因此也要安装上

7 配置http访问subversion

  参考了主题:ubuntu下安装svn提供HTTP版本管理服务Install Subversion with Web Access on Ubuntu

(1)#sudo svnadmin create /svn  

   可以看一下/svn下是不是增加了些文件 
(2)#sudo vim /usr/local/apache2/conf/httpd.conf

   增加 
   <Location /svn>
     DAV svn
     SVNPath /svn
     AuthzSVNAccessFile /svn/conf/authz
     AuthType Basic
     AuthName "Subversion.Tracker"
     AuthUserFile /svn/conf/passwd     Require valid-user
   </Location>

    这部分应该也可以放置到 conf/extra/httpd_dav.conf文件中,然后将httpd.conf中的 include conf/extra/httpd_dav.conf 注释去掉,不过奇怪的是httpd_dav.conf文件中的示例使用<Directory>而不是<Location>,我未作尝试。

(3)#sudo htpasswd -m /svn/conf/passwd <username>

   注意-c的参数会重新创建新文件(谨慎使用,可能覆盖)
   增加一个用户名,可以打开passwd文件查看是否创建成功
   同时在Ubuntu上创建同名用户和相同密码  (此处待验证,网络上有的文章没有强调这一点
   sudo useradd <username>
   sudo passwd <password>

(4)#sudo chown www-data:www-data  -R /svn 

    将/svn的所有者和所在的组更改为www-data(ubuntu下apache2的账户)

    #sudo chmod –R g+ws /svn

(5)#sudo /usr/local/apache2/bin/httpd –k restart

    看看http://localhost/svn 是否可以访问了

8 配置ssl访问subversion

  参考了Linux SVN+Apache+SSL 安装配置Apache SSL配置

openssl genrsa -des3 -out ca.key 1024
//按提示输入密码:****
chmod 400 ca.key
//生成证书
openssl req -new -x509 -days 3650 -key ca.key -out ca.crt
//按提示分别输入如下内容:
//Country Name: CN
//State or Province Name:
//Locality Name:
//Organization Name:
//Organizational Unit Name:
//Common Name:
//Email Address: your email
chmod 400 ca.crt
openssl genrsa -des3 -out server.key 1024
//按提示输入密码:
chmod 400 server.key
openssl req -new -key server.key -out server.csr
//按提示分别输入如下内容:
//Country Name: CN
//State or Province Name:
//Locality Name:
//Organization Name:
//Organizational Unit Name:
//Common Name:
//Email Address: your email
(ca.crt 和server.csr 的Common Name不能一样)
openssl req -noout -text -in server.csr
openssl x509 -req -days 365 -in server.csr -signkey server.key -out  server.crt
chmod 400 server.crt

vim /usr/local/apache2/conf/httpd.conf
取消Include conf/extra/httpd-ssl.conf前的注释#

打开httpd-ssl.conf文件查看如下两行,确保前面生成的证书放置在该路径下

SSLCertificateFile "/usr/local/apache2/conf/server.crt"

SSLCertificateKeyFile "/usr/local/apache2/conf/server.key"

重启httpd服务

查看https://localhost/svn/  浏览器显示此网站的安全证书有问题,忽略它,输入用户名和密码,至此基于SSL的Subversion配置完成。

9 总结

  配置过程中应该了解ubuntu和其他linux发行版安装软件的不同,掌握make和make install。如碰到apache2不能启动,阅读错误提示以及查看日志(/usr/local/apache2/logs/error.log).