整合Subversion与apache httpd实现https方式访问

2018-06-30 77次浏览 发表评论

更新安装系统开发环境:

yum -y update
yum -y install make cmake gcc gcc-c++ gcc-g77 flex bison file libtool libtool-libs autoconf kernel-devel patch wget crontabs libjpeg libjpeg-devel libpng libpng-devel libpng10 libpng10-devel gd gd-devel libxml2 libxml2-devel zlib zlib-devel glib2 glib2-devel unzip tar bzip2 bzip2-devel libzip-devel libevent libevent-devel ncurses ncurses-devel curl curl-devel libcurl libcurl-devel e2fsprogs e2fsprogs-devel krb5 krb5-devel libidn libidn-devel openssl openssl-devel vim-minimal gettext gettext-devel ncurses-devel gmp-devel pspell-devel unzip libcap diffutils ca-certificates net-tools libc-client-devel psmisc libXpm-devel git-core c-ares-devel libicu-devel libxslt libxslt-devel xz expat-devel libaio-devel

安装apr和apr-util

httpd和svn都依赖apr与apr-util,所以先安装。下载:http://apr.apache.org/download.cgi

wget http://mirrors.tuna.tsinghua.edu.cn/apache//apr/apr-1.6.3.tar.gz
wget http://mirrors.tuna.tsinghua.edu.cn/apache//apr/apr-util-1.6.1.tar.gz

编译安装apr

tar -zxvf apr-1.6.3.tar.gz
cd apr-1.6.3
./configure --prefix=/usr/local/apr
make && make install

编译安装apr-util

tar -zxvf apr-util-1.6.1.tar.gz
cd apr-util-1.6.1
./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr/
make && make install

安装zlib

svn依赖zlib,实现压缩功能,所以此处需要安装zlib。下载地址:http://www.zlib.net/

wget http://www.zlib.net/zlib-1.2.11.tar.gz

编译安装zlib,安装在默认路径即可,未指明路径的情况下对应的库路径默认为/usr/local/lib

tar -zxvf zlib-1.2.11.tar.gz
cd zlib-1.2.11
./configure
make && make install

安装sqlite

svn依赖sqlite,而且svn的版本与sqlite的版本有一定的对应关系。下载地址:http://www.sqlite.org/download.html

wget http://www.sqlite.org/2018/sqlite-autoconf-3220000.tar.gz

编译安装sqlite3

tar -zxvf sqlite-autoconf-3220000.tar.gz
cd sqlite-autoconf-3220000
./configure
make && make install

安装Apache httpd

因为要实现通过http或者https地址访问SVN,需要安装httpd,下载地址:http://httpd.apache.org/

wget http://mirrors.tuna.tsinghua.edu.cn/apache//httpd/httpd-2.4.33.tar.gz

编译安装httpd

tar -zxvf httpd-2.4.33.tar.gz

cp -r apr-1.6.3 /usr/local/src/httpd-2.4.33/srclib/apr
cp -r apr-util-1.6.1 /usr/local/src/httpd-2.4.33/srclib/apr-util

cd httpd-2.4.33
./configure --prefix=/usr/local/apache2 --with-apr=/usr/local/apr/bin/apr-1-config --with-apr-util=/usr/local/apr-util/bin/apu-1-config --enable-so --enable-dav --enable-maintainer-mode --enable-rewrite --enable-ssl --with-ssl --with-pcre --with-included-apr --with-apr-util

make && make install

安装Subversion

从apache subversion官网获取源码包:http://subversion.apache.org/

wget http://mirrors.tuna.tsinghua.edu.cn/apache/subversion/subversion-1.9.7.tar.gz

编译安装svn

tar -zxvf subversion-1.9.7.tar.gz
cd subversion-1.9.7
./configure --prefix=/usr/local/svn --with-apxs=/usr/local/apache2/bin/apxs --with-apr=/usr/local/apr/bin/apr-1-config --with-apr-util=/usr/local/apr-util/bin/apu-1-config --with-zlib --enable-maintainer-mode
make && make install

为了方便使用,此处将编译安装的命令路径加入环境变量vim /etc/profile.d/svn.sh加入如下内容:

export SVN_HOME=/usr/local/svn
export PATH=$SVN_HOME/bin:$PATH

执行source /etc/profile生效。

创建SVN相关用户组

groupadd svn
useradd -g svn svn

设置svn用户禁止SSH登录系统

echo “DenyUsers svn” >> /etc/ssh/sshd_config

创建SVN数据根目录

mkdir /data/svndata
chown svn:svn /data/svndata

创建版本库

su - svn     # 切换到svn用户
mkdir -p /data/svndata/     #创建一个SVN数据存储路径
svnadmin create --pre-1.6-compatible /data/svndata/test    #创建版本库

编辑版本库配置文件vim /data/svndata/test/conf/svnserve.conf

[general]
anon-access = none
auth-access = write
password-db = /data/svndata/passwd
authz-db = /data/svndata/authz
realm = test
[sasl]

创建SVN用户

htpasswd -c /data/svndata/passwd user1   #回车输入两次密码,第二次创建用户不需要加 -c 选项

权限配置vim /data/svndata/authz

[aliases]

#编组
[groups]
all = user1,user2,user3
sa = sk

# 根权限
[/]
@sa = r

# 版本库权限
[test:/]
user1 = rw
user2 = r

[test2:/]
@all = rw

整合svn与httpd

进行httpd相关设置,将httpd访问svn依赖的模块从svn目录拷贝到httpd的模块目录,以便httpd使用:

cp /usr/local/svn/libexec/mod_authz_svn.so /usr/local/apache2/modules/
cp /usr/local/svn/libexec/mod_dav_svn.so /usr/local/apache2/modules/

编辑httpd的配置文件,加载对应的模块,并且设置对应location,以便客户端能够访问。

vim /usr/local/apache2/conf/httpd.conf

设置启动httpd的用户和组:

User svn
Group svn

加载整合svn所需的模块文件,刚才已经将这些动态库拷贝到了modules目录中:

LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so

#for svn
<Location />
DAV svn
SSLRequireSSL
SVNParentPath /data/svndata
SVNListParentPath On
SVNAutoversioning On
SVNReposName "Apache Subversion(SVN)"
AuthzSVNAccessFile /data/svndata/authz
AuthType Basic
AuthName "Subversion Repository"
AuthUserFile /data/svndata/passwd
Require valid-user
</Location>

配置Https

生成rsa证书私钥:

openssl genrsa 2048 > server.key

根据私钥生成证书请求文件,执行如下命令,根据提示填写证书申请信息:

openssl req -new -key server.key > server.csr

执行上述命令后

  • 要求输入Country Name时,填写CN
  • State or Province Name  填写服务器所在地的省份名称
  • Locality Name  填写服务器所在地的城市名称
  • Organization Name  填写组织名称或者公司名称
  • Organizational Unit Name  填写部门名称(可直接空格省略)
  • Common Name  填写服务器主机名
  • Email Address  填写管理员邮箱(可直接空格省略)
  • A challenge password  不建议填写,填写后启动httpd服务时会提示输入密码,更加安全,但是比较麻烦,而且有可能忘记密码,直接回车表示不填写密码,此处直接回车
  • An optional company name  可选公司名不填,直接回车。

根据私钥和证书请求文件生成自签证书:

openssl req -x509 -days 36500 -key server.key -in server.csr > server.crt

将私钥与证书拷贝至httpd的配置文件目录:

cp server.key /usr/local/apache2/conf/
cp server.crt /usr/local/apache2/conf/

设置httpd支持ssl

编辑httpd配置文件,将Include conf/extra/httpd-ssl.conf前面的注释去掉

确定httpd-ssl.conf配置文件中的证书与私钥指定正确:

SSLCertificateFile "/usr/local/apache/conf/server.crt"
SSLCertificateKeyFile "/usr/local/apache/conf/server.key"

完成上述步骤后,打开/usr/local/apache2/conf/httpd.conf修改svn对应的location,在对应的location中加入如下配置:

SSLRequireSSL

如果使用TortoiseSVN作为svn客户端,第一次使用https地址访问SVN服务器时,可能会出现如下提示,提示证书验证失败,是否信任此证书,这是正常现象,因为我们的证书是自建的,没有权威的CA认证,为了方便,选择永久接受证书即可。

评论

随便说点,聊聊天~