使用 Let's Encrypt 憑證保護您的 Apache Web 伺服器對於保護您的網站和資料至關重要。本指南將引導您在 Debian 12 Bookworm、Debian 11 Bullseye 和 Debian 10 Buster 上完成此過程。這裡的重點是實施強大的安全措施,同時簡化通常與伺服器管理相關的複雜性。
在 Debian 上使用 Let's Encrypt with Apache 的主要優點:
- 性價比高:Let's Encrypt 提供免費的 SSL 證書,使每個人都能獲得高水準的安全性。
- 自動續訂:Let's Encrypt 的自動化功能簡化了 SSL 憑證的取得和更新,降低了安全漏洞的風險。
- 增強安全性:Let's Encrypt 的 SSL 憑證為傳輸中的資料提供強大的加密,增強 Debian 上 Apache 伺服器的整體安全性。
- 廣泛的兼容性:大多數現代 Web 瀏覽器都能識別 Let's Encrypt 證書,確保流暢的使用者體驗。
- 主動安全措施:憑藉定期更新和嚴格的策略,Let's Encrypt 是抵禦各種網路威脅的可靠防線。
遵循本指南將教您如何使用 Let's Encrypt 保護 Debian 上的 Apache 伺服器,從而提高 Web 服務的安全性和可靠性。請繼續關注有關實現此基本安全設定的詳細說明。
為 Apache 安裝 Certbot
本節將重點放在基於 Debian 的 Linux 系統上安裝適用於 Apache 的 Certbot。 Certbot 是一款功能強大的工具,可簡化從 Let's Encrypt 取得和設定 SSL 憑證的流程。它與 Apache 攜手合作,使您能夠在伺服器上啟用 HTTPS。
在為 Apache 安裝 Certbot 之前更新 Debian 軟體包儲存庫
在安裝 Certbot 之前,請確保 Debian 系統上的軟體包儲存庫和現有軟體包已更新至關重要。保持系統更新可確保您安裝最新版本的 Certbot 和相依性。執行以下命令來更新套件儲存庫並升級現有套件:
sudo apt update
sudo apt upgrade
安裝 Certbot 和 Apache 插件
現在您的 Debian 系統已是最新的,下一步是安裝 Certbot 及其 Apache 外掛。 Apache 外掛程式至關重要,因為它使 Certbot 能夠與 Apache 互動、自動取得和更新憑證以及設定 Apache 來使用它們。執行以下命令來安裝 Certbot 和 Apache 外掛:
sudo apt install certbot python3-certbot-apache
設定 Apache 和 Let's Encrypt 證書
在本部分中,我們將指導您設定 Apache 並使用 Certbot 為您的網域產生 Let's Encrypt SSL 憑證。我們還將介紹提高伺服器配置安全性的各種選項的使用。
Apache 和 Debian 上的 Certbot 設定和 SSL 憑證生成
安裝 Certbot 及其 Apache 外掛後,下一步是執行 Certbot 為您的網域產生 SSL 憑證。此命令包含多個用於優化安全性的選項。
以下是所使用選項的詳細說明:
--apache
:指定使用的 Web 伺服器是 Apache。--agree-tos
:表示您同意 Let's Encrypt 的服務條款。--redirect
:設定從 HTTP 到 HTTPS 的永久 301 重定向,確保所有流量都經過加密。--hsts
:新增 Strict-Transport-Security 標頭以強制安全連線。--staple-ocsp
:啟用 OCSP Stapling,增強 SSL 協商效能,同時維護使用者隱私。--email
:這是您將收到與 SSL 憑證相關的通知的電子郵件地址,例如續訂提醒和安全警報。
代替 you@example.com
與您的實際電子郵件和 yourdomain.com
與您的域名。執行以下命令:
sudo certbot --apache --agree-tos --redirect --hsts --staple-ocsp --email you@example.com -d yourdomain.com
成功執行後,Certbot 將為您的網域產生 SSL 證書,配置 Apache 以使用它,並套用指定的安全選項。您的伺服器現在將是安全的,並且您的網站將可以透過 HTTPS 存取。
使用 Apache 的替代 Certbot 設定方法
對於那些喜歡更具指導性和互動性的方法的人,Certbot 提供了一種替代方法,提示您提供資訊和配置選擇。以下是如何使用此方法:
運行以下命令:
sudo certbot --apache
Certbot 將啟動互動式會話。以下是您可能遇到的提示的演練:
- 輸入電子郵件地址(用於緊急續約和安全通知):提供您的電子郵件地址。 Let's Encrypt 將使用它來傳達有關您的證書的訊息。
- 同意 Let's Encrypt 服務條款:您將被要求同意服務條款。輸入 A 表示同意。
- 與電子前沿基金會分享您的電子郵件,以獲取他們工作的最新信息:如果您想支援EFF,請輸入Y表示是。否則,輸入 N 作為否。
- 您希望為哪些名稱啟動 HTTPS:Certbot 將顯示它可以為其頒發證書的網域。輸入與您的網域相對應的數字或將其留空以供所有人使用。
- 選擇適當的操作:您可以選擇:
- 1:嘗試重新安裝證書
- 2:更新和更換證書(每 7 天限制約 5 次)
- 選擇適合您需求的選項。
- 選擇是否將 HTTP 流量重新導向到 HTTPS:系統會詢問您是否要將 HTTP 流量重新導向到 HTTPS。對於大多數網站來說這是可取的:
- 1:無重定向 – 不對網頁伺服器設定進行進一步變更。
- 2:重定向 – 使所有請求重定向到安全的 HTTPS 存取。
- 選擇選項 2 以獲得更好的安全性。
一旦您完成所有提示並完成流程,Certbot 將輸出與上述訊息類似的訊息,指示您的憑證檔案的位置和更多資訊。
使用 Cron 自動更新 SSL 憑證
在本節中,我們將使用 Cron(基於 Linux 的系統中的內建作業排程器)為您的 SSL 憑證設定自動續訂過程。 Let's Encrypt SSL 憑證的有效期為 90 天,因此必須在過期之前續訂它們,以避免服務中斷。 Certbot 提供了用於更新憑證的命令,我們可以使用 Cron 自動執行此任務。
證書續訂的試運行
在自動化更新過程之前,確保更新命令按預期工作至關重要。我們可以透過執行試運行來做到這一點,它模擬續訂過程而不更改憑證。執行以下命令來啟動試運行:
sudo certbot renew --dry-run
安排自動證書續約
如果試運行完成且沒有錯誤,我們可以安排自動憑證續約。我們將使用 Cron 在每天的特定時間執行更新命令。
首先,使用以下命令在編輯模式下開啟 crontab 檔案:
sudo crontab -e
在文件末尾添加以下行以安排每日凌晨 2:30 進行續訂檢查:
30 2 * * * /usr/bin/certbot renew --quiet
這 --quiet
選項可確保續訂過程在背景靜默運行,除非發生錯誤,否則不會產生任何輸出。
新增此行後,儲存並關閉檔案。您現在已經為 SSL 憑證設定了自動續約流程。 Cron 將每天檢查是否有任何證書需要續訂,並根據需要進行續訂。這可確保您的 Apache 伺服器始終使用有效的 SSL 證書,從而維護安全的使用者連線。
增強 Apache SSL 配置
在本節中,我們將透過修改 Apache 伺服器的 SSL 配置來最佳化其效能。這涉及設定 SSL 憑證、啟用 HTTP/2、實作 HTTP 嚴格傳輸安全性 (HSTS) 以及設定 SSL 協定和密碼。此配置需要 Apache 模組 mod_ssl
, mod_socache_shmcb
, mod_rewrite
, 和 mod_headers
.
編輯 Apache 設定檔
首先,您需要存取 Apache 中您的網域的設定檔。執行以下命令:
sudo nano /etc/apache2/sites-available/your_domain.conf
這將在名為 Nano 的文字編輯器中開啟您的網域的設定檔。進入後,在 VirtualHost 區塊中進行以下調整。
將 HTTP 重新導向到 HTTPS
首先,我們將設定一條規則將所有 HTTP 流量重新導向到 HTTPS,確保與伺服器的所有連線都是安全的。該規則不包括向 .well-known/acme-challenge/
目錄,Certbot 在憑證授權過程中使用該目錄進行網域驗證。在裡面新增如下配置 <VirtualHost *:80>
堵塞:
RewriteEngine On
RewriteCond %{REQUEST_URI} !^/\.well\-known/acme\-challenge/
RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [R=301,L]
啟用 SSL 並指定證書
接下來,在 <VirtualHost *:443>
區塊,我們將啟用 SSL 並指定 SSL 憑證和私鑰的路徑:
SSLEngine on
SSLCertificateFile /path/to/signed_cert_and_intermediate_certs
SSLCertificateKeyFile /path/to/private_key
代替 /path/to/signed_cert_and_intermediate_certs
以及 SSL 憑證檔案的路徑,以及 /path/to/private_key
以及您的私鑰檔案的路徑。
啟用 HTTP/2
為了提高效能,我們將啟用 HTTP/2(如果可用):
Protocols h2 http/1.1
實施HSTS
我們還將添加一個 Strict-Transport-Security 標頭來強制安全連線:
Header always set Strict-Transport-Security "max-age=63072000"
設定 SSL 協定和密碼
接下來,我們將指定應使用哪些 SSL 協定和密碼來確保高安全性和相容性:
SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-CHACHA20-POLY1305
SSLHonorCipherOrder off
SSLSessionTickets off
啟用 OCSP 裝訂
最後,我們將啟用 OCSP 裝訂,該功能可提高 SSL 協商的效能,同時維護訪客的隱私:
SSLUseStapling On
SSLStaplingCache "shmcb:logs/ssl_stapling(32768)"
驗證並應用更改
完成後,儲存並退出文件。驗證 Apache 配置以確保沒有語法錯誤至關重要。執行此命令來檢查:
sudo apachectl configtest
如果沒有問題,請透過重新載入 Apache 來套用變更:
sudo systemctl restart apache2
結論
在本文中,我們深入研究了在 Debian 10、11 和 12 上使用 Let's Encrypt SSL 憑證來保護 Apache。從安裝 Certbot 開始,我們探討如何從 Let's Encrypt 取得免費的 SSL 憑證。我們還討論了設定 Apache 以利用 SSL 憑證、透過 cron 作業自動化更新流程以及透過 Apache 設定增強安全性。
最後的建議是,定期監控日誌並保持系統最新狀態至關重要。這些做法將確保您了解潛在問題,並確保您的伺服器針對最新的安全漏洞進行了防禦。