CentOS服务器部署svn+apache http + ssl https访问
linux服务器搭建svn+apache+ssl部署环境: 1、linux下svn安装与使用参考链接:linux服务器svn安装与版本控制. 2、linu下svn配置http访问服务参考链接:linux服务器svn配置http访问. 3、linux svn设置开机自启动参考链接: linux svn设置开机自启动. 4、Linux下设置apache httpd服务为自动启动参考链接: Linux下设置apache httpd服务为自动启动. 5、 linux下svn命令使用大全参考链接: linux下svn命令使用大全.
一、配置https请求访问SVN
??通过http访问svn版本库虽然方便,但是http协议均采用明文传输,随便在网络上抓包用户名和密码就可能被泄露了,所以考虑采用https传输,安全性比较高,也就是apache+svn+ssl。希望svn支持https,主要的工作是配置 SSL协议(Secure Sockets Layer 安全套接层)
配置https请求需要先安装apache,配置http访问: linu下svn配置http访问.
1.1 安装SSL模块
未安装SSL模块的,参考以下步骤进行安装:
# 查看ssl是否已安装
openssl version
#未安装的安装openssl
yum -y install openssl
#查看apache是否已经安装了ssl_module
apachectl -t -D DUMP_MODULES|grep ssl
#安装ssl_module模块
yum -y install mod_ssl
1.2 生成服务端数字证书
以下步骤必须在特定文件夹下产生所需的文件,保证输入命令正确,保证产生文件所在文件夹正确,否则后面将发生错误
1、确认文件是否已存在:
#进入目录
cd /etc/pki/CA
# ls查看目录下是否有index.txt serial这两个文件
ls
#如果没有index.txt,创建
touch /etc/pki/CA/index.txt
# 如果没有serial,创建serial号文件
echo 00 > /etc/pki/CA/serial
2、生成证书
#进入目录
cd /etc/pki/CA
#(1)生成服务器端 私钥(key文件);
openssl genrsa -des3 -out private/svn_server.key 1024
#这里我的密码设置为:math123456
??运行时会提示输入密码,此密码用于加密key文件(参数des3是加密算法,也可以选用其他安全的算法),以后每当需读取此文件(通过openssl提供的命令或API)都需输入口令。 如果不要口令,则使用命令去除口令: openssl rsa -in svn_server.key -out svn_server_1.key
#(2)生成服务器端 证书签名请求文件(csr文件);
openssl req -new -key private/svn_server.key -out certs/svn_server.csr
??生成Certificate Signing Request(CSR),生成的csr文件交给CA签名后形成服务端自己的证书.屏幕上将有提示,依照其 提示一步一步输入要求的个人信息即可(如:Country,province,city,company等). 示例:
1.3 生成客户端数字证书
#1.生成客户端 私钥(key文件);
openssl genrsa -des3 -out private/svn_client.key 1024
2.生成客户端 证书签名请求文件(csr文件);
openssl req -new -key private/svn_client.key -out certs/svn_client.csr
#注意这里的commonName要与服务端的域名不同(随便取一个)
1.4 生成CA证书文件
server.csr与client.csr文件必须有CA的签名才可形成证书.
#1.首先生成CA的key文件:
[root@localhost CA]#openssl genrsa -des3 -out ca.key 1024
#2.生成CA自签名证书: 可以加证书过期时间选项 "-days 365".
openssl req -new -x509 -key ca.key -out ca.crt
#注意:注意这里的commonName要与服务端的域名相同
1.5 利用CA证书进行签名
openssl ca -in certs/svn_server.csr -out certs/svn_server.crt -cert ca.crt -keyfile ca.key
openssl ca -in certs/svn_client.csr -out certs/svn_client.crt -cert ca.crt -keyfile ca.key
1.6 配置证书
??执行命令cd /etc/httpd/conf.d/ ,查看该目录下是否有ssl.conf或者httpd-ssl.conf,如果没有该文件,则需要确认是否已正确安装了ssl_module模块。 编辑配置文件ssl.conf:
gedit /etc/httpd/conf.d/ssl.conf
根据需要编辑以下属性,其中证书文件位置是必须要正确指定的:
#443为默认端口,可指定为其他端口
Listen 443
SSlRandomSeed startup builtin
#指定日志文件位置
ErrorLog logs/ssl_error_log
#指定日志等级
Loglevel warn
<VirtualHost *:443>
#指定域名 - 前面生成证书时填写的域名
ServerName localhost.localdomain
SSLEngine on
#指定证书文件位置
SSLCertificateFile /etc/pki/CA/certs/svn_server.crt
SSLCertificateKeyFile /etc/pki/CA/private/svn_server_1.key
</VirtualHost>
1.7 配置https请求
gedit /etc/httpd/conf/httpd.conf
在如下位置添加https请求:SSLRequireSSL
<Directory />
Options FollowSymLinks
AllowOverride None
#添加此行
SSLRequireSSL
</Directory>
1.8 重启验证
# 会提示输入证书密码,输入后即可成功启动
systemctl restart httpd.service
#查看https是否启动成功
netstat -ntpl|grep 443
#重启svn服务
pkill svnserve
svnserve -d -r /opt/svn/mathPhysics/
ps -ef|grep svnserve
在浏览器输入网址:https://ip地址:端口号/svn/svn目录/ 由于我们自签名的证书不受信任,此时会出现不安全标志,打开高级设置,为此添加信任即可访问。 我的输入网址:https://192.168.0.100/svn/mathPhysics/
二、异常处理
??如果以上操作后,访问仍然有异常,可以查看apach的error日志,根据日志记录情况进行处理。要找到自定义的日志文件位置, 1、请用文本编辑器打开 gedit /etc/httpd/conf/httpd.conf ,然后查找 ServerRoot,该参数显示了 Apache Web 服务器目录树的顶层,日志文件和配置都位于该目录树中。例如:
ServerRoot "/etc/httpd"
2、请用文本编辑器打开 gedit /etc/httpd/conf.d/ssl.conf ,然后,查找 ErrorLog 开头的行,该行指出了 Apache Web 服务器将错误日志写到了哪里去。注意,指定的位置是 ServerRoot 值的相对位置。例如:
ErrorLog logs/ssl_error_log
结合上面的两个指令,可以获得完整的ssl访问的错误日志路径,默认情况下该路径就是: /etc/httpd/logs/ssl_error_log 在全新安装的Apache中,这是一个到 /var/log/httpd/errorlog 的符号链接。
在实际情况中, ErrorLog 可能指向你 Linux 系统中的任意位置。
2、查看日志文件,定位问题:gedit 日志文件 ,如gedit /etc/httpd/logs/ssl_error_log
|