Linux+Svn+apache2+ssl配置

Svn在使用apache访问的时候,登录的用户名密码是以明文传输的,因此要给传输加密,选择了用openssl来制作CA自签证书。来加密与服务端的传输。
一、环境:
目前已经正确配置svnapache,已经能用apache和客户端正常访问svn,目前只需将apachessl配置成功即可。确保系统中安装了openssl
二、理解:
配置ssl需要服务器要有证书支持,这时有两种选择:一是从互联网的某台CA服务器上申请证书。二是在linux里配置自己的CA服务器自己给自己签发证书,这时就需要openssl这个工具。
SSLSecure Socket Layer(安全套接层协议)的缩写,可以在Internet上提供秘密性传输。Netscape公司在推出第一个Web浏览器的同时,提出了SSL协议标准,目前已有3.0版本。SSL采用公开密钥技术。其目标是保证两个应用间通信的保密性和可靠性,可在服务器端和用户端同时实现支持。
OpenSSL整个软件包大概可以分成三个主要的功能部分:密码算法库、SSL协议库以及应用程序。OpenSSL的目录结构自然也是围绕这三个功能部分进行规划的。
因此,创建CA以及签发证书的过程如下:
1.       创建根CA以及根CA证书
这包括:创建根CA私钥(ca.key->创建根证书(ca.crt->×××权限为最小
2.       创建服务器证书
包括:创建apache服务器私钥(server.key->CA签发服务器证书(server.crt
3.       需要的话可以创建客户端证书
三、配置步骤如下:
注意证书的文件夹要统一放在一个地方,比如可以全部apache/conf/crt里面。因为下面的命令要直接用到key文件和csr文件,因此在证书制作过程中全部放在一起,等生成完毕再将其放在不同的文件夹,然后在配置文件中写入相应的目录即可。
 
1.        先建立一个 CA 的证书
注意红色字体为要求输入内容,绿色为注释。
首先为 CA 创建一个 RSA 私用密钥,
#openssl genrsa -des3 -out ca.key 1024
系统提示输入 PEM pass phrase,也就是密码,输入后牢记它。
生成 ca.key 文件,将文件属性改为400,并放在安全的地方。
#chmod 400 ca.key
你可以用下列命令查看它的内容,
# openssl rsa -noout -text -in ca.key
利用 CA RSA 密钥创建一个自签署的 CA 证书(X.509结构)
#openssl req -new -x509 -days 3650 -key ca.key -out ca.crt
创建时需要输入下列证书信息:  
Country Name: CN两个字母的国家代号
State or Province Name: ** 省份名称
Locality Name: **城市名称
Organization Name: **公司名称
Organizational Unit Name: ** 部门名称
Common Name** 公用名
Email Address: ** 地址
生成 ca.crt 文件,将文件属性改为400,并放在安全的地方。
#chmod 400 ca.crt
你可以用下列命令查看它的内容,
#openssl x509 -noout -text -in ca.crt
 
用下面的命令也可以生成没有密码保护的CA密钥和证书文件:
#openssl req -new -x509 -out ca.crt -keyout ca.key
想给CA密钥加密码保护可以:
#openssl res -des3 -in ca.key -out ca.key.new
#mv ca.key.new ca.key
 
2.下面要创建服务器证书签署请求,
首先为你的 Apache 创建一个 RSA 私用密钥:
#openssl genrsa -des3 -out server.key 1024
这里也要设定pass phrase
生成 server.key 文件,将文件属性改为400,并放在安全的地方。
#chmod 400 server.key
你可以用下列命令查看它的内容,
#openssl rsa -noout -text -in server.key
server.key 生成证书签署请求 CSR.
#openssl req -new -key server.key -out server.csr
这里也要输入一些证书信息,和生成ca.crt的信息类似
至于 'extra' attributes 不用输入。
Common Name: Chen Yang 你的姓名”这条信息请你输入你的服务器的域名或者IP地址,
你可以查看 CSR 的细节
#openssl req -noout -text -in server.csr
 
3.下面签署证书
#openssl x509 -req -days 3650 -in server.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out server.crt
 
之后,便得到ca.key ca.crt server.key server.csr server.crt这几个私钥以及证书文件将他们归类放好。
4.接下来配置httpd.conf、和http-ssl.conf文档。
首先在htpd.conf里编辑。
Listen 端口号 一行注释掉。
取消Include /opt/apache/conf/extra/httpd-ssl.conf前的注释,打开此选项。
svn的配置中加入SSLRequireSSL这行。如下:
<Location /svn>
    里面内容省略
    SSLRequireSSL
</Location>
然后编辑apache/conf/ extra/httpd-ssl.conf 文档。
Listen 端口 选项改为
Listen ip地址:443 的形式
Listen 127.0.0.1:443
开启以下:
SSLPassPhraseDialog  builtin
SSLEngine on
 
修改以下路径,将证书文件加载进来:
其中星号为你的真实路径,比如我的证书路径是/opt/apache/conf/ssl.crt/
SSLCertificateFile "/opt/apache/conf/ssl.crt/server.crt "
SSLCertificateKeyFile "/opt/apache/conf/ssl.crt/server.key"
SSLCACertificatePath "/opt/apache/conf/ssl.crt/" //注意此处是根证书的存放路径
可见,我将所有证书放在了一个文件夹内,即ssl.crt内。注意事前新建此文件夹。
其他默认即可。
 
这时已经完成了apachessl配置,在浏览器中访问https://ip/svn地址就能访问svn了。之间的传输已经被加密。如果需要指定客户端来访问svn的话,那就要制作客户端证书,然后将证书转换为浏览器可用的格式,导入浏览器就ok了。
 
 
参考:
证书制作过程中用到了openssl的语法,这里介绍openssl的参数意思。
 
openssl genrsa -des3 -out ca.key 1024
genrsa命令生成新的RSA私匙,推荐的私匙长度为1024位,不建议低于该值或者高于2048位。
缺省情况下私匙不被加密,但是可用DES3DES或者IDEA加密。
 
openssl req -new -x509 -days 3650 -key ca.key -out ca.crt
 
本指令用来创建和处理PKCS#10格式的证书
x509 
     option将产生自签名的证书. 一般用来错测试用,或者自己玩下做个Root CA.证书的扩展项在 config文件里面指定
-days n 
    如果-509set, 那么这个option的参数指定我们自己的CA给人家签证书的有效期.缺省是30. 
-text 
    CSR文件里的内容以可读方式打印出来 
-noout 
    不要打印CSR文件的编码版本信息.