apache 設定 https

先備知識:
使用 openssl 簽發憑證

1. 準備憑證檔、私鑰檔、中繼憑證鏈結檔 (CA bundle)
憑證檔就是認證中心發回的憑證,副檔名通常為 .cer, .crt, .pem,其他格式如 .pfx、.p12、.p7b 等,則需要做格式轉換

私鑰檔為當初申請憑證時使用的 key 檔,若申請時用的 key 是有密碼的 PassPhrase Key,請先用下列指令解開成不用密碼的 key,原因請參考 使用 openssl 簽發憑證 的註解 1

# 執行後需要輸入原本 key 的密碼來解密
openssl rsa -in server_pass.key -out server_nopass.key

中繼憑證鏈結檔會由認證中心提供,有些認證中心提供的中繼憑證鏈結檔不會做合併的動作,所以可能會有好幾個,像以前跟 TWCA 申請時,得到的中繼憑證鏈結檔就是 uca_1.cer、uca_2.cer,這時請手動合併為一個檔案

## 請注意! 中繼憑證鏈結是有順序的,以 TWCA 來說是 uca_2.cer 先

# windows
copy uca_2.cer+uca_1.cer uca.cer

# linux
cp uca_2.cer uca.cer
cat uca_1.cer >> uca.cer

如果憑證不是由第三方認證中心發的,而是自己或企業內自行簽發的憑證,通常會讓使用者端直接信任根憑證,這種情況可以不需要中繼憑證鏈結檔;當然!如果是多層簽發的機制,還是會需要中繼憑證鏈結檔的

 

2. 將上述檔案放置到 apache conf 目錄下
Linux => /etc/httpd/conf/ssl/
Windows => /apache 安裝目錄/conf/ssl/

3. 安裝 mod_ssl
Linux => 可用 apt or yum 安裝 mod_ssl
Windows => 通常會內附,沒有的話就抓 windows 版的 mod_ssl.so 來用

4. 修改 httpd.conf
如果在 apache 的 conf.d 下有 ssl.conf,請把它砍掉!
以下假設憑證檔為 server.crt、私鑰檔為 server.key、中繼憑證鏈結檔為 ca_bundle.crt

——– 只服務 https ——–
a. 確認 mod_ssl 開啟

LoadModule ssl_module modules/mod_ssl.so

b. 改 443 port,修改 listen *:80 為 *:443

# 若只要 ipv4 請用 listen 0.0.0.0:443
listen *:443

C. 加上 ssl 設定

SSLEngine on
SSLCertificateFile "apache 安裝目錄\conf\ssl\server.crt"
SSLCertificateKeyFile "apache 安裝目錄\conf\ssl\server.key"  
# 下面這行如果沒有中繼憑證鏈結檔,可以拿掉  
SSLCertificateChainFile "apache 安裝目錄\conf\ssl\ca_bundle.crt"

——– 服務 http & https ——–
a. 確認 mod_ssl 開啟

LoadModule ssl_module modules/mod_ssl.so

b. 改 80 + 443 port

# 若只要 ipv4 請用 Listen 0.0.0.0:80 & Listen 0.0.0.0:443
Listen *:80
Listen *:443

C. 使用 virtualhost,只在 443 裡面開啟 ssl

NameVirtualHost *:80
NameVirtualHost *:443

<VirtualHost *:80>
    ServerName 網址
    <Directory "網站目錄">
        Options FollowSymLinks
        AllowOverride All
    </Directory>
</VirtualHost>

<VirtualHost *:443>
    ServerName 網址
	
    SSLEngine on
    SSLCertificateFile "apache 安裝目錄\conf\ssl\server.crt"
    SSLCertificateKeyFile "apache 安裝目錄\conf\ssl\server.key"  
    # 下面這行如果沒有中繼憑證鏈結檔,可以拿掉  
    SSLCertificateChainFile "apache 安裝目錄\conf\ssl\ca_bundle.crt"
	
    <Directory "網站目錄">
        Options FollowSymLinks
        AllowOverride All
    </Directory>
</VirtualHost>

 

網路上有些設定 https 的文章會使用到 SSLCACertificateFile,這其實是誤用;
apache 中 SSLCA 開頭的設定是用在 “客戶端驗證" 的情境,實際應用通常是客戶端跟網站申請一個憑證,然後安裝至瀏覽器中,有這個憑證才能登入這個網站,所以網站的 apache server 需要設定簽發客戶端憑證的憑證檔,這與網站是否提供 https 是沒有關係的

 

5. 防火牆開放 443 port
windows 上通常是在 [windows 防火牆 / 允許程式或功能通過 windows 防火牆] 中,將 apache 程式加入,這一步應該在以前安裝 apache 時就做過了,畢竟沒做的話,正常 http 的 80 port 也是不會通的 …

Linux 上通常不會對程式開,而是開 port,所以請記得設定 iptables 與 firewall-cmd 開放 port 443

本篇發表於 網路相關, 軟體設定。將永久鏈結加入書籤。

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *