ACME Client自動申請憑證(docker搭配ACME container daemon走 standalone模式) --- > 不想在系統上安裝ACME帶來的套件, > 利用docker版本來產生憑證。 > 本篇採用standalone模式的分享, > 使用此模式不用額外架設驗證需要的http 80埠服務。 ### 環境準備與條件 1. 防火牆設置port forwarding 將實體IP位址的80埠到運行的主機IP的80埠。 2. 要申請的domain要指向運行上述的外部IP,在自動簽發過程let's encrypt才能正確驗證。 3. 運行的主機不得有已經占用的80 port服務。 4. 主機要有安裝docker是必要條件,若沒有請參照官方說明。 說明: standalone模式,會在自動申請憑證過程,短暫的建立http服務, 來完成驗證程序,在驗證完成後馬上就會關閉,不用擔心常開被攻擊的疑慮。 ### 執行範例 > 示範執行方式,最終會產生憑證, > 平常可以透過排程定期檢查更新憑證, > 如果到期會自動執行產生新的憑證, > 至於怎麼自動化放到自己的環境, > 依照自己環境做設計。 ##### 建立工作目錄並切換到該目錄 mkdir -p acme/out cd acme ##### 取得 acme 以及執行 acme container daemon 模式 > container把out掛載到實體目錄,方便整合、重複建立container或取用。 docker pull neilpang/acme.sh docker run -d -v "$(pwd)/out":/acme.sh -p 80:80 --name=acme.sh neilpang/acme.sh daemon ##### 初始操作 #將服務改成 letsencrypt docker exec -it acme.sh --set-default-ca --server letsencrypt #版本更新 docker exec -it acme.sh --upgrade #註冊 docker exec -it acme.sh --register-account -m 你的mail address ##### 簽發憑證 > 因為很窮,所以平常用 duckdns.org 的免費網域做示範教學 > 所以沒有可以www起頭 #執行自動產憑證 docker exec -it acme.sh --issue -d mydowmin.duckdns.org --standalone # 假設起頭說的條件都有完成,自動簽發的過程基本上是順利的 完成之後會在out/mydowmin.duckdns.org_ecc下產生 fullchain.cer 跟mydowmin.duckdns.org.key, 就可以拿去nginx去做測試套用在https憑證上。**注意 out 目錄內容之後不要刪除**。 ##### 自動更新憑證 > 執行更新指令的時候,如果沒到期,他什麼都不會做,只會顯示憑證尚未到期,到期日是哪天。 docker exec -it acme.sh --renew -d mydomain.duckdns.org --standalone ##### 策略設計 平常可以把更新憑證寫script設計流程,並作為排程定期運行, 每次執行後,可以檢查正式nginx上的憑證跟out下的有沒有一致, 如果不一致代表更新了,就更名備份舊憑證然後再把新的放上去, 然後reload或restart nginx服務。 如果沒辦法自己做到設計script就求助GPT寫script或者自己人工去換吧。 或許也可以將產生路徑跟nginx讀取憑證路徑做整合,也是可以減少額外的設計。 本篇主旨在於對系統做其他安裝,在docker container下產生憑證。