本篇文章內容已過時,只剩下考古的作用。
新資訊請參考:Apache 從 2.2.12 開始支援 SNI
以往用 SSL + virtual host + apache 一直都有一個問題,
就是無法使用 name-based virtual host,
只能用 IP-based 然後從 port 去跳,
最近因為買了 tinlans.org 這個 domain,
也開始有機會認真的玩起 virtual host,
於是就 Google 查了一下...
查到的解法其實還不少,
比起 N 年前只能眼巴巴的望著明顯在擺爛的 apache manual 狂罵髒話要好得多了,
解法裡的 mod_gnutls 法是我比較滿意的一招,
比較可惜的是 FreeBSD 的 ports 並沒有收,
不過自己安裝其實也沒什麼難度,
就是連小學生都知道的 configure, make, and make install 三部曲,
相依套件看一下 mod_gnutls 的官網就知道要裝哪些了。
裝好以後去 apache22/httpd.conf 把 mod_gnutls 載入:
1 |
LoadModule gnutls_module libexec/apache22/mod_gnutls.so |
然後做一些基本設定 (可以直接設在 apache22/extra/httpd-vhosts.conf,要分檔也行):
1 2 3 4 5 6 7 8 9 |
NameVirtualHost *:443 Listen 0.0.0.0:443 ... #這是一個檔案,把 /var/db/apachessl 做出來啟動 apache 後就會自動產生,目錄權限要記得設對 GnuTLSCache dbm "/var/db/apachessl/ssldb" GnuTLSCacheTimeout 300 ... AddType application/x-x509-ca-cert .crt AddType application/x-pkcs7-crl .crl |
原本的 apache22/extra/httpd-ssl.conf 可以整個廢掉不用,
裡面那些 SSL 相關的選項設下去也沒意義。
再來就是照平常那樣設定 virtual host 就可以了,
要產生更多的 virtual host 就照這個範本一直加就行 (不要問我在 IE7 上為什麼縮排看起來沒對準,去問 IE7 的作者):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
<VirtualHost *:443> ServerAdmin 管理者的 E-mail adddress DocumentRoot "要當成網站根目錄的系統路徑" ServerName 英文網址:443 # 下面這兩行隨便怎麼寫,要學下面這樣做的話記得先開目錄設權限 ErrorLog "/var/log/www/英文網址/ssl-error.log" CustomLog "/var/log/www/英文網址/ssl-access.log" combined # 這幾行才是重點,apache 預設的 SSLxxxxx 選項設到死也沒用 GnuTLSEnable on GNUTLSExportCertificates on GnuTLSPriorities NORMAL GnuTLSCertificateFile 伺服器憑證路徑 GnuTLSKeyFile 伺服器的 private key 路徑 # 裡面要怎麼設,要設多安全看自己高興 <Directory "要當成網站根目錄的系統路徑"> Options Indexes FollowSymLinks MultiViews Includes AllowOverride All Order allow,deny Allow from all </Directory> </VirtualHost> |
大致上就是這樣,
要是啟動 apache 時看到什麼 port 443 是跑 non-SSL 的可以直接忽略,
反正還是會透過 mod_gnutls 這一層做加密就是了,
有沒有真的做到加密傳輸可以直接在 browser 上驗證;
選項的名稱其實會跟著 mod_gnutls 的版本變動,
上面的設定是給目前的 stable version 0.4.3 用的,
其實相關範例都會寫在原始碼根目錄的 README 裡,
請勿盲目照抄這篇。
如果是在搞非常 critical 的網站最好不要衝得太快,
mod_gnutls 目前還在實驗階段,
而且支援的 browser 其實涵蓋率並不太高,
可以參考看看 wikipedia 的支援清單;
IE7 就我所知和 wiki 說的一樣在 XP 下沒有支援 SNI,
一定要是 Vista 才會支援,
Firefox 3 的話我測試的時候是覺得沒有很穩定,
同樣是 Vista + Firefox 3 的組合,
在我的 PC 上可以正常運作但是在 NB 上就不行 (差別只在 NB 升 Firefox 3 時沒有先移除 Firefox 2),
Gentoo 上的 Firefox 2 確定是可以 (我目前手邊沒有 windows 的 Firefox 2),
FreeBSD 上的 Firefox 3 目前也確定是正常,
至於 KDE 內建的 Konqueror 目前確定連 KDE 4.1.1 附的都是不行,
一些文字模式的 browser 像是 lynx 也是不用想了;
其實不支援也不會有什麼大不了的事情發生,
頂多就是抓到 default site 的憑證然後彈出伺服器名稱與憑證不符警告罷了,
看上去就類似這樣: