用acme.sh自動部署功能變數名稱證書

来源:https://www.cnblogs.com/zhaifanhua/archive/2022/11/30/16937233.html
-Advertisement-
Play Games

用acme.sh自動部署功能變數名稱證書 安裝ACME 目前使用量最大的免費SSL證書就是Let’s Encrypt,自2018-03開始,Let’s Encrypt官方發佈上線了免費的SSL泛功能變數名稱證書,目前通過DNS方式獲取比較快,國內可以通過鵝雲的DNSPod功能變數名稱API或者貓雲功能變數名稱API自動簽發Let’ ...


用acme.sh自動部署功能變數名稱證書

安裝ACME

目前使用量最大的免費SSL證書就是Let’s Encrypt,自2018-03開始,Let’s Encrypt官方發佈上線了免費的SSL泛功能變數名稱證書,目前通過DNS方式獲取比較快,國內可以通過鵝雲的DNSPod功能變數名稱API或者貓雲功能變數名稱API自動簽發Let’s Encrypt泛功能變數名稱證書。因為鵝雲使用的就是DNSPod功能變數名稱,並且鵝雲和DNSPod的賬號是打通的,可以使用wx直接掃碼登錄。下文需要對鵝雲和DNSPod進行操作,為了簡化證書申請過程,需要提前安裝acme.shacme.sh實現了acme協議,可以從Let’s Encrypt生成免費的證書,自動創建cron任務, 每天零點自動檢測所有的證書,如果發現證書快過期了,需要更新,則acme.sh會自動更新證書,安裝過程不會污染已有的系統任何功能和文件,所有的修改都限制在安裝目錄中。

先進行依賴下載和更新。如果伺服器是CentOS系統,使用下麵的命令:

yum update && yum install curl -y && yum install cron -y && yum install socat -y

如果伺服器是Debian/Ubuntu系統,則使用下麵的命令:

apt-get update && apt-get install curl -y && apt-get install cron -y && apt-get install socat -y

1. 安裝 acme.sh

安裝很簡單, 一個命令:

curl https://get.acme.sh | sh -s email=yourEmail

配置自動解析

以 dnspod 為例, 你需要先登錄到 dnspod 賬號, 生成你的 api id 和 api key, 都是免費的。

image-20221128121438606然後配置:

export DP_Id="apiid"
export DP_Key="apikey"

2. 生成證書

手動 dns 方式, 手動在功能變數名稱上添加一條 txt 解析記錄, 驗證功能變數名稱所有權。

這種方式的好處是, 你不需要任何伺服器, 不需要任何公網 ip, 只需要 dns 的解析記錄即可完成驗證. 壞處是,如果不同時配置 Automatic DNS API,使用這種方式 acme.sh 將無法自動更新證書,每次都需要手動再次重新解析驗證功能變數名稱所有權。

~/.acme.sh/acme.sh --issue --dns -d zhaifanhua.com -d *.zhaifanhua.com --yes-I-know-dns-manual-mode-enough-go-ahead-please

然後, acme.sh 會生成相應的解析記錄顯示出來, 你只需要在你的功能變數名稱管理面板中添加這條 txt 記錄即可.

image-20221128120542715

驗證解析生效:

image-20221128150010468

nslookup -q=txt _acme-challenge.zhaifanhua.com

image-20221128150252182

等待解析完成之後, 重新生成證書:

~/.acme.sh/acme.sh --force --renew -d zhaifanhua.com -d *.zhaifanhua.com --yes-I-know-dns-manual-mode-enough-go-ahead-please

image-20221128120812869

image-20221128120833039

3. copy/安裝 證書

前面證書生成以後, 接下來需要把證書 copy 到真正需要用它的地方:

image-20221128124635187

註意, 預設生成的證書都放在安裝目錄下: ~/.acme.sh/, 請不要直接使用此目錄下的文件, 例如: 不要直接讓 nginx/apache 的配置文件使用這下麵的文件. 這裡面的文件都是內部使用, 而且目錄結構可能會變化。

正確的使用方法是使用 --install-cert 命令,並指定目標位置, 然後證書文件會被copy到相應的位置, 例如:

Nginx:

執行命令,這裡指定的所有參數都會被自動記錄下來, 併在將來證書自動更新以後, 被再次自動調用。

配置 Nginx 文件:

image-20221128130528181

這裡我將其配置到了 /home/ssl 目錄下,zhaifanhua.com_key.key 和 zhaifanhua.com_cert.pem 分別是私匙和證書名稱,可自定義。

~/.acme.sh/acme.sh --install-cert -d zhaifanhua.com -d *.zhaifanhua.com --key-file /home/ssl/zhaifanhua.com_key.key --fullchain-file /home/ssl/zhaifanhua.com_fullchain.cer --reloadcmd "service nginx force-reload"

image-20221128131040621

(一個小提醒, 這裡用的是 service nginx force-reload, 不是 service nginx reload, 據測試, reload 並不會重新載入證書, 所以用的 force-reload)

Nginx 的配置 ssl_certificate 使用 /etc/nginx/ssl/fullchain.cer ,而非 /etc/nginx/ssl/<domain>.cer ,否則 SSL Labs 的測試會報 Chain issues Incomplete 錯誤。

--install-cert命令可以攜帶很多參數, 來指定目標文件. 並且可以指定 reloadcmd, 當證書更新以後, reloadcmd會被自動調用,讓伺服器生效。

詳細參數請參考: https://github.com/Neilpang/acme.sh#3-install-the-issued-cert-to-apachenginx-etc

顯示 Reload success 表示成功!

image-20221128131134054

4. 查看已安裝證書信息

查看/刪除證書

查看證書

~/.acme.sh/acme.sh --list

刪除證書

~/.acme.sh/acme.sh remove <SAN_Domains>

查看信息

~/.acme.sh/acme.sh --info -d zhaifanhua.com -d *.zhaifanhua.com

image-20221128134334244

5. 更新證書

目前證書在 60 天以後會自動更新, 你無需任何操作. 今後有可能會縮短這個時間, 不過都是自動的, 你不用關心.

請確保 cronjob 正確安裝, 看起來是類似這樣的:

crontab  -l

*/5 * * * * flock -xn /tmp/stargate.lock -c '/usr/local/qcloud/stargate/admin/start.sh > /dev/null 2>&1 &'
0 0 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null

6. 關於修改ReloadCmd

目前修改ReloadCmd沒有專門的命令,可以通過重新安裝證書來實現修改reloadCmd的目的。 此外,安裝證書後,相關信息是保存在~/.acme.sh/example.com/example.conf文件下的,內容就是acme.sh --info -d example.com輸出的信息,不過ReloadCmd在文件中使用了Base64編碼。理論上可以通過直接修改該文件來修改ReloadCmd,且修改時,無需Base64編碼,直接寫命令原文acme.sh也可以識別。 不過,example.conf文件的位置和內容格式以後可能會改變!example.conf一直都是內部使用, 後面有可能會改為用 sqlite 或者mysql 格式存儲. 所以一般不建議自己修改。

7. 更新 acme.sh

目前由於 acme 協議和 letsencrypt CA 都在頻繁的更新, 因此 acme.sh 也經常更新以保持同步.

升級 acme.sh 到最新版 :

acme.sh --upgrade

如果你不想手動升級, 可以開啟自動升級:

acme.sh --upgrade --auto-upgrade

之後, acme.sh 就會自動保持更新了.

你也可以隨時關閉自動更新:

acme.sh --upgrade --auto-upgrade  0

8. 出錯怎麼辦:

如果出錯, 請添加 debug log:

acme.sh --issue  .....  --debug 

或者:

acme.sh --issue  .....  --debug  2

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 作者:陳昌浩 1 導讀 if…else…在代碼中經常使用,聽說可以通過Java 8的Function介面來消滅if…else…!Function介面是什麼?如果通過Function介面介面消滅if…else…呢?讓我們一起來探索一下吧。 2 Function介面 Function介面就是一個有且僅有 ...
  • 弟弟最近要考試,臨時抱佛腳在網上找了一堆學習資料複習,這不剛就來找我了,說PDF上有水印,影響閱讀效果,到時候考不好就怪資料不行,氣的我差點當場想把他揍一頓! 算了,弟弟長大了,看在打不過他的份上,就不打他了~ 稍加思索,我想起了Python不是可以去水印?說搞就搞! 去除水印原理 去除方法: 用 ...
  • 前面介紹了對稱加密演算法,本文將介紹密碼學中另一類重要應用:消息摘要(Digest),什麼是消息摘要?簡單的定義是:對一份數據,進行一個單向的Hash函數,生成一個固定長度的Hash值,這個值就是這份數據的摘要,也稱為指紋。 ...
  • 下麵給出 Kafka 一些重要概念,讓大家對 Kafka 有個整體的認識和感知,後面還會詳細的解析每一個概念的作用以及更深入的原理 • Producer:消息生產者,向 Kafka Broker 發消息的客戶端。 • Consumer:消息消費者,從 Kafka Broker 取消息的客戶端。 • ...
  • 虛基類/抽象類 抽象類:有純虛函數的類 虛繼承 通過修飾繼承方式, 如代碼2是虛繼承,被虛繼承的類稱為虛基類 虛繼承派生類的記憶體佈局方式 先是vbptr => 派生類的數據 =>基類的數據 , 對比代碼1和代碼2,發現原本基類數據在前面,派生類數據在後面,但是在虛繼承的時候 基類數據方式放到了後面, ...
  • ULID:Universally Unique Lexicographically Sortable Identifier(通用唯一詞典分類標識符) UUID:Universally Unique Identifier(通用唯一標識符) 為什麼不選擇UUID UUID 目前有 5 個版本: 版本1: ...
  • 1、環境搭建 1.1 依賴 <!-- nacos註冊中心 註解 @EnableDiscoveryClient --> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba- ...
  • 經常看到有群友調侃“為什麼搞Java的總在學習JVM調優?那是因為Java爛!我們.NET就不需要搞這些!”真的是這樣嗎?今天我就用一個案例來分析一下。 昨天,一位學生問了我一個問題:他建了一個預設的ASP.NET Core Web API的項目,也就是那個WeatherForecast的預設項目模 ...
一周排行
    -Advertisement-
    Play Games
  • 前言 當別人做大數據用Java、Python的時候,我使用.NET做大數據、數據挖掘,這確實是值得一說的事。 寫的並不全面,但都是實際工作中的內容。 .NET在大數據項目中,可以做什麼? 寫腳本(使用控制台程式+頂級語句) 寫工具(使用Winform) 寫介面、寫服務 使用C#寫代碼的優點是什麼? ...
  • 前言 本文寫給想學C#的朋友,目的是以儘快的速度入門 C#好學嗎? 對於這個問題,我以前的回答是:好學!但仔細想想,不是這麼回事,對於新手來說,C#沒有那麼好學。 反而學Java還要容易一些,學Java Web就行了,就是SpringBoot那一套。 但是C#方向比較多,你是學控制台程式、WebAP ...
  • 某一日晚上上線,測試同學在回歸項目黃金流程時,有一個工單項目介面報JSF序列化錯誤,馬上升級對應的client包版本,編譯部署後錯誤消失。 線上問題是解決了,但是作為程式員要瞭解問題發生的原因和本質。但這都是為什麼呢? ...
  • 本文介紹基於Python語言中TensorFlow的Keras介面,實現深度神經網路回歸的方法。 1 寫在前面 前期一篇文章Python TensorFlow深度學習回歸代碼:DNNRegressor詳細介紹了基於TensorFlow tf.estimator介面的深度學習網路;而在TensorFl ...
  • 前段時間因業務需要完成了一個工作流組件的編碼工作。藉著這個機會跟大家分享一下整個創作過程,希望大家喜歡,組件暫且命名為"easyFlowable"。 接下來的文章我將從什麼是工作流、為什麼要自研這個工作流組件、架構設計三個維度跟大家來做個整體介紹。 ...
  • 1 簡介 我們之前使用了dapr的本地托管模式,但在生產中我們一般使用Kubernetes托管,本文介紹如何在GKE(GCP Kubernetes)安裝dapr。 相關文章: dapr本地托管的服務調用體驗與Java SDK的Spring Boot整合 dapr入門與本地托管模式嘗試 2 安裝GKE ...
  • 摘要:在jvm中有很多的參數可以進行設置,這樣可以讓jvm在各種環境中都能夠高效的運行。絕大部分的參數保持預設即可。 本文分享自華為雲社區《為什麼需要對jvm進行優化,jvm運行參數之標準參數》,作者:共飲一杯無。 我們為什麼要對jvm做優化? 在本地開發環境中我們很少會遇到需要對jvm進行優化的需 ...
  • 背景 我們的業務共使用11台(阿裡雲)伺服器,使用SpringcloudAlibaba構建微服務集群,共計60個微服務,全部註冊在同一個Nacos集群 流量轉發路徑: nginx->spring-gateway->業務微服務 使用的版本如下: spring-boot.version:2.2.5.RE ...
  • 基於php+webuploader的大文件分片上傳,帶進度條,支持斷點續傳(刷新、關閉頁面、重新上傳、網路中斷等情況)。文件上傳前先檢測該文件是否已上傳,如果已上傳提示“文件已存在”,如果未上傳則直接上傳。視頻上傳時會根據設定的參數(分片大小、分片數量)進行上傳,上傳過程中會在目標文件夾中生成一個臨 ...
  • 基於php大文件分片上傳至七牛雲,使用的是七牛雲js-sdk V2版本,引入js文件,配置簡單,可以暫停,暫停後支持斷點續傳(刷新、關閉頁面、重新上傳、網路中斷等情況),可以配置分片大小和分片數量,官方文檔https://developer.qiniu.com/kodo/6889/javascrip ...