作者:our420
环境:Gentoo 2.6.19.2,apache 2.0.59,svn 1.4.3,php 5.2.0,ZendOptimizer 3.2.2
前提:apache+svn已经配置好,并能正确访问。如果没配置好请参见论坛里的其他帖子。
需要注意的几点:
1、本机要装openssl,各个linux版本安装方法不一样,如果喜欢手动,可以www.openssl.org看看。
2、apache安装的时候要有--with-ssl和--enable-ssl参数,如果你是安装linux时候选中的或者通过系统自带的包管理工具(例如:apt,rpm,emerge)可以不用指定--with-ssl后面的=/xxx/xxx参数,当然,如果系统找不到就要在命令行写全了。
我的命令行是:
以上是前提,如果apache参数缺少,可以加上后重新编译。
安装过程(主要就是两点):
1、 制作证书并放到apache目录下,我是将server.key,server.crt放到/conf/ssl下,你也可以放到任何其他目录下。
1.1制作证书有简单的工具,我选的就是这个,呵呵。
1.1.1
--15:55:50-- http://www.openssl.org/contrib/ssl.ca-0.1.tar.gz
=> `ssl.ca-0.1.tar.gz.1''
Resolving www.openssl.org... 195.30.6.166
Connecting to www.openssl.org|195.30.6.166|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 13,922 (14K) [application/x-tar]
100%[========================================================================================>] 13,922 20.48K/s
15:55:55 (20.46 KB/s) - `ssl.ca-0.1.tar.gz.1'' saved [13922/13922]
1.1.2按照以下顺序生成证书,其他都随便填,唯一注意的是Common Name段的名字(即例子中的name1和name2)不一致即可.
解压缩
开始生成证书
No Root CA key round. Generating one
Generating RSA private key, 1024 bit long modulus
...........................++++++
....++++++
e is 65537 (0x10001)
Enter pass phrase for ca.key: passa(输入一个密码,最少4位)
Verifying - Enter pass phrase for ca.key:passa (再输入一次密码,跟刚才的一样)
Self-sign the root CA... (签署根证书)
Enter pass phrase for ca.key: (输入刚刚设置的密码)
........
........ (下面开始签署)
Country Name (2 letter code) [MY]:CN
State or Province Name (full name) [Perak]:China
Locality Name (eg, city) [Sitiawan]:Tianjin
Organization Name (eg, company) [My Directory Sdn Bhd]:our420
Organizational Unit Name (eg, section) [Certification Services Division]:software
Common Name (eg, MD Root CA) []:name1
Email Address []:our420#gmail.com
生成了ca.key和ca.crt两个文件,下面还要为服务器生成一个证书,也就是要部署到apache的证书:
......
......
Country Name (2 letter code) [MY]:CN
State or Province Name (full name) [Perak]: China
Locality Name (eg, city) [Sitiawan]: Tianjin
Organization Name (eg, company) [My Directory Sdn Bhd]:our420
Organizational Unit Name (eg, section) [Secure Web Server]:software
Common Name (eg, [url]www.domain.com)[/url] []:name2
Email Address []:our420#gmail.com
这样就生成了server.csr和server.key这两个文件。
必须签署一下才能使用的:
CA signing: server.csr -> server.crt:
Using configuration from ca.config
Enter pass phrase for ./ca.key: (输入上面设置的根证书密码,就是蓝色的[color=Blue][b]passa[/b][/color])
Check that the request matches the signature
Signature ok
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
CA verifying: server.crt <-> CA cert
server.crt: OK
1.1.3 证书生成完毕,整个工程已经过半,剩下的就是改httpd.conf了。
1.1.3.1 修改Listen 80为Listen 443,即监听端口改为ssl标准的443(此点觉得不太恰当,找到好的修改方法我会换的)。
1.1.3.2 将以下段落注释掉,即前面加#,为了让系统不再读取ssl.conf(有点极端)
Include conf/ssl.conf
</IfModule>
1.1.3.3 从ssl.conf里cp出来如下参数,贴到httpd.conf的任何地方,不要加到别的段里
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
SSLCertificateFile /usr/local/httpd-2.0.59/conf/ssl/server.crt
SSLCertificateKeyFile /usr/local/httpd-2.0.59/conf/ssl/server.key
server.crt和server.key路径一定和你实际存放的位置相同哦。
1.1.3.4 修改<Location /svn>段,添加SSLRequireSSL参数。
就像这样:
<Location /svn>
......
SSLRequireSSL
......
</Location>[/code]
1.1.3.5 使用工具的方法完成。
1.2 还有另一种方法,就是使用openssl命令行添加的,可以参见dennis85的帖子
http://blog.csdn.net/dennis85/archive/2006/08/11/1050900.aspx中设置OpenSSL段,其实这两种方法大同小异,一个是命令行,一个是脚本而已。
2.1 既然都完了,测试一下
#/usr/local/apache/bin/apachectl startssl
这时可以看看是否起来的
tcp 0 0 0.0.0.0:1314 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:8021 0.0.0.0:* LISTEN
tcp 0 0 :::22 :::* LISTEN
tcp 0 0 :::443 :::* LISTEN
可见443端口已经在监听了,敲入https://127.0.0.1/svn试试,呵呵。
转帖请包含作者等版权信息、并注明来自:我用Subversion - linux下apache+svn的ssl实现方法



