如果網頁伺服器和用戶端之間會傳輸敏感性資料 (例如信用卡資料),這時最好要提供帶驗證的安全加密連線。mod_ssl 會使用安全通訊端層 (Secure Sockets Layer, SSL) 及傳輸層安全性 (Transport Layer Security, TLS) 通訊協定,為用戶端和網頁伺服器之間的 HTTP 通訊提供強式加密。使用 SSL/TSL 時,網頁伺服器和用戶端之間就會建立私人連線。如此便可確保資料完整性,使用戶端和伺服器端可以彼此進行驗證。
為了完成這個目的,伺服器會在回覆任何 URL 要求之前,先傳送可證明伺服器有效身份之相關資訊的 SSL 憑證。如此即可確保該伺服器是此通訊的唯一正確端點。此外,該憑證會在用戶端和伺服器端建立加密連線,以便在沒有洩漏敏感、純文字內容的風險情況下傳輸資訊。
mod_ssl 本身不會實作 SSL/TSL 通訊協定,而是扮演 Apache 和 SSL 程式庫之間的介面。在 SUSE Linux Enterprise Server 中是使用 OpenSSL 程式庫。OpenSSL 會自動隨 Apache 完成安裝。
使用 mod_ssl 搭配 Apache 的最明顯特徵,就是 URL 的字首都會加上 https://,而不是 http://。
為了搭配使用 SSL/TSL 與網頁伺服器,您必須建立 SSL 憑證。網頁伺服器和用戶端在彼此驗證時要用到這項憑證,以便讓任一方可以清楚識別對方。為了確保憑證的完整性,其必須由每位使用者信任的一方加以簽章。
您可以建立下列三種類型的憑證:僅供測試使用的 虛擬
憑證、供已定義信任圈使用者使用的自我簽發憑證,以及由獨立、公開的憑證授權機構 (CA) 簽發的憑證。
憑證建立基本上可分為兩個步驟。首先產生憑證授權機構的私密金鑰,接著再使用該金鑰簽發伺服器憑證。
提示: 如需更多資訊
若要更進一步蓋識 SSL/TSL 的概念和定義,請參閱http://httpd.apache.org/docs/2.2/ssl/ssl_intro.html。
虛擬憑證
產生虛構憑證的步驟很簡單。您只要呼叫程序檔 /usr/bin/gensslcert,便可建立此類憑證,或是覆寫下列檔案:
/etc/apache2/ssl.crt/ca.crt
/etc/apache2/ssl.crt/server.crt
/etc/apache2/ssl.key/server.key
/etc/apache2/ssl.csr/server.csr
ca.crt 的複製本也會放在 /srv/www/htdocs/CA.crt 提供下載。
重要: 虛構憑證絕對不可用於生產環境系統。這類憑證只能用於測試目的。
如果您要設定供內部網路 (Intranet)、或已定義信任圈使用者使用的安全網頁伺服器,透過您本身憑證授權機構 (CA) 簽發憑證就可有效符合此時的憑證需求。
自我簽署憑證的建立程序分為互動的九個步驟。請切換至目錄 /usr/share/doc/packages/apache2,並執行下列指令 ./mkcert.sh make --no-print-directory /usr/bin/openssl /usr/sbin/ custom。請勿嘗試從這個目錄外面執行這個指令。這個程式會提供一系列提示訊息,其中有部分提示需要使用者輸入。
決定憑證所使用的簽章演算法
選擇 RSA (R,此為預設選項),因為有些早期瀏覽器無法使用 DSA。
產生 CA 的 RSA 私密金鑰 (1024 位元)
這時不須進行任何互動。
產生 CA 的 X.509 憑證簽發要求
在此建立 CA 的可辨識名稱。這時系統會要求您回答一些問題,例如國家/地區名或組織名稱。請輸入有效資料,因為您在此輸入的每項資料將來都會顯示在憑證中。您不需要回答每個問題。如果有不適用的問題或是您希望保留空白,請使用 .
。通用名稱是指 CA 本身的名稱 — 請選擇明顯的名稱,例如 My company CA。
產生 CA 本身簽發的 X.509 憑證
選擇憑證版本 3 (預設選項)。
產生 SERVER 的 RSA 私密金鑰 (1024 位元)
這時不須進行任何互動。
產生 SERVER 的 X.509 憑證簽發要求
在此建立伺服器金鑰的可識別名稱。這時要回答的問題與建立 CA 可識別名稱時回答的問題幾乎一樣。在此輸入的資料會套用到網頁伺服器,因此不需要和 CA 資料完全相同 (例如,伺服器可能會出淚任意位置)。
重要: 選取通用名稱
您在此輸入的通用名稱必須是安全伺服器的完全合格主機名稱 (例如,www.example.com)。否則瀏覽器會在存取網頁伺服器時發出警告,表示憑證與伺服器不相符。
產生本身 CA 簽發的 X.509 憑證
選擇憑證版本 3 (預設選項)。
使用密碼片語為 CA 的 RSA 私密金鑰加密,以提高安全性
我們強烈建議您使用密碼來加密 CA 的私密金鑰,請選擇 Y 來輸入密碼。
使用密碼片語為 SERVER 的 RSA 私密金鑰加密,以提高安全性
若使用密碼為伺服器金鑰加密,則每當要啟動網頁伺服器時就必須輸入這個密碼。如此一來就很難自動在開機時啟動伺服器或是重新啟動網頁伺服器。因此,使用者通常會在回答這個問題時選擇 N。請注意金鑰在沒有使用密碼加密時是不受保護狀態,同時請確定只有經授權人員可以存取該金鑰。
重要: 加密伺服器金鑰
如果您選擇使用密碼為伺服器金鑰進行加密,請為存放在 /etc/sysconfig/apache2 的 APACHE_TIMEOUT 提高設定值。否則,您在嘗試啟動伺服器之前可能來不及輸入密碼片語,但是伺服器早就啟動失敗而停止。
程序檔的結果頁面會出現憑證清單,以及其所產生的金鑰。不同於程序檔輸出的結果,這些檔案並不是產生到本地目錄 conf,而是產生到 /etc/apache2/ 下面的正確目錄。
最後一個步驟就是從 /etc/apache2/ssl.crt/ca.crt 將 CA 憑證檔案複製到使用者可存取的位置,以便使用者將該檔案納入其網頁瀏覽器已知和信任的 CA 清單中。否則,瀏覽器會報告該憑證是由不明授權機構所簽發。這類憑證的有效期限是一年。
重要: 自行簽署的證書
僅在供認識您、且信任您為認證機構之使用者存取的網頁伺服器上,方可使用自我簽署憑證。我們不建議您在例如公開商店等場所中使用這類憑證。
目前有一些可簽署憑證的官方認證機構。這類憑證是由值得信任的協力廠商所簽署,因此可以完全信任。對外運作的安全網頁伺服器通常已取得官方簽發憑證。
最有名的官方 CA 是 Thawte (http://www.thawte.com/) 或 Verisign (http://www.verisign.com)。這些 CA 和其他 CA 都已經編譯到所有瀏覽器中,所以瀏覽器會自動接受這些憑證授權機構簽發的憑證。
在要求官方簽署的憑證時,您並不需要向 CA 傳送憑證,而只需傳送憑證簽署要求 (Certificate Signing Request, CSR)。若要建立 CSR,請呼叫程序檔 /usr/share/ssl/misc/CA.sh -newreq。
首先,程序檔會要求提供該 CSR 進行加密時所使用的密碼。接著,要求您輸入可識別名稱。這時系統會要求您回答一些問題,例如國家/地區名或組織名稱。請輸入有效資料 — 您在此輸入的每項資料將來都會顯示在憑證中並用於檢查。您不需要回答每個問題。如果有不適用的問題或是您希望保留空白,請使用 .
。通用名稱是指 CA 本身的名稱 — 請選擇明顯的名稱,例如 My company CA。最後,必須輸入挑戰密碼和替用的公司名稱。
從您呼叫程序檔的目錄中找出此 CSR。這個檔案名稱是 newreq.pem。
在網頁伺服器端上,SSL 和 TLS 要求的預設連接埠是 443。同時有傾聽連接埠 80 的「一般」Apache 和傾聽連接埠 443 之已啟用 SSL/TLS 的 Apache,並不會產生衝突。事實上,HTTP 和 HTTPS 可以執行相同的 Apache 例項。通常這時會使用不同的虛擬主機,將連接埠 80 和連接埠 443 的要求分派到不同的虛擬伺服器。
重要: 防火牆組態
請不要忘記為連接埠 443 上已啟用 SSL 的 Apache 開啟防火牆。您可以依據第 8.4.1 節「Configuring the Firewall with YaST」所述方式,透過 YaST 完成這個動作。
若要使用 SSL,必須在全域伺服器組態中將其啟用。請在編輯器中開啟 /etc/sysconfig/apache2,並搜尋 APACHE_MODULES。若模組清單中沒有出現此模組,請將「SSL」新增到清單中 (mod_ssl 是預設啟用的模組)。然後,搜尋 APACHE_SERVER_FLAGS 並新增「SSL」。如果已經選擇使用密碼來加密伺服器憑證,您就必須同時提高 APACHE_TIMEOUT 的設定值,以便您在啟動 Apache 時有足夠時間輸入該密碼片語。請重新啟動伺服器來確保這些變更生效。只是重新載入並無法保證變更生效。
虛擬主機組態目錄包含了樣板 /etc/apache2/vhosts.d/vhost-ssl.template 和 SSL 特定指示詞 (將提供詳細文件說明)。如需一般虛擬主機組態的詳細資訊,請參閱虛擬主機組態。
若要開始,請將樣板複製到 /etc/apache2/vhosts.d/mySSL-host.conf 並進行編輯。充分調整下列指示詞的值︰
DocumentRoot
ServerName
ServerAdmin
ErrorLog
TransferLog
重要: 以名稱為基礎的虛擬主機和 SSL
在只有一個 IP 位址的伺服器上,不可能同時執行多部已啟用 SSL 的虛擬主機。連接這類設定的使用者,將會在每次造訪該 URL 時收到警告訊息,告知憑證與伺服器名稱不符。每個啟用 SSL 的網域都需要使用不同的 IP 位址或連接埠,才能根據有效的 SSL 憑證來完成通訊。