---
# System prepended metadata

title: ACME Client自動申請憑證(Let's Encrypt IP憑證 + 短效期憑證)
tags: [雜項筆記]

---

ACME Client自動申請憑證(Let's Encrypt IP憑證 + 短效期憑證)
---
> 2026年1月 Let's Encrypt新增有效期6天的短效TLS憑證，同步推出IP位址憑證  
> 跟原本網域的方式相同，只是參數變更  
> 所以大部分的內容會雷同  

### 環境準備與條件

1. 防火牆設置port forwarding 將實體IP位址的80埠到運行的主機IP的80埠。

2. 運行的主機不得有已經占用的80 port服務。

3. 主機要有安裝docker是必要條件，若沒有請參照官方說明。


說明：  
standalone模式，會在自動申請憑證過程，短暫的建立http服務，  
來完成驗證程序，在驗證完成後馬上就會關閉，不用擔心常開被攻擊的疑慮。


### 執行範例
> 示範執行方式，最終會產生憑證，  
> 平常可以透過排程定期檢查更新憑證，  
> 如果到期會自動執行產生新的憑證，  
> 至於怎麼自動化放到自己的環境，  
> 依照自己環境做設計。  

##### 建立工作目錄並切換到該目錄

    mkdir -p acme_ip/out
    cd acme_ip
    
##### 取得 acme 以及執行 acme container daemon 模式
> container把out掛載到實體目錄，方便整合、重複建立container或取用。
> 為了跟網域版區隔，我們用 acme_ip 命名 container name。

    docker pull neilpang/acme.sh
    docker run -d -v "$(pwd)/out":/acme.sh -p 80:80 --name=acme_ip neilpang/acme.sh daemon
    
    


##### 初始操作

    #將服務改成 letsencrypt
    docker exec -it acme_ip --set-default-ca --server letsencrypt
    #版本更新
    docker exec -it acme_ip --upgrade
    #註冊  
    docker exec -it acme_ip --register-account -m 你的mail address
    
##### 簽發憑證
>  簽完之後，其實掛上去簡單看一下效期，大約是官方新聞的160小時，  
>  **--days 5** 應該是多餘的，有驗證的話再拿掉。   

    #執行自動產短效期憑證
    docker exec -it acme_ip --issue -d 實體IP --certificate-profile shortlived --days 5 --standalone
    
    # 假設起頭說的條件都有完成，自動簽發的過程基本上是順利的

完成之後會在out/實體IP_ecc下產生  實體IP.cer 跟實體IP.key，  
就可以拿去nginx去做測試套用在https憑證上。**注意 out 目錄內容之後不要刪除**。

##### 自動更新憑證
> 執行更新指令的時候，如果沒到期，它什麼都不會做，只會顯示憑證尚未到期，下次可更新是哪天(4天之後)，。

    docker exec -it acme_ip --renew -d 實體IP --standalone
    

##### 策略設計

平常可以把更新憑證寫script設計流程，並作為排程定期運行，  
每次執行後，可以檢查正式nginx上的憑證跟out下的有沒有一致，  
如果不一致代表更新了，就更名備份舊憑證然後再把新的放上去，  
然後reload或restart nginx服務。  

如果沒辦法自己做到設計script就求助GPT寫script或者自己人工去換吧。

或許也可以將產生路徑跟nginx讀取憑證路徑做整合，也是可以減少額外的設計。
本篇主旨在於對系統做其他安裝，在docker container下產生憑證。
