在 CentOS 設置一個 SSL 加密的網頁伺服器

這個指引會解釋如何設置一個支援 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

zh-tw/HowTos/Https (last edited 2014-02-17 08:36:49 by TimothyLee)