# acme.sh 操作紀錄 ###### tags: `ACME.sh` `acme.sh` `letsencrypt` - [官方wiki](https://github.com/acmesh-official/acme.sh/wiki/) - [官方中文 wiki](https://github.com/acmesh-official/acme.sh/wiki/说明) - [參考教學-DNS手動模式](https://www.796t.com/content/1544691721.html) - ~~[參考教學](https://www.kjnotes.com/devtools/103)~~ ## 1. 安裝 acme.sh 建議都在各自的家目錄操作,如果想要在其他位置,每個指令中請自行加入 `--home .` 這項參數 ### 方法一* *本文件使用此方式* ```shell=bash git clone https://github.com/acmesh-official/acme.sh.git ``` ### 方法二 ```shell=bash curl https://get.acme.sh | sh -s email=my@example.com ``` ### 安裝後的設定 ```shell=bash echo alias acme.sh=~/acme.sh/acme.sh >> ~/.bashrc ``` 註冊帳號 ```shell=bash acme.sh --register-account -m email@example.com --server letsencrypt acme.sh --set-default-ca --server letsencrypt ``` ## 2. 獲取證書 ```shell=bash acme.sh --issue -d example.com --dns \ --yes-I-know-dns-manual-mode-enough-go-ahead-please ``` 中間這個步驟我忘記截圖 可以先看上面的參考教學-手動DNS 簡單來說就是要去 cloudflare 裡面對應的 domain,新增TXT紀錄,上面指令下完,會給你兩個東西,一個是紀錄名稱,一個是內容 ex: ![](https://i.imgur.com/dH4pI1b.png) 之後依照官方示執行 ``` acme.sh --renew -d example.com \ --yes-I-know-dns-manual-mode-enough-go-ahead-please ``` 詳細請參考[官方說明](https://github.com/acmesh-official/acme.sh/wiki/DNS-manual-mode) :::danger 以下已無法使用 ```shell=bash acme.sh --issue --alpn --tlsport 10443 -d example.com --server letsencrypt \ --pre-hook "docker stop nginx_nginx_1 && service nginx restart" \ --post-hook "service nginx stop && docker restart nginx_nginx_1" ``` - `--tlsport` 使用 tls-alpn-01 挑戰,因為學校會擋 80 port,而他可以使用 443 port 來獲取證書,詳細請參考[官方說明](https://github.com/acmesh-official/acme.sh/wiki/TLS-ALPN-without-downtime) *(不使用 dns-01,因為無法達到自動更新證書,因為大多的 DNS API 不給 `.ml`、`.tk`、`.cf`、`.ca`、... 這些頂級域名使用,像 cloudflare 和 luadns 就是如此,可以先看上面的**參考教學**做一遍,就知道這在說啥了。仍然可以用這些域名挑戰 dns-01,但只能透過手動)* - `--server` 指定憑證機構為 letsencrypt,acme 預設是 ZeroSSL。 *(我不知道 ZeroSSL 為啥一直不過,換成 letsencrypt 就過了)* ::: ## 3. 安裝證書 - Nginx *(實驗室都用這個)* ```shell=bash acme.sh --install-cert -d example.com \ --cert-file /etc/letsencrypt/live/example.com/cert.pem \ --key-file /etc/letsencrypt/live/example.com/privkey.pem \ --fullchain-file /etc/letsencrypt/live/example.com/fullchain.pem \ --ca-file /etc/letsencrypt/live/example.com/chain.pem \ --reloadcmd "docker restart nginx_nginx_1" # or --reloadcmd "systemctl reload nginx.service" ``` **reloadcmd 請依照執行環境變動** ## 4. 更新證書 現在只能用手動的方式以 dns 更新憑證,方法就是再做一次第 2 點。 ## 5. 更新 acme.sh ```shell=bash # 手動更新 ./acme.sh --upgrade ``` ```shell=bash # 啟用自動更新 ./acme.sh --upgrade --auto-upgrade ``` ```shell=bash # 關閉自動更新 ./acme.sh --upgrade --auto-upgrade 0 ``` ## 6. debug ```shell=bash # 輸出部分訊息 ./acme.sh --issue ..... --debug ``` 或 ```shell=bash # 輸出更完整訊息 ./acme.sh --issue ..... --debug 2 ``` ## 參考 - [Which client support tls-alpn challenge?](https://community.letsencrypt.org/t/which-client-support-tls-alpn-challenge/75859) - [Renewing via port 443](https://community.letsencrypt.org/t/renewing-via-port-443/106771)