主要分為兩個步驟:產生新憑證 和 更新 Nginx 設定。
由於您使用的是自簽憑證,您需要手動產生新的憑證和私鑰。
步驟一:產生新的 Self-Signed 憑證
您可以使用 OpenSSL 工具來產生新的私鑰 (private key) 和憑證 (certificate)。
- 建立新的私鑰和憑證檔案:
執行以下指令。這個指令會產生一個新的 2048 位元 RSA 私鑰 (nginx.key
) 和一個有效期限 365 天的自簽憑證 (nginx.crt
),並使用 SHA-256 演算法(這是現代 TLS 的標準):sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/nginx.key -out /etc/ssl/certs/nginx.crt
- 填寫憑證資訊:
執行指令後,系統會要求您輸入一些憑證資訊。請注意 Common Name (e.g. server FQDN or YOUR name) 這一項,您應該填寫您的伺服器 域名 (domain name) 或 IP 位址。注意: 現代瀏覽器和應用程式現在通常要求自簽憑證也包含 Subject Alternative Name (SAN) 才能避免警告。如果您需要更進階的設定,可以參考 OpenSSL 文件建立一個設定檔來產生包含 SAN 的憑證。不過對於基本測試或內部使用,上面的指令已經足夠。
步驟二:更新 Nginx 設定檔
接下來,您需要修改 Nginx 的設定檔,確保它指向新的憑證檔案並使用最新的 TLS 協定。
- 開啟您的 Nginx 站台設定檔:
通常位於/etc/nginx/sites-available/
或/etc/nginx/conf.d/
之下,然後被連結到sites-enabled/
。例如:sudo nano /etc/nginx/sites-available/default
- 確認憑證路徑:
在server
區塊中,找到或新增以下兩行,並確認路徑指向您剛才建立的新檔案:ssl_certificate /etc/ssl/certs/nginx.crt;
ssl_certificate_key /etc/ssl/private/nginx.key;
- 指定 TLS 協定和加密套件:
為了確保您使用的是新版的 TLS (TLSv1.2 和 TLSv1.3),請檢查您的server
區塊或主設定檔 (/etc/nginx/nginx.conf
) 的http
區塊中是否包含以下設定:# 僅允許 TLSv1.2 和 TLSv1.3,停用舊的、不安全的 SSL/TLS 版本
ssl_protocols TLSv1.2 TLSv1.3;
# 優先使用伺服器選擇的加密套件 (更安全)
ssl_prefer_server_ciphers on;
# 選擇安全的加密套件清單 (可以根據安全建議調整)
ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";
# 啟用 HSTS (推薦,可以強制瀏覽器只使用 HTTPS)
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload";
- 測試 Nginx 設定並重新載入:在應用變更之前,先測試設定檔語法是否正確:
sudo nginx -t
如果顯示test is successful
,則重新載入 Nginx 服務以應用新的憑證和設定:sudo systemctl reload nginx
後續確認
- 檢查 Nginx 狀態: 確保服務正常運行:
sudo systemctl status nginx
- 測試瀏覽器連線: 使用瀏覽器連線到您的 HTTPS 網址 (
https://您的IP或域名
)。- 由於是 自簽憑證,瀏覽器仍然會跳出安全警告(這是預期的行為,因為憑證不是由被信任的憑證機構簽發的)。
- 在瀏覽器的憑證資訊中,您可以確認憑證的有效期和使用的 簽名演算法 (應該是 SHA-256) 是否與您剛產生的新憑證一致。
- 您也可以使用 SSLLabs 或類似的線上工具來檢查您的伺服器支援的 TLS 協定版本 和 加密強度。