SSL 憑證
自動申請並續期憑證,供 Web 服務 使用,也可以匯出給其他軟體。
能力
- ACME DNS-01 自動簽發與續期,重用 動態網域 中的 DNS 服務商,無需開放 80 / 443 連接埠;
- ACME HTTP-01:不需要 DNS 服務商,要求公網能存取各網域的 80 連接埠,不支援萬用字元;
- 萬用字元憑證與 EAB(如 ZeroSSL);
- 上傳既有憑證,或從檔案讀取;
- 對應到目錄:憑證變動後寫入指定目錄並執行指令碼,方便其他服務重新載入;
- 自動部署:憑證變動後複製到多個本機目錄、經 SSH 推送到其他主機並執行指令,或重新啟動使用該憑證的 Docker 容器。
HTTP-01 驗證
在憑證的「驗證方式」中選擇 HTTP-01。簽發時 CA 會存取 http://<網域>/.well-known/acme-challenge/<token>:
- Web 服務 已在 80 連接埠監聽時,由它直接回應,不影響現有站台;
- 80 連接埠閒置時,Gately 會在簽發期間臨時監聽該連接埠,完成後立即關閉;
- 路由器把公網 80 連接埠轉發到本機其他連接埠時,在「臨時監聽埠」中填寫該連接埠。
許多家用寬頻(例如中國大陸)會封鎖入站 80 連接埠,此時請使用 DNS-01。
憑證對應
啟用憑證後,Gately 會把 .crt、.key、.pem 與 _issuerCertificate.crt 寫入對應目錄,並執行變更指令碼。
自動部署
在憑證的「自動部署」中可以新增多個部署目標,憑證簽發、續期或更新後自動執行:
- 複製到本機目錄:把憑證寫入本機的目錄,再在本機執行「複製後執行」的指令,可以新增多個目錄、每個目錄使用不同的指令。目錄中的憑證檔案被刪除或改動後,下一次檢查會重新複製。Gately 在 Docker 中執行時,目錄與指令都在容器內;
- 上傳到 SSH 主機:選擇 Web 終端 中既有的 SSH 連線,沿用它的位址、驗證方式與代理。憑證檔案(
<備註>.crt、.key、.pem、_issuerCertificate.crt,與憑證對應相同,因此備註不能為空)寫入遠端目錄後,在遠端主機執行「上傳後執行」的指令,例如systemctl reload nginx,指令中可用$certName、$certDir、$certFile、$keyFile。檔案先寫入暫存檔並設好權限再改名取代,私鑰權限為 0600; - 重新啟動本機容器:憑證變動後依序重新啟動所選的 Docker 容器,適合容器掛載了對應目錄、需要重新啟動才能載入新憑證的服務。
「複製到本機目錄」與「上傳到 SSH 主機」可以填寫憑證(完整鏈)與私鑰的檔名,例如 fullchain.pem 與 privkey.pem,兩個都填寫後只寫入這兩個檔案,此時備註可以為空;留空時使用與憑證映射相同的檔名。指令中的 $certFile、$keyFile 指向實際寫入的檔案。
自動部署不會信任未知主機:所選 SSH 連線需要先在 Web 終端中連線一次,記錄主機金鑰後才會推送。部署失敗時每小時重試一次,並發出「憑證:部署失敗」事件,可在 通知中心 訂閱。憑證卡片上的「立即部署」會忽略重試間隔,馬上部署到所有啟用的目標並顯示每個目標的結果。
編輯憑證時,目標設定沒有變動的部署不會重複執行;修改遠端目錄、指令或容器後會重新部署一次。
安全提示
私鑰儲存在設定目錄的 ssl.json 中,請妥善保管該檔案,納入版本庫時確認儲存庫為私有。
從 Lucky 遷移
已簽發的憑證可原樣匯入,到期前不會重新申請。ZeroSSL 沿用 Lucky 中的 EAB 憑據註冊新的 ACME 帳號。詳見 遷移指南。