基於ssl的SVN版本控制和複製

 

一、 服務器安裝配置
1.環境搭建
yum install –y openssl      //安裝openssl
安裝軟件會在/etc/pki/目錄下安裝ssl服務所需要的文件
生成根證書
cd /etc/pki/tls/misc/
./CA –newca   
回車創建新文件,輸入加密密碼(本密碼最後一步給自己簽名時候要用),並填寫證書信息:
Country Name (2 letter code) [AU]:CN
State or Province Name (full name) [Some-State]:Henan
Locality Name (eg, city) []:Zhengzhou
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Orgtec
Organizational Unit Name (eg, section) []:Orgtec
Common Name (eg, YOUR name) []:svn.orgtec.cn
Email Address []:[email protected]
Common Name填入主機全稱是比較好的選擇。這個名稱必須與通過瀏覽器訪問您網站的URL完全相同,否則用戶會發現您服務器證書的通用名與站點的名字不匹配,用戶就會懷疑您的證書的真實性。服務器證書和客戶證書的Common Name應該和CA一致。
本命令會在/etc/pki/CA/目錄中生成cacert.pem(根證書)和/etc/pki/CA/private/目錄中生成cakey.pem(根證書私鑰)
這樣就建好了一個CA服務器,有了一個根證書的私鑰cakey.pem和根證書cacert.pem現在就可以用cacert.pem給服務器證書或者客戶端證書籤名
 
服務器證書
a) 生成服務器私鑰
openssl genrsa -des3 -out server.key 1024
輸入加密密碼,用128位rsa算法生成密鑰,得到server.key文件。
b) 生成服務器證書請求(CSR)
openssl req -new -key server.key -out server.csr
CSR(Certificate Signing Request)是一個證書籤名請求,在申請證書之前,首先要在WEB服務器上生成CSR,並將其提交給CA認證中心,CA才能給您簽發SSL服務器證書。可以這樣認爲,CSR就是一個在您服務器上生成的證書。CSR主要包括以下內容:
Country Name (2 letter code) [AU]:CN
State or Province Name (full name) [Some-State]:Henan
Locality Name (eg, city) []:Zhengzhou
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Orgtec
Organizational Unit Name (eg, section) []:Orgtec
Common Name (eg, YOUR name) []:use.orgtec.cn
Email Address []:[email protected]
Please enter the following ‘extra’ attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Common Name填入主機名和CA一致。
本步驟生成的證書文件統一放在/etc/pki/tls/目錄下面
使用openssl提供的CA腳本給生成的服務器證書籤名
mv server.csr newreq.pem
/etc/pki/tls/misc/CA -sign
mv newcert.pem server.crt
 
簽名證書後,可通過如下命令可查看服務器證書的內容:
openssl x509 -noout -text -in server.crt
可通過如下命令驗證服務器證書:
openssl verify -CAfile ca.crt server.crt
 
3. 客戶證書
客戶證書是可選的。如果有客戶證書,就是雙向認證HTTPS,否則就是單向認證HTTPS。
a) 生成客戶私鑰
openssl genrsa -des3 -out client.key 1024
b) 生成客戶證書籤名請求
openssl req -new -key client.key -out client.csr
c) 生成客戶證書(使用CA證書籤名)
openssl ca -in client.csr -out client.crt
d) 證書轉換成瀏覽器認識的格式
openssl pkcs12 -export -clcerts -in client.crt -inkey client.key -out client.pfx
 
安裝apache
yum install –y zlib-devel openssl-devel
#tar -zxvf httpd-2.2.9.tar.gz
#cd httpd-2.2.9/srclib/apr
#./configure –with-prefix=/usr/local/apr && make && make install
#cd ../apr-util/
#./configure –prefix=/usr/local/apr-util –with-apr=/usr/local/apr && make &&make install
#cd ../..
#./configure  --prefix=/usr/local/apache2  --enable-dav  --enable-dav-fs  --enable-so --enable-ssl  --enable-mods-shared=all –with-apr=/usr/local/apr –with-apr-util=/usr/local/apr-util
#make
#make install
 
安裝neon
yum install –y libxml2-devel
不需要支持http協議可以略掉安裝,後面兩臺服務同步更新時候需要http協議支持
tar zxvf neon-0.29.6.tar.gz
cd neon-0.29.6
./configure --prefix=/usr/local/neon( --enable-shared ) --with-ssl --with-libs=/usr/lib/:/usr/lib/openssl:/usr/include/openssl
make && make install
 
安裝sqlite-autoconf
tar –zxv –f sqlite-autoconf-3071300.tar.gz
cd sqlite-autoconf
./configure –prefix=/usr/local/sqlite && make && make install
cd ..
 
安裝subversion
# tar zxvf subversion-1.7.6.tar.gz
# cd subversion-1.7.6
# ./configure --prefix=/usr/local/subversion --with-apxs=/usr/local/apache2/bin/apxs --with-apr=/usr/local/apr/ --with-apr-util=/usr/local/apr-util/ --with-neon=/usr/local/neon/ --with-ssl –with-sqlite=/usr/local/sqlite
make && makeinstall
svnadmin --version
 
創建一個 Subversion 版本庫:
# 創建文件夾
$ mkdir -p /svn/repos
# 運行創建版本庫的命令,指定數據存儲爲 FSFS,如果要指定爲 Berkeley DB,則將 fsfs 替換爲 bdb
$ svnadmin create --fs-type fsfs /svn/repos
查看生成的版本庫結構:
$ ls -l /svn/repos
創建項目臨時目錄,建議目錄結構如下:
mkdir -p /svn/tmp/project_exam/trunk
mkdir -p /svn/tmp/project_exam/tags
mkdir -p /svn/tmp/project_exam/branches
然後將項目文件複製到trunk下,如果是從CVS轉移過來的項目,用下面命令清理目錄
#find projectname/ -name CVS -exec rm -rf {} \;
 
導入source
[root@localhost /etc/svn/tmp/project_exam/trunk/exam_online] # /usr/local/subverion/bin/svn import -m "initial import" /svn/tmp/ file:///svn/repos/
-m 後面跟的是操作註釋 /svn/tmp是項目文件位置 file:///svn/repos是創建的軟件倉庫
檢查是否倒入成功
#svn list --verbose file:/// svn/repos/
如果成功你看到到你倒入的項目列表
 
9, 給倉庫授權
#chown -R apache.apache /svn/repos   
#chown –R apache.apache /usr/local/apache2/htdocs
注意:repos的所有者和apache的所有者必須是 apache用戶
要不然,做apache和版本庫無法同步
10,用Apache管理用戶權限:
首先需要創建一個用戶文件
htpasswd /svn/passwordfile username
如果 passwordfile 不存在,可以加上 -c 選項讓 htpasswd 新建一個。創建好的文件內容是用戶名加上密碼的 MD5 密文。
接下來修改 httpd.conf,在 Location 標籤中加入如下內容:
先修改版本庫的權限:
User daemon
Group daemon
//把上述內容改成:
User apache
Group apache
整合apache svn:
<Location /repos>
Dav svn
SVNPath /svn/repos
AuthType Basic
AuthName "svn repos"
AuthUserFile  /svn/passwordfile
# AuthzSVNAccessFile /svn/repos/conf/authz
require valid-user
SSLRequireSSL
</Location>
啓動apache 使用https://localhost/repos訪問
啓用Include conf/extra/httpd-ssl.conf
配置文件的內容:
SSLSessionCache None (或者默認)
SSLMutex default   (或者默認)
註釋掉DocumentRoot (或者改爲/svn/repos需要在主配置文件裏面開放權限) 和ServerName
修改SSLCertificateFile   和 SSLCertificateKeyFile指向服務器證書和密鑰
其他不要改
 
二、 利用svn 進行版本庫和web根目錄同步更新
#cp /svn/repos/hooks/post-commit.tmpl /svn/repos/hooks/post-commit
#vim /svn/repos/hooks/post-commit
註釋掉所有代碼 添加/usr/local/subversion/bin/svn update /usr/local/apache2/htdocs
#chmod +x /svn/repos/hooks/post-commit
以後任何客戶端更新代碼後 代碼即被同步到web根目錄下
三 、利用svnsync同步兩個svn版本庫
#mkdir /svn/repos2
#svnadmin create –fs-type fsfs /svn/respos2
#chown -R apache.apache /svn/repos2
#chmod 770 /svn/repos2
#chmod -R g+w /svn/repos2
apache配置文件中添加相應的內容
#cp /svn/repos2/hooks/pre_revprop_change.tmpl /svn/repos2/hooks/pre_revprop_change
#註釋掉所有的行,添加exit 0
初始化正確後會顯示Copied properties for revision 0
 
如果需要同步更新
編輯post-commit 添加svnsync sync --non-interactive http://192.168.2.128/repos --sync-username test --sync-password testqwertyu --source-username test --source-password testqwertyu     同時要注意權限 -sync-username和password爲對方主機svn的用戶密碼
本測試兩個版本庫在同一個服務器如果不在同一服務器可以用URL來進行地址替換 注意:subversion編譯時候要添加neno 增加
如果兩個版本庫要進行雙向同步更新   則在另外一臺服務器上進行相同的腳步配置即可
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章