今天來講講Subversion的SSL連接。如果沒有SSL相關(guān)的基礎知識,請先自行參閱相關(guān)資料。
- 首先去http://hunter.campbus.com/ 下載包含openssl模塊的apache包,將解壓出來的mod_ssl.so 拷貝到Apache的安裝路徑下的modules目錄下,openssl.exe拷貝到bin目錄下,conf/ssl.conf拷貝到conf目錄下。
- 打開拷貝過來ssl.conf,將一下幾行加上#注釋掉 DocumentRoot "c:/apache/htdocs"
ServerName www.example.com:443
ServerAdmin you@example.com
ErrorLog logs/error_log
TransferLog logs/access_log - 把SSLCertificateFile conf/ssl.crt/server.crt改成SSLCertificateFile conf/ssl/my-server.cert
- 把SSLCertificateKeyFile conf/ssl.key/server.key改成SSLCertificateKeyFile conf/ssl/my-server.key
- 把SSLMutex file:logs/ssl_mutex改成SSLMutex default
- 刪除或者注釋這兩行<IfDefine SSL>和</IfDefine>
- 打開Apache的配置文件http.conf,把其中的#LoadModule ssl_module modules/mod_ssl.so這一行的注釋去掉
- 下載http://tud.at/programm/openssl.cnf 并保存到bin/openssl.cnf。注意windows會把這個文件顯示成一個撥號文件,實際上這是個文本文件,你可以用任何一個文本編輯器打開瀏覽一下這個文件的內(nèi)容。實際上這個文件是用來生成證書和公鑰的預配置文件。
- 在命令行下進入$\program files\apache group\apache2,輸入命令:
bin\openssl req -config bin\openssl.cnf -new -out my-server.csr
回答相關(guān)問題即可生成一個CSR,也就是一個待簽名的證書。本質(zhì)上說,CSR 就是一個在您的服務器上生成的證書,當您向第三方證書頒發(fā)機構(gòu)申請證書時,它用來驗證有關(guān)您的服務器的計算機特定信息。實際上,CSR 就是一條用公鑰/私鑰對加密的文本消息。如圖:
然后輸入命令:
bin\openssl rsa -in privkey.pem -out my-server.key
執(zhí)行成功會生成私匙,如圖:
接著輸入bin\openssl x509 -in my-server.csr -out my-server.cert -req -signkey my-server.key -days 4000
這樣會生成一個在4000天后過期的用剛剛生成的私匙簽名過的x509證書。
最后輸入bin\openssl x509 -in my-server.cert -out my-server.der.crt -outform DER
這一步是生成了DER格式的證書,對于那些不能識別PEM格式證書的程序,可以使用這種證書。如圖:
最后把在$\Apache Group\Apache2目錄下生成的my-server.der.crt, my-server.csr, my-server.key, .rnd, privkey.pem, my-server.cert6個文件復制到conf/ssl下,如果ssl這個目錄不存在,請先新建這個目錄。Ok,大功告成,請在瀏覽器地址欄輸入https://youserver/svn/TestRepository/,看到了什么?呵呵,是不是比較有成就感呢?看看我自己生成的證書:
然后是證書的詳細信息:
注意:以上3和4步驟可以不更改,改不改完全都是個人喜好,如果不改,那么在第9個步驟里面相關(guān)的命令需要做相應的修改。另外,設置了SSL加密連接以后,通過https://youserver/svn 不會再顯示所有的repository列表了,而是顯示沒有權(quán)限訪問。而通過http://youserver/svn訪問就可以。我懷疑是昨天寫的那個php腳本有些問題,沒有使用相關(guān)的SSL協(xié)議訪問相關(guān)路徑,如果有時間我會考慮使用python再次實現(xiàn)。不知道我想的對不對,哪位大俠指教一下?
注意:IIS和Apache的SSL連接會有沖突,具體表現(xiàn)在它們都會嘗試使用443作為https協(xié)議的端口,我在MS的網(wǎng)站上找到了一篇KB文章,說是改注冊表可以關(guān)閉ssl服務,我試了一下,似乎不行,在IIS的控制面板里面更改SSL端口選項是灰色不可選,哪位有好的辦法?