Apache SSL Subversion
23/Aug 2008
剛剛把 KD server 上的 apache 弄出 ssl 了
之前其實也有試著弄出 ssl
只不過之前在網路上找到的文章都只是針對非 vhost 的 apache
想說應該是一步一步慢慢解決
結果總是弄不好
今天想到說應該要找看看能不能一次解決的
結果在 Gentoo Wiki Apache_Modules_mod_ssl
這篇找到了基本的設定
另外有一個 HOWTO SSL Enabled, Name Based Virtual Hosts with Apache
這篇就是在解決我的問題
不過我照他的方式弄了之後
感覺 SSL 有起來
不過就是連不上
Apache Log 上有這樣的訊息
"\x80O\x01\x03" 200 1953
又搞了半天才發現是之前設定的東西忘了清掉
Apache 又呆呆的不告訴我一下…T_T
上面那個東西的原因就是 Apache 在 443 這個 ssl 的 protocol 輸出一般純文字
所有就連不起來了
之後又遇到
... public_html/.htaccess: Options not allowed here
又 Google 半天孤不出東西
最後才發現是 Gentoo 的 SSL_DEFAULT_VHOST 設定在搞鬼
把他弄掉之後就 OK 啦!!
總結一下 Apache SSL Subversion VirtualHost 的設定備忘
- /etc/make.conf
USE="sni" # 這是要啟用 SSL with vhost 的 flag
- /etc/conf.d/apache
把該死的 DEFAULT_VHOST 跟 SSL_DEFAULT_VHOST 刪掉
APACHE2_OPTS="-D SSL -D DAV"
建立 SSL 的驗證檔
- 變成 root 好做事
$ sudo su
- 到 apache 的目錄去
$ cd /etc/apache2/ssl/
- 產生 rsa key: 想更安全一點就把 1024 調大吧
$ openssl genrsa -out server.key 1024
$ openssl rsa -in server.key -out server.pem
- 這裡下一步要填一些資料
$ openssl req -new -key server.pem -out server.csr
- 產生驗證檔, 要是不加有效日期參數(-days 3650)的話, 預設是 30 天
$ openssl x509 -req -days 3650 -in server.csr -signkey server.pem -out server.crt
Apache 的 vhost 設定檔檔名自己取吧
編號越小越早被 Apache 讀進去
- /etc/apache/vhost.d/10_tsaikd.conf
Listen 80
Listen 443
NameVirtualHost *:80
NameVirtualHost *:443
ServerName 127.0.0.1 # 這個是讓 Apache 啟動變快的東西...
---
<VirtualHost *:80>
ServerAdmin "[email protected]"
ServerName "www.tsaikd.org"
DocumentRoot "/var/www/www.tsaikd.org/htdocs"
<Directory "/var/www/www.tsaikd.org/htdocs">
AllowOverride All
Order allow,deny
Allow from all
</Directory>
</VirtualHost *:80>
---
<VirtualHost *:443>
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/server.crt
SSLCertificateKeyFile /etc/apache2/ssl/server.key
---
ServerAdmin "[email protected]"
ServerName "www.tsaikd.org"
DocumentRoot "/var/www/www.tsaikd.org/htdocs"
<Directory "/var/www/www.tsaikd.org/htdocs">
AllowOverride All
Order allow,deny
Allow from all
</Directory>
</VirtualHost *:80>
- /etc/apache/vhost.d/20_svn.conf
LoadModule authz_svn_module modules/mod_authz_svn.so
<VirtualHost *:80>
ServerAdmin "[email protected]"
ServerName "svn.tsaikd.org"
DocumentRoot "/var/www/svn.tsaikd.org/htdocs"
<Directory "/var/www/svn.tsaikd.org/htdocs">
AllowOverride All
Order allow,deny
Allow from all
</Directory>
# 我的 svn 是放在 "/home/svn"
<Directory "/home/svn">
Options Indexes FollowSymLinks MultiViews
</Directory>
<Location /gentoo>
DAV svn
Options Indexes FollowSymLinks MultiViews
SVNParentPath /home/svn/gentoo
SVNListParentPath on
SetOutputFilter DEFLATE # 這個是設定用 gzip 方式輸出
AuthType Basic
AuthName "Subversion repository"
AuthUserFile /etc/apache2/htpasswd
<LimitExcept GET PROPFIND OPTIONS REPORT> # 要有帳密才能改 svn 的資料
Require user tsaikd
</LimitExcept>
</Location>
</VirtualHost *:80>
<VirtualHost *:443>
SSLEngine on
# 如果要用不同的驗證檔也可以
SSLCertificateFile /etc/apache2/ssl/server.crt
SSLCertificateKeyFile /etc/apache2/ssl/server.key
---
ServerAdmin "[email protected]"
ServerName "svn.tsaikd.org"
DocumentRoot "/var/www/svn.tsaikd.org/htdocs"
<Directory "/var/www/svn.tsaikd.org/htdocs">
AllowOverride All
Order allow,deny
Allow from all
</Directory>
# 我的 svn 是放在 "/home/svn"
<Directory "/home/svn">
Options Indexes FollowSymLinks MultiViews
</Directory>
<Location /gentoo>
DAV svn
Options Indexes FollowSymLinks MultiViews
SVNParentPath /home/svn/gentoo
SVNListParentPath on
SetOutputFilter DEFLATE # 這個是設定用 gzip 方式輸出
AuthType Basic
AuthName "Subversion repository"
AuthUserFile /etc/apache2/htpasswd
<LimitExcept GET PROPFIND OPTIONS REPORT> # 要有帳密才能改 svn 的資料
Require user tsaikd
</LimitExcept>
</Location>
</VirtualHost *:443>