Subversion安装配置维护,尽在我用Subversion - 我用Subversion编辑团队倾力打造
注意:本文档中心已转移至SVN知识库
注册 | 登陆 RSS 2.0 订阅


linux下apache+svn的ssl实现方法

« 上一篇 | 下一篇 »

作者: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参数,当然,如果系统找不到就要在命令行写全了。
  我的命令行是:

./configure --enable-dav --prefix=/usr/local/httpd-2.0.59 --enable-so --with-ssl --enable-ssl MPM=worker --enable-mod_jk


以上是前提,如果apache参数缺少,可以加上后重新编译。
  
  安装过程(主要就是两点):
  1、 制作证书并放到apache目录下,我是将server.key,server.crt放到/conf/ssl下,你也可以放到任何其他目录下。
   1.1制作证书有简单的工具,我选的就是这个,呵呵。
      1.1.1

      #wget http://www.openssl.org/contrib/ssl.ca-0.1.tar.gz
      --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)不一致即可.
      
       解压缩

#tar xvzf ssl.ca-0.1.tar.gz.


开始生成证书

#./new-root-ca.sh (生成根证书)
       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的证书:

 

# ./new-server-cert.sh server (这个证书的名字是server,当然,你也可以随便写)
       ......
       ......
       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这两个文件。
      
       必须签署一下才能使用的:

# ./sign-server-cert.sh server
       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(有点极端)

                      <IfModule mod_ssl.c>
                      Include conf/ssl.conf
                      </IfModule>
                     


1.1.3.3 从ssl.conf里cp出来如下参数,贴到httpd.conf的任何地方,不要加到别的段里

                              SSLEngine on
                              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 stop
#/usr/local/apache/bin/apachectl startssl


这时可以看看是否起来的

#netstat -na|grep LISTEN
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实现方法


Tags: linux, apache, subversion, ssl 编辑: pcplayer

« 上一篇 | 下一篇 »

发表评论

评论内容 (必填):