SVN 服务器支持 HTTPS 访问
CentOS 7 安装 Subversion 服务器,请见米扑博客,安装配置步骤非常详细:CentOS 搭建 SVN Server
本文重点介绍搭建完成Subversion 服务器后,如何支持 HTTPS 访问
一、支持 HTTP 访问
SVN 支持 http 需要开启 dav 模块,并且配置 dav
1. 开启 dav 相关模块
LoadModule dav_module modules/mod_dav.so
LoadModule dav_fs_module modules/mod_dav_fs.so
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
2. 查看 SVN 目录结构
/home/data/SVN # SVN 根目录
/home/data/SVN/repository # repo 版本库
tree 目录树查看:
# tree -L 1 /home/data/SVN/repository/ /home/data/SVN/repository/ ├── conf ├── dav ├── db ├── format ├── hooks ├── locks └── README.txt
3. 配置文件
vim /usr/local/httpd/conf/httpd.conf
<Location /repository>
DAV svn
SVNPath /home/data/SVN/repository/
AuthType Basic
AuthName "svn for repository"
AuthUserFile /home/data/SVN/repository/conf/webpasswd
AuthzSVNAccessFile /home/data/SVN/repository/conf/authz
Satisfy all
Require valid-user
</Location>
4. 通过 http 访问
http://svn.domain.com/repository/
二、支持 HTTPS 访问
httpd 不同版本支持 https 方式不一样,我遇到的两个版本如下:
版本1:
系统环境:CentOS 6.5 + Apache/2.2.27
配置文件 /etc/httpd/conf/httpd.conf 中引入了 Include conf.d/*.conf 所有的配置文件
其中,conf.d/*.conf 配置有如下:
# ll /etc/httpd/conf.d/
-rw-r--r-- 1 root root 2699 Jul 30 2011 mod_extract_forwarded.conf
-rw-r--r-- 1 root root 1796 Apr 17 2014 perl.conf
-rw-r--r-- 1 root root 1046 Feb 18 2014 php.conf
-rw-r--r-- 1 root root 566 Dec 6 2005 proxy_ajp.conf
-rw-r--r-- 1 root root 392 Apr 9 2014 README
-rw-r--r-- 1 root root 9639 Jul 21 2015 ssl.conf
-rw-r--r-- 1 root root 1042 Aug 17 2015 subversion.conf
-rw-r--r-- 1 root root 1447 Dec 13 2014 subversion.conf.rpmsave
-rw-r--r-- 1 root root 427 Mar 10 2014 welcome.conf
可见,ssl.conf 通过 Include conf.d/*.conf 引入进来的
版本2:
系统环境:CentOS 7.5 + Apache/2.4.34
配置文件 /usr/local/httpd/conf/httpd.conf 中引入了 Include conf/extra/httpd-ssl.conf 配置文件,可谓是精准引入
为了多介绍下,列出 conf/extra/ 目录下的所有配置文件,需要用到哪个就引入哪个
# ll /usr/local/httpd/conf/extra/
-rw-r--r-- 1 root root 2877 Jul 25 09:21 httpd-autoindex.conf
-rw-r--r-- 1 root root 1807 Jul 25 09:21 httpd-dav.conf
-rw-r--r-- 1 root root 2942 Jul 25 09:21 httpd-default.conf
-rw-r--r-- 1 root root 1119 Jul 25 09:21 httpd-info.conf
-rw-r--r-- 1 root root 5078 Jul 25 09:21 httpd-languages.conf
-rw-r--r-- 1 root root 1391 Jul 25 09:21 httpd-manual.conf
-rw-r--r-- 1 root root 4444 Jul 25 09:21 httpd-mpm.conf
-rw-r--r-- 1 root root 2216 Jul 25 09:21 httpd-multilang-errordoc.conf
-rw-r--r-- 1 root root 13669 Aug 17 16:08 httpd-ssl.conf
-rw-r--r-- 1 root root 694 Jul 25 09:21 httpd-userdir.conf
-rw-r--r-- 1 root root 1463 Jul 25 09:21 httpd-vhosts.conf
-rw-r--r-- 1 root root 3161 Jul 25 09:21 proxy-html.conf
因此,httpd 要支持 https ssl 访问,是需要手动引入 Include conf/extra/httpd-ssl.conf 配置文件,否则无法 https 访问,切记!
好了,先在 /usr/local/httpd/conf/httpd.conf 中引入了 Include conf/extra/httpd-ssl.conf 配置文件
svn 版本库服务器支持 https 访问有多种方法,本文将介绍两种方法
方法一:自定义生成 ssl 证书
1、命令生成 ssl 证书文件
cd /etc/pki/tls/private
openssl genrsa -out server.key 1024
openssl req -new -key server.key -out server.csr
cd /etc/pki/tls/certs
openssl x509 -req -days 365 -in /etc/pki/tls/private/server.csr -signkey /etc/pki/tls/private/server.key -out server.crt
以上步骤,有些信息如实填写,必须在相关文件夹下产生所需的文件,保证输入命令正确,保证产生文件所在文件夹正确
2、修改引入的 httpd-ssl.conf 配置文件
vim /usr/local/httpd/conf/extra/httpd-ssl.conf
直接给出修改后的结果
ErrorLog "/var/log/httpd_ssl_error_log"
TransferLog "/var/log/httpd_ssl_access_log"
LogLevel warn
SSLCertificateFile "/etc/pki/tls/certs/server.crt"
SSLCertificateKeyFile "/etc/pki/tls/private/server.key"
3、重启 httpd,访问 https
/etc/init.d/httpd restart
访问 https
https://svn.domain.com/repository/
将会提示出现无法找到 ssl 证书,这是因为浏览器(chrome、firefox、ie)无法找到本地 ssl 证书
方法二:申请免费 ssl 证书 (推荐)
这里是本文讲述的核心重点,解决 svn 服务器完美支持 https 访问
在腾讯云申请免费的 ssl 证书,或者用免费的 Let’s Encrypt ssl 证书
1、将申请好的 ssl 证书解压,配置到 httpd.conf
vim /usr/local/httpd/conf/httpd.conf
添加如下内容:
# svn 443 for https
<VirtualHost *:443>
SSLEngine on
SSLCertificateChainFile /usr/local/httpd/conf/1_svn_root_bundle.crt
SSLCertificateFile /usr/local/httpd/conf/2_svn.mimvp.com.crt
SSLCertificateKeyFile /usr/local/httpd/conf/3_svn.mimvp.com.key
ServerAdmin yanggang@163.com
DocumentRoot /usr/local/httpd/htdocs/svn_tmp
ServerName svn.mimvp.com
DirectoryIndex index.php index.html index.htm
ErrorLog /var/log/svn.mimvp.com-error_log
CustomLog /var/log/svn.mimvp.com-access_log common
</VirtualHost>
可见,在 httpd 根目录下,创建了一个临时的 svn_tmp 文件
并配置了 ssl 443访问
2、强制 http 跳转到 https
# svn 80 for http to https
<VirtualHost *:80>
RewriteEngine on
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*) https://%{SERVER_NAME}$1 [L,R]
ServerAdmin yanggang_2050@163.com
DocumentRoot /usr/local/httpd/htdocs/svn_tmp
ServerName svn.mimvp.com
DirectoryIndex index.php index.html index.htm
ErrorLog /var/log/svn.mimvp.com-error_log
CustomLog /var/log/svn.mimvp.com-access_log common
</VirtualHost>
3、配置 svn dav 支持 http 访问
# svn path only for http
<Location /repository>
DAV svn
SVNPath /home/data/SVN/repository/
AuthType Basic
AuthName "svn for repository"
AuthUserFile /home/data/SVN/repository/conf/webpasswd
AuthzSVNAccessFile /home/data/SVN/repository/conf/authz
Satisfy all
Require valid-user
SSLRequireSSL
</Location>
4、重启 httpd,访问 https
/etc/init.d/httpd restart
访问 https
https://svn.domain.com/repository/
至此,完美解决了 svn 服务器 支持 https 访问
其实,细想原理很简单, ssl 443 访问临时文件,授权了申请的免费 ssl 证书,然后 svn dav 直接访问 http 强制跳转到了 https,此步骤获取了 ssl 授权
并结合 svn https 访问的是 repository 目录,在已经获得了 ssl 证书授权后,因此一路畅通,完美访问了 https
参考推荐:
版权所有: 本文系米扑博客原创、转载、摘录,或修订后发表,最后更新于 2018-12-28 05:08:44
侵权处理: 本个人博客,不盈利,若侵犯了您的作品权,请联系博主删除,莫恶意,索钱财,感谢!