leejd:
FreeBSD上安装Trac+SVN+Apache+SSL
[阅读: 1056] 2008-04-23 09:27:43
ZT【http://hi.baidu.com/h2000r/blog/item/5ea239fa50f7da8d9e514680.html】
公司要求搭建一个项目开发管理平台,要求有版本控制和Bug追踪。由于整个平台是放在一台托管的服务起上的所以,要求使用SSL加密。Bug追踪使用的是 Trac,版本控制用的是SVN,SSL用的是OpenSSL,为了能够用Web登录还使用了Apache服务器。各软件的版本如下:
Trac 0.96
SVN 1.3.2
Apche 2.2
OpenSSL 0.97
一.安装软件:
1.安装OpenSSL
#cd /usr/ports/security/openssl
#make install clean
2.安装Apache
由于要通过Web访问SVN所以要加载mod_dav模块,所以在安装apche的时候要添加一些参数
# cd /usr/ports/devel/subversion
# make -DWITH_SVNSERVE_WRAPPER -DWITH_MOD_DAV_SVN -DWITH_APACHE2_APR install clean
如果Apache在使用过程中出现错误,参见后面的Apache错误处理解决。
3.安装SVN
同样由于要通过Web访问SVN所以要安装mod_dav_svn等模块,具体的安装命令如下:
# cd /usr/ports/devel/subversion
# make -DWITH_SVNSERVE_WRAPPER -DWITH_MOD_DAV_SVN -DWITH_APACHE2_APR install clean
4.安装Trac
安装命令
#cd /usr/ports/www/trac
#make install clean
这样就安装好了以上软件。
二. 配置
1.首先创建一个SVN仓库:
#svnadmin create svn-repository-path
2.创建Trac项目
#trac-admin trac-project-path initenv
创建项目的时候要填一些信息,其中项目名称 和SVN repository需要填写其他默认就可以了,SVN repository填写svn-repository-path。这些设置也可也直接在trac-project- path/conf/trac.ini配置文件中改
创建好了项目以后以后你就可以运行Trac
#tracd --port=8000 trac-project-path
然后打开浏览器输入:http://your-site:8000/trac就可以查看了
3.配置Trac作为CGI
详细的配置介绍见:http://trac.edgewall.org/wiki/TracCgi
1).配置作为apache模块
在/usr/local/etc/apache22/Include中加入配置文件trac.conf,我的trac.conf如下
------------trac.conf--begin--------------------
Alias /trac/chrome/common /usr/local/share/trac/htdocs
<Directory "/usr/share/trac/htdocs">
Order allow,deny
Allow from all
</Directory>
ScriptAlias /trac /usr/share/trac/cgi-bin/trac.cgi
<Location "/trac">
SetEnv TRAC_ENV "trac-project-path"
</Location>
<Location "/trac/login">
#设置Trac用户验证通过htpasswd添加/etc/apache2/trac.passwd和用户
AuthType Basic
AuthName "Trac"
AuthUserFile /usr/local/etc/apache22/trac.passwd
Require valid-user
</Location>
------------trac.conf--end----------------------
一个例子
---------------other example--------------------
#设定目录权限,如果不设置这个,你会得到没有访问权限的错误,很烦人哟
<Directory "/usr/share/trac/htdocs">
Order allow,deny
Allow from all
</Directory>
#以后你就可以输入 http://your_site/trac来访问,执行的就是这个trac.cgi
ScriptAlias /trac /usr/share/trac/cgi-bin/trac.cgi
### Trac need to know where the database is located
<Location "/trac">
# SetEnv TRAC_ENV "/work/trac-env/projectA" #如果只显示一个工程,用这个
SetEnv TRAC_ENV_PARENT_DIR "/work/trac-env" #显示多个工程
</Location>
### You need this to allow users to authenticate
<Location "/trac/login">
AuthType Basic
AuthName "trac"
AuthUserFile /work/trac-env/trac.htpasswd #使用htpasswd生成的密码文件
Require valid-user
</location>
ScriptAlias /trac/projectA /usr/share/trac/cgi-bin/trac.cgi
### Trac need to know where the database is located
<Location "/trac/projectA">
SetEnv TRAC_ENV "/work/trac-env/projectA" #如果只显示一个工程,用这个
# SetEnv TRAC_ENV_PARENT_DIR "/work/trac-env" #显示多个工程
</Location>
### You need this to allow users to authenticate
<Location "/trac/project/Alogin">
AuthType Basic
AuthName "trac"
AuthUserFile /work/trac-env/projectA/trac.htpasswd #使用htpasswd生成的密码文件
Require valid-user
</location>
ScriptAlias /trac/projectB /usr/share/trac/cgi-bin/trac.cgi
### Trac need to know where the database is located
<Location "/trac/projectA">
SetEnv TRAC_ENV "/work/trac-env/projectB" #如果只显示一个工程,用这个
# SetEnv TRAC_ENV_PARENT_DIR "/work/trac-env" #显示多个工程
</Location>
### You need this to allow users to authenticate
<Location "/trac/project/Alogin">
AuthType Basic
AuthName "trac"
AuthUserFile /work/trac-env/projectB/trac.htpasswd
#使用htpasswd生成的密码文件
Require valid-user
</location>
-------------------------------------------------
添加了trac.conf文件后重启apache打开浏览器输入:
http://your-site/trac就可一登录了,可以不用输入端口号。
apache启动,停止:apachectl start | stop | restart
2).添加Trac用户验证
通过htpasswd添加用户到/ usr/local/etc/apache22/trac.passwd
htpasswd -c /etc/apache2/trac.passwd tony
tony为用户名
其中第一次创建用户时使用参数 -c 创建加密文件trac.conf以后添加用户就不用参数: -c了直接:
htpasswd /etc/apache2/trac.passwd lili就可以了
要修改密码则使用参数 -m
htpasswd -m /etc/apache2/trac.passwd tony
这样重启apache和Trac就可以进行登录验证了
trac重新同步:trac-admin trac-project-path resync
3).设置用户权限
使用trac-admin对Trac用户进行管理
trac-admin trac-project-path permission list [user] -- List permission rules
trac-admin trac-project-path permission add <user> <action> [action] [...] -- Add a new permission rule
trac-admin trac-project-path permission remove <user> <action> [action] [...] -- Remove permission rule
3.设置从Web浏览SVN
同配置Trac一样,在/usr/local/etc/apache22/Include添加一个svn.conf配置文件我的配置文件的内容如下:
----------------------svn.conf begin-------------------------------------
<Location />
DAV svn
SVNPath svn-repository-path
AuthType Basic
AuthName "svn.dirkye.net Svn repository"
AuthUserFile svn-auth-file-path
Require valid-user
</Location>
----------------------svn.conf end---------------------------------------
注意:此时应去掉apache配置文件/usr/local/etc/apache22/httpd.conf
LoadModule dav_module libexec/apache22/mod_dav.so
LoadModule dav_svn_module libexec/apache22/mod_dav_svn.so
LoadModule authz_svn_module libexec/apache22/mod_authz_svn.so
LoadModule dav_fs_module libexec/apache22/mod_dav_fs.so
以上语句的注释
这样重启apache就可以通过http://your-site/svn来登录SVN了。如果要SVN和Trac的用户一样直接把他们的认证文件AuthUserFile设为同一个就可以了。
4.设置OpenSSL
由于Apache集成了mod_ssl模块,所安装好了以后需要打开这个模块在/usr/local/etc/apache22/httpd.conf找到
Include etc/apache22/extra/httpd-ssl.conf
这一行去掉前面的注释就可以了。然后生成各种证书。
原文见:http://www.freebsdchina.org/forum/viewtopic.php?p=84415
---------------------------------------------------------------
第一步:先建立一个 CA 的证书,
首先为 CA 创建一个 RSA 私用密钥,
[S-1]
openssl genrsa -des3 -out ca.key 1024
系统提示输入 PEM pass phrase,也就是密码,输入后牢记它。
生成 ca.key 文件,将文件属性改为400,并放在安全的地方。
[S-2]
chmod 400 ca.key
你可以用下列命令查看它的内容,
[S-3]
openssl rsa -noout -text -in ca.key
利用 CA 的 RSA 密钥创建一个自签署的 CA 证书(X.509结构)
[S-4]
openssl req -new -x509 -days 3650 -key ca.key -out ca.crt
然后需要输入下列信息:
Country Name: cn 两个字母的国家代号
State or Province Name: An Hui 省份名称
Locality Name: Bengbu 城市名称
Organization Name: Family Network 公司名称
Organizational Unit Name: Home 部门名称
Common Name: Chen Yang 你的姓名
Email Address: sunstorm@263.net Email地址
生成 ca.crt 文件,将文件属性改为400,并放在安全的地方。
[S-5]
chmod 400 ca.crt
你可以用下列命令查看它的内容,
[S-6]
openssl x509 -noout -text -in ca.crt
第二步:下面要创建服务器证书签署请求,
首先为你的 Apache 创建一个 RSA 私用密钥:
[S-7]
openssl genrsa -des3 -out server.key 1024
这里也要设定pass phrase。
生成 server.key 文件,将文件属性改为400,并放在安全的地方。
[S-8]
chmod 400 server.key
你可以用下列命令查看它的内容,
[S-9]
openssl rsa -noout -text -in server.key
用 server.key 生成证书签署请求 CSR.
#不用密码·····
而且你可以为这个RSA私用密钥创建一个加密的PEM版本(不推荐),通过下列命令:
# openssl rsa -in server.key -out server.key.unsecure
[S-10]
openssl req -new -key server.key -out server.csr
这里也要输入一些信息,和[S-4]中的内容类似。
至于 'extra' attributes 不用输入。
“Common Name: Chen Yang 你的姓名”这条信息请你输入你的服务器的域名或者IP地址,
你可以查看 CSR 的细节
[S-11]
openssl req -noout -text -in server.csr
第三步:下面可以签署证书了,需要用到脚本 sign.sh(如果找不到见后面的“注意”)
[S-12]
./sign.sh server.csr
就可以得到server.crt。
将文件属性改为400,并放在安全的地方。
[S-13]
chmod 400 server.crt
删除CSR
[S-14]
rm server.csr
最后apache设置
如果你的apache编译参数prefix为/usr/local/apache,
那么拷贝server.crt 和 server.key 到 /usr/local/apache/conf
修改httpd.conf
将下面的参数改为:
SSLCertificateFILE /usr/local/apache/conf/server.crt
SSLCertificateKeyFile /usr/local/apache/conf/server.key
可以 apachectl startssl 试一下了
第四步:生成client端的个人证书
你需要生成一个客户端的证书,方法如下:
openssl pkcs12 -export -in server.crt -inkey server.key -out public.p12 -name "public"
openssl pkcs12 -in file.p12 -info -noout (查看.p12证书文件的内容)
在客户端安装证书的方法:
安装你在第一步生成的ca.crt文件,打开web浏览器,“工具”—“Internet选项”—“内容”—“证书”选择导入证书,然后按照提示一步一步完成安装。或者你双击证书文件按照提示一步一步安装证书。
然后安装你在第三步生成的server.p12文件,方法同上。
-----------------------------------------------------------------------------
注意:
1) 证书的制作所填写的信息其他都关系不大,只要注意生成根证书和服务器请求签证文件时的两次 Common Name 不能一样(理论上Common Name 应该是用户将会用来访问的完整域名字符串),否则会导致证书生成的时候出现如下错误:
error 18 at 0 depth lookup:self signed certificate
2)如果你的系统中没有sign.sh可以到mod_ssl的官方网站上下载一个mod_ssl包,里面有一个sign.sh脚本解压后拷出来就可以了。
5.Apache错误处理:
我在配置过程中,Apache经常出现错误提示,我把我解决错误的一些经历写下来:
1)如果在启动过程中出现如下错误:
apache2: Could not determine the server's fully qualified domain name, using 127.0.0.1 for ServerName
解决之道:
需要修改/usr/local/etc/apache2/httpd.conf在如果有ServerName句(大概在144行左右)则去掉前面的注释,若无则加上一行:
注释状态并且形式如下:
ServerName localhost
或者:
ServerName www.foo.com
或者修改
/etc/hosts
我的hosts内容如下:
-------------------hosts begin-----------------------------
127.0.0.1 localhost.mojiti localhost
218.246.21.18 trac.mojiti trac
----------------- -hosts end-------------------------------
2)如果错误提示如下:
httpd not running, trying to start
成为root用户再次重启即可。
2)如果出现如下错误提示:
You don't have permission to access /trac on this server.
解决办法:
查找httpd.conf中的
Deny from all
改为
Allow from all
总结:
按照上面的操作基本上就能配置成功。我在配置过程中遇到了一些问题在网上找了一些解决方法都在文中写了出来,希望可以给大家一些帮助让大家少走弯路。感谢那些把自己的类似的经历些出来给我以不少帮助的朋友。