在 CentOS 設置一個 SSL 加密的網頁伺服器
<<TableOfContents: execution failed [Argument "maxdepth" must be an integer value, not "[1]"] (see also the log)>>
這個指引會解釋如何設置一個支援 https 的網站。這個教程使用一個自我簽署的金鑰,因此它適用於個人網站或作測試用途。這個指引並未經修訂,因此請自行承擔風險,並進行備份!
1. 取得所需的軟件
你需要為一台 SSL 加密的網頁伺服器預備數件東西。視乎你的安裝,你可能並未安裝 OpenSSL 或 mod_ssl,Apache 連接到 OpenSSL 的介面。如果你有需要,請用 yum 來安裝它們。
yum install mod_ssl openssl
yum 會告訴你它們已經安裝,或者為你安裝它們。
2. 產生一張自我簽署的憑證
我們將會利用 OpenSSL 來產生一張自我簽署的憑證。如果你在一台生產用的伺服器上做這個動作,你應該會想從一個被信賴的憑證機構取得一條金鑰,但假若你只是用在一個私人網站上或作測試之用,自我簽署的憑證已經足夠了。要建立金鑰,你必須是 root 用戶,因此你可使用 su 變為 root 用戶,或在指令前面運用 sudo
# 產生私鑰 openssl genrsa -out ca.key 2048 # 產生 CSR openssl req -new -key ca.key -out ca.csr # 產生自我簽署的金鑰 openssl x509 -req -days 365 -in ca.csr -signkey ca.key -out ca.crt # 複製檔案至正確位置 cp ca.crt /etc/pki/tls/certs cp ca.key /etc/pki/tls/private/ca.key cp ca.csr /etc/pki/tls/private/ca.csr
|
警告:如果你採用 SELinux,請確保你複製這些檔案而不是遷移它們。否則 Apache 將會投訴關於違漏了的憑證檔,因為它無法讀取這些擁有錯誤 SELinux 脈絡的憑證檔。 |
假如你遷移了這些檔案而不是複製它們,你可以用以下的指命來矯正這些檔案的 SELinux 脈絡,因為 /etc/pki/* 的正確脈絡定義已包含在 SELinux 政策裡。
restorecon -RvF /etc/pki
接著我們須要更新 Apache SSL 的設定檔
vi +/SSLCertificateFile /etc/httpd/conf.d/ssl.conf
請修改路徑至金鑰檔案的儲存位置。如果你採用上面的方法,這會是
SSLCertificateFile /etc/pki/tls/certs/ca.crt
然後在再低數行的位置為憑證金鑰檔案設定正確路徑。如果你按照上面的指引,這會是:
SSLCertificateKeyFile /etc/pki/tls/private/ca.key
儲存及離開檔案,然後重新啟動 Apache
/etc/init.d/httpd restart
假若一切正常的話,你現在應該可以透過 https 連線到你的伺服器,並看見 CentOS 的預設頁面。由於憑證是自我簽署的,瀏覽器一般會徵詢你是否接納這個憑證。
3. 設置虛擬主機
一如你為 http 在連接埠 80 上設立 VirtualHost,你亦可為 https 在連接埠 443 上作樣似的設置。一個在連接埠 80 上的網站的典型 VirtualHost 有如下樣子
<VirtualHost *:80> <Directory /var/www/vhosts/yoursite.com/httpdocs> AllowOverride All </Directory> DocumentRoot /var/www/vhosts/yoursite.com/httpdocs ServerName yoursite.com </VirtualHost>
要在連接埠 443 上增加一個姊妹網站,你需要在你的檔案頂部加入下列內容
NameVirtualHost *:443
然後再加入一個類似如下的 VirtualHost 記錄:
<VirtualHost *:443> SSLEngine on SSLCertificateFile /etc/pki/tls/certs/ca.crt SSLCertificateKeyFile /etc/pki/tls/private/ca.key <Directory /var/www/vhosts/yoursite.com/httpsdocs> AllowOverride All </Directory> DocumentRoot /var/www/vhosts/yoursite.com/httpsdocs ServerName yoursite.com </VirtualHost>
利用這個指令重新啟動 Apache
/etc/init.d/httpd restart
4. 設置防火牆
你現在應該擁有一個以自我簽署憑證來支援 https 的網站。如果你未能連線,你或許需要在防火牆上打開連接埠。要這樣做,請更改你的 iptables 規則:
iptables -A INPUT -p tcp --dport 443 -j ACCEPT /sbin/service iptables save iptables -L -v
Translation of revision 7