向服務商購買一張常見的 DV 通配符 SSL 證書,通常每年價格在數百至一千多元人民幣不等;若名下有多個域名需要使用證書,總費用每年可能達到數千元。

在當前強調降本增效的環境下,若評估後認為免費證書能夠滿足需求,小公司和個人網站即可節省相應成本。

Let’s Encrypt 簡介

Let’s Encrypt 是一家免費、開放、自動化的公益性證書頒發機構(CA),由互聯網安全研究組(ISRG)運作,屬於非營利組織。其目標是推廣 HTTPS 的應用,為構建更安全、尊重隱私的互聯網提供免費而便捷的支持。

操作方法

根據不同使用環境,Let’s Encrypt 提供多種驗證與獲取證書的方式。常用工具是 Certbot,詳見文檔:https://eff-certbot.readthedocs.io/en/stable/。

在部分環境中,可配置工具定期自動續期,減少維護工作。

由於服務器環境較為老舊,且需要將證書上傳至阿里雲並部署到多個雲服務,本文暫採用“本地生成證書—手動上傳與更新”的方式。

0x01 在本地生成證書

本文使用 Docker 運行 Certbot,參見文檔:https://eff-certbot.readthedocs.io/en/stable/install.html#alternative-1-docker。

生成通配符證書的示例命令如下:

docker run -it --rm --name certbot \
  -v '/Users/mazhuang/some/path/letsencrypt:/etc/letsencrypt' \
  certbot/certbot certonly \
  --preferred-challenges dns \
  --manual \
  --server https://acme-v02.api.letsencrypt.org/directory \
  --key-type rsa --rsa-key-size 2048
  • --preferred-challenges dns使用 DNS 方式進行域名驗證;
  • --manual以交互式方式進行詢問與操作;
  • --key-type rsa --rsa-key-size 2048生成 2048 位 RSA 私鑰(部分阿里雲服務不支持默認的 ECC 證書)。

執行後會依次詢問郵箱、協議授權、域名等信息,隨後提示添加 DNS TXT 記錄以完成域名所有權驗證,按提示操作即可。

生成成功後,證書與私鑰保存在掛載的本地目錄中,例如上述命令中的 /Users/mazhuang/some/path/letsencrypt/archive/{domain name}。各文件的説明可參考:https://eff-certbot.readthedocs.io/en/stable/using.html#where-certs。

0x02 上傳和部署證書

將證書上傳到阿里雲的數字證書管理服務。可使用其一鍵部署功能(付費),或在各雲服務中手動選擇使用該證書(免費),按需取用。

0x03 定期更新證書

Let’s Encrypt 頒發的證書有效期為 90 天,建議在到期前 30 天內更新。可重複步驟 0x01 生成新證書,然後上傳並部署。

注意事項

部分極為老舊的平台有可能不支持 Let’s Encrypt 頒發的證書,建議評估後再決定是否使用,具體的兼容情況可以參考:https://letsencrypt.org/zh-cn/docs/certificate-compatibility/ 。

比如我這邊就遇到了因為使用的是 JDK 8 的低於 141 的版本,部署完證書後,發現 xxl-job 定時任務執行器沒有註冊上,報錯 sun.security.validator.ValidatorException: PKIX path building failed

解決方法:

  1. 下載 ISRG Root X1 證書
    在這裏可以找到: https://letsencrypt.org/certificates/
cd /opt
get https://letsencrypt.org/certs/isrgrootx1.pem
  1. 導入證書到 JDK 的 cacerts 中
keytool -trustcacerts -keystore "/opt/jdk/jre/lib/security/cacerts" -storepass changeit -noprompt -importcert -alias lets-encrypt-x1 -file "/opt/isrgrootx1.pem"
  1. 重啓服務

小結

以上步驟簡單、成本為零。對小公司和個人網站而言,是節省 SSL 證書費用的可行方案。

若環境允許,建議配置自動化續期,進一步降低維護成本,按需採用。

參考鏈接

  • https://letsencrypt.org/zh-cn/
  • https://eff-certbot.readthedocs.io/en/stable/