用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
  • 一:背景 1. 講故事 年前遇到了好幾例托管堆被損壞的案例,有些運氣好一些,從被破壞的托管堆記憶體現場能觀測出大概是什麼問題,但更多的情況下是無法做出準確判斷的,原因就在於生成的dump是第二現場,借用之前文章的一張圖,大家可以理解一下。 為了幫助更多受此問題困擾的朋友,這篇來整理一下如何 快狠準 的 ...
  • 前言 .NET6 開始,.NET Croe API 項目取消了 Startup.cs 文件,在 Program.cs 文件的 Main 函數中完成服務的註冊和中間件管道的管理。但當我們項目引入更多包的時候,Program.cs 文件也會看起來很臃腫。 而且,我們不只會有一個後端項目,為了方便快速創建 ...
  • 目錄 背景 get 與 post 的區別 所有介面都用 post 請求? 背景 最近在逛知乎的時候發現一個有趣的問題:公司規定所有介面都用 post 請求,這是為什麼? 看到這個問題的時候其實我也挺有感觸的,因為我也曾經這樣問過我自己。在上上一家公司的時候接到一個項目是從零開始搭建一個微服務,當時就 ...
  • *以下內容為本人的學習筆記,如需要轉載,請聲明原文鏈接 微信公眾號「englyf」https://mp.weixin.qq.com/s/2GFLTstDC7w6u3fTJxflNA 本文大概 1685 個字,閱讀需花 6 分鐘內容不多, 但也花了一些精力如要交流, 歡迎關註我然後評論區留言 謝謝你的 ...
  • 在新版本的pandas中,上述代碼會引起警告,建議改成SQLAlchemy connectable(engine/connection),後續代碼將引入這種升級的連接方式。 ...
  • 幾乎所有的高級編程語言都有自己的垃圾回收機制,開發者不需要關註記憶體的申請與釋放,Python 也不例外。Python 官方團隊的文章 https://devguide.python.org/internals/garbage-collector 詳細介紹了 Python 中的垃圾回收演算法,本文是這篇 ...
  • 如果您想查找高於或低於平均值的數字,可以不必計算該平均值,就能查看更高或更低的值。通過Java應用程式,可以自動突出顯示這些數字。除了快速突出顯示高於或低於平均值的值外,您還可以查看高於或低於的值的個數。現在讓我們看看如何在 Java應用程式中實現此操作。 引入jar包 導入方法1: 手動引入。將  ...
  • 第一種方式:使用{} firstDict = {"name": "wang yuan wai ", "age" : 25} 說明:{}為創建一個空的字典對象 第二種方式:使用fromkeys()方法 second_dict = dict.fromkeys(("name", "age")) #valu ...
  • 在golang中可以使用a := b這種方式將b賦值給a,只有當b能進行深拷貝時a與b才不會互相影響,否則就需要進行更為複雜的深拷貝。 下麵就是Go賦值操作的一個說明: Go語言中所有賦值操作都是值傳遞,如果結構中不含指針,則直接賦值就是深度拷貝;如果結構中含有指針(包括自定義指針,以及切片,map ...
  • 本文結合京東監控埋點場景,對解決樣板代碼的技術選型方案進行分析,給出最終解決方案後,結合理論和實踐進一步展開。通過關註文中的技術分析過程和技術場景,讀者可收穫一種樣板代碼思想過程和解決思路,並對Java編譯器底層有初步瞭解。 ...