直接使用 Cloudflare 管理 SSL 憑證是完全免費

直接使用 Cloudflare 管理 SSL 憑證是完全免費的。

零元方案的內容

對於一般使用者,Cloudflare 的 Free 方案 就已經非常夠用。

  • Universal SSL(通用憑證):免費。當你把小雲朵(Proxy)打開時,Cloudflare 會自動幫你的網域和第一層子網域(如 *.max-everyday.com)簽發憑證。
  • Origin CA 憑證:免費。你可以從 Cloudflare 後台下載一張有效期長達 15 年的憑證裝在你的 Ubuntu Server 上,讓 Cloudflare 到你主機這一段路也是加密的。
  • 自動續約:免費。Cloudflare 會自己處理憑證更新,你完全不需要跑 certbot 指令。

什麼時候需要花錢?

除非你有非常特殊的技術需求,否則通常碰不到付費項目:

  • 進階憑證管理 (ACM):每月約 10 美元。如果你需要更深層的子網域(例如 a.b.dictionary.max-everyday.com),或是想要自訂憑證的有效期、選擇特定的簽發機構,才需要這個。
  • 自訂憑證上傳:需要 Business 方案(每月 200 美元)。如果你一定要把你在外面買的昂貴憑證上傳到 Cloudflare 使用才要買這個。

簡單總結

你現在的情況,只要把網域交給 Cloudflare 代管,並在 DNS 頁面把該子網域的 Proxy 狀態(橘色小雲朵)點亮,SSL 就會自動生效,且一毛錢都不用花


在 Cloudflare 官網後台的 SSL/TLS 選項中,找到「Origin Server」頁面,點擊「Create Certificate」。直接點選建立後,你會得到兩段文字:一個是 Certificate(憑證),另一個是 Private key(私密金鑰)。

準備憑證檔案

請在你的 Ubuntu Server 上建立兩個檔案,把網頁上的內容分別貼進去。

  • 新建 /etc/ssl/certs/cloudflare.pem,貼入 Certificate 內容。
  • 新建 /etc/ssl/private/cloudflare.key,貼入 Private key 內容。

請務必保護好 key 檔案,不要讓其他人讀取。

修改 Apache 設定

你需要修改原有的設定檔,讓它監聽 443 埠。你可以參考下面的寫法。

<VirtualHost *:443>
    ServerAlias dictionary.max-everyday.com
    DocumentRoot /var/www/dictionaryweb

    SSLEngine on
    SSLCertificateFile /etc/ssl/certs/cloudflare.pem
    SSLCertificateKeyFile /etc/ssl/private/cloudflare.key

    <Directory /var/www/dictionaryweb/>
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>

最後步驟

設定完成後,請先啟動 Apache 的 SSL 模組:執行
sudo a2enmod ssl
接著執行
sudo apache2ctl configtest
檢查語法,沒問題後用
sudo systemctl restart apache2
重啟。

最後,回到 Cloudflare 後台,將 SSL/TLS 模式從「Flexible」改成「Full (Strict)」。這樣從瀏覽器到 Cloudflare,再到你的伺服器,全程都會是加密的安全連線。


建議不要完全移除,但可以將其簡化為「自動轉址」功能。

保留 80 埠設定檔的原因

雖然你現在改用 HTTPS,但有些使用者或舊的書籤可能還是會輸入 http://。如果直接移除 80 埠的設定,當有人嘗試用 HTTP 訪問時,伺服器會因為找不到對應的設定而噴出錯誤,或是顯示出預設的 Apache 歡迎頁面。

最好的做法是讓 80 埠只負責一件事情:把所有訪客推向 HTTPS。

建議的簡化設定

你可以將原本 80 埠的設定檔內容改寫成這樣,就是一個「自動導航」:

<VirtualHost *:80>
    ServerAlias dictionary.max-everyday.com
    Redirect permanent / https://dictionary.max-everyday.com/
</VirtualHost>

這樣無論訪客從哪裡進來,都會被安全地引導到你剛設定好的 443 埠(HTTPS)。

Cloudflare 的替代方案

其實,如果你在 Cloudflare 後台開啟了「Always Use HTTPS」功能,Cloudflare 在雲端就會幫你處理掉轉址,流量根本不會到達你的 80 埠。

不過,在伺服器端保留這幾行設定是一種「保險」。萬一哪天你暫時關閉了 Cloudflare 的 Proxy(變回灰雲朵),你的網站依然能維持自動轉跳 HTTPS 的功能,不會因此變得混亂。

你想知道怎麼在同一個設定檔裡同時寫好 80 和 443 埠嗎?


在同一個設定檔裡,你只需要寫兩個 VirtualHost 區塊。這就像是在同一個檔案裡放兩個不同的導航說明。

設定檔寫法範例

你可以直接把原本的 015-dictionary.conf 修改成以下內容:

<VirtualHost *:80>
    ServerAlias dictionary.max-everyday.com
    # 把 HTTP 流量永久轉向 HTTPS
    Redirect permanent / https://dictionary.max-everyday.com/
</VirtualHost>

<VirtualHost *:443>
    ServerAlias dictionary.max-everyday.com
    DocumentRoot /var/www/dictionaryweb

    SSLEngine on
    SSLCertificateFile /etc/ssl/certs/cloudflare.pem
    SSLCertificateKeyFile /etc/ssl/private/cloudflare.key

    <Directory /var/www/dictionaryweb/>
        AllowOverride All
        Require all granted
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/dictionary_error.log
    CustomLog ${APACHE_LOG_DIR}/dictionary_access.log combined
</VirtualHost>

注意事項

雖然寫在一起很方便,但請記得檢查你的 Ubuntu 防火牆(例如 ufw)。如果之前只開了 80 埠,現在必須執行 sudo ufw allow 443/tcp。否則,雖然 Apache 設定好了,外面的封包還是進不來。

另外,如果你的主機上有其他網站,建議每個網站的 Log 檔案名稱稍微分開(例如上面的 dictionary_error.log),這樣出問題時才不會所有網站的錯誤訊息都擠在一起。

最後,存檔後一樣要執行
sudo apache2ctl configtest
看到 Syntax OK 的字樣,再重啟 Apache 才會生效。

需要我教你怎麼看 Apache 的錯誤日誌來確認設定有沒有成功嗎?


設定 Cloudflare 的 SSL 模式是確保連線安全的最後一步。這能保證從瀏覽器到伺服器的整條路徑都被嚴密加密。

進入 SSL/TLS 設定頁面

首先,登入 Cloudflare 後台並選擇你的網域(max-everyday.com)。在左側導覽列中,你會看到一個「SSL/TLS」的選項,點擊它後預設會進入「Overview(總覽)」頁面。

在這個頁面的中間,你會看到一個四格的選擇器,分別是 Off、Flexible、Full、Full (Strict)。

選擇 Full (Strict) 模式

請直接點擊「Full (Strict)」這個選項。

  • 為什麼選這個? 因為你已經在 Apache 上安裝了 Cloudflare 提供的 Origin Certificate。
  • 與 Full 的差別: 「Full」只要有證書就行,不論過期或非法;而「Full (Strict)」會嚴格檢查你伺服器上的證書是否為 Cloudflare 簽發且有效。
  • 安全性: 這是最高等級的加密方式,可以防止中間人攻擊,確保流量真的進到了你的 Ubuntu 伺服器。

開啟 Always Use HTTPS

設定完模式後,點擊左側選單「SSL/TLS」底下的「Edge Certificates」。在頁面下方找到「Always Use HTTPS」開關,將它切換為「On」。

這樣一來,Cloudflare 就會主動把所有嘗試連入 http 的訪客直接導向 https,這比你在 Apache 寫轉址反應更快,也能減少伺服器的負擔。

驗證設定是否生效

完成後,你可以再次使用 curl -v https://dictionary.max-everyday.com 進行測試。

如果設定成功,你應該會看到 SSL 連線建立成功,且不會再出現 301 轉址(因為你已經直接訪問 https 了)。如果畫面出現「526 Invalid SSL certificate」錯誤,通常代表你 Apache 上的 .pem.key 檔案路徑貼錯了,或者是忘了重啟 Apache。

需要我幫你寫一段自動檢查 Apache 憑證路徑是否正確的指令嗎?

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *