Linux下使用acme.sh申請和管理Let’s Encrypt證書

来源:https://www.cnblogs.com/xiaoyige/archive/2020/04/09/12667640.html
-Advertisement-
Play Games

關於Let’s Encrypt 免費SSL證書 Let’s Encrypt 作為一個公共且免費 SSL 的項目逐漸被廣大用戶傳播和使用,是由 Mozilla、Cisco、Akamai、IdenTrust、EFF 等組織人員發起,主要的目的也是為了推進網站從 HTTP 向 HTTPS 過度的進程,目前 ...


關於Let’s Encrypt 免費SSL證書

Let’s Encrypt 作為一個公共且免費 SSL 的項目逐漸被廣大用戶傳播和使用,是由 Mozilla、Cisco、Akamai、IdenTrust、EFF 等組織人員發起,主要的目的也是為了推進網站從 HTTP 向 HTTPS 過度的進程,目前已經有越來越多的商家加入和贊助支持。

Let’s Encrypt 免費 SSL 證書的出現,也會對傳統提供付費 SSL 證書服務的商家有不小的打擊。到目前為止,Let’s Encrypt 獲得 IdenTrust 交叉簽名,這就是說可以應用且支持包括 FireFox、Chrome 在內的主流瀏覽器的相容和支持,雖然目前是公測階段,但是也有不少的用戶在自有網站項目中正式使用起來。

Let’s Encrypt 的最大貢獻是它的 ACME 協議,第一份全自動伺服器身份驗證協議,以及配套的基礎設施和客戶端。這是為瞭解決一直以來 HTTPS TLS X.509 PKI 信任模型,即證書權威(Certificate Authority, CA)模型缺陷的一個起步。

在客戶端-伺服器數據傳輸中,公私鑰加密使得公鑰可以明文傳輸而依然保密數據,但公鑰本身是否屬於伺服器,或公鑰與伺服器是否同屬一個身份,是無法簡單驗證的。證書權威模型通過引入事先信任的第三方,由第三方去驗證這一點,並通過在伺服器公鑰上簽名的方式來認證伺服器。第三方的公鑰則在事先就約定並離線準備好,以備訪問時驗證簽名之用。這個第三方就稱為證書權威,簡稱 CA。相應的,CA 驗證過的公鑰被稱為證書。

問題是,如果伺服器私鑰泄露,CA 無法離線使對應的證書無效化,只能另外發佈無效記錄供客戶端查詢。也就是說,在私鑰泄露到 CA 發佈無效記錄的視窗內,中間人可以肆意監控服-客之間的傳輸。如果中間人設法屏蔽了客戶端對無效記錄的訪問,那麼直到證書過期,中間人都可以進行監控。而由於當前 CA 驗證和簽發證書大多手動,證書有效期往往在一年到三年。

Let’s Encrypt 簽發的證書有效期只有90天,甚至希望縮短到60天。有效期越短,泄密後可供監控的視窗就越短。為了支撐這麼短的有效期,就必須自動化驗證和簽發。因為自動化了,長遠而言,維護反而比手動申請再安裝要簡單。

證書的有效期,我堅持認為這是合理的。Let’s Encrypt 的證書是自動簽發的,對 Let’s Encrypt 的目標用戶(個人網站、小網站)來說,90天已經是一個很長的時間了。特別是個人網站,功能變數名稱所有權的變動是非常快的。可能前幾天功能變數名稱還屬於張三,後幾天就屬於李四了。因此自動簽發一個長有效期的證書是很容易產生問題的。如果證書的有效期是兩年,那麼經常交易功能變數名稱的人就可以長時間持有已經不屬於他們的功能變數名稱的證書。並且這種持有不受證書吊銷列表的控制,因為簽發的時候,所有權是沒有問題的,即使後來所有權變更了,Let’s Encrypt 也不會知道。所以設的有效期短一點,可以減少這個問題的影響。然後是易用性,現在已經有不少的 Let’s Encrypt 自動續期腳本了,配好後就不用管了,非常方便。

總之,強烈推薦站長和伺服器平臺用 Let’s Encrypt 向訪客提供加密連接。這是功能變數名稱認證未來的發展方向。

怎麼樣,看了上述有關 Let’s Encrypt 的介紹後,是否還鄙視這種“免費”SSL 證書呢?

下麵我們就具體的講述一下利用 Let’s Encrypt 的 ACME 協議在伺服器上運用 acme.sh 腳本來申請、管理 SSL 證書(這裡要強調一下的是 Let’s Encrypt 的 SSL 證書申請是必須要有伺服器 root 許可權的哦,也就是說必須是 VPS(雲主機)才可以的,虛擬主機上是無法申請獲取的,但是可以在 VPS(雲主機)上申請後部署到虛擬主機上)。

首先我們要先下載 acme.sh 到我們的主機上來,安裝命令非常的簡單,如下:

 
1 curl  https://get.acme.sh | sh

 

註:必須在 root 許可權下運行上述命令哦,切記!切記!切記!如果功能變數名稱都在阿裡雲,推薦使用 DNS 方式來驗證

把 acme.sh 安裝到你的 root 目錄下:~/.acme.sh/並創建 一個 bash 的 alias, 方便你的使用:

 
1 acme.sh=~/.acme.sh/acme.sh

 

安裝過程不會污染已有的系統任何功能和文件, 所有的修改都限制在安裝目錄中:

 
1 ~/.acme.sh/

安裝結束後會自動添加一條定時任務(官方解釋:自動為你創建 cronjob, 每天 0:00 點自動檢測所有的證書, 如果快過期了, 需要更新, 則會自動更新證書。),使用crontab -l 查看。

acme.sh 實現了 acme 協議支持的所有驗證協議. 一般有兩種方式驗證: http 和 dns 驗證.

1、http 方式需要在你的網站根目錄下放置一個文件, 來驗證你的功能變數名稱所有權,完成驗證. 然後就可以生成證書了.

 

 
1 acme.sh --issue -mydomain.com -www.mydomain.com --webroot /home/wwwroot/mydomain.com/

 

只需要指定功能變數名稱, 並指定功能變數名稱所在的網站根目錄. acme.sh 會全自動的生成驗證文件, 並放到網站的根目錄, 然後自動完成驗證. 最後會聰明的刪除驗證文件. 整個過程沒有任何副作用.

如果你用的 apache伺服器, acme.sh 還可以智能的從 apache的配置中自動完成驗證, 你不需要指定網站根目錄:

 
1 acme.sh --issue -mydomain.com --apache

 

如果你用的 nginx伺服器, 或者反代, acme.sh 還可以智能的從 nginx的配置中自動完成驗證, 你不需要指定網站根目錄:

 
1 acme.sh --issue -mydomain.com --nginx

 

註意, 無論是 apache 還是 nginx 模式, acme.sh在完成驗證之後, 會恢復到之前的狀態, 都不會私自更改你本身的配置. 好處是你不用擔心配置被搞壞, 也有一個缺點, 你需要自己配置 ssl 的配置, 否則只能成功生成證書, 你的網站還是無法訪問https. 但是為了安全, 你還是自己手動改配置吧.

如果你還沒有運行任何 web 服務, 80 埠是空閑的, 那麼 acme.sh 還能假裝自己是一個webserver, 臨時聽在80 埠, 完成驗證:

 
1 acme.sh --issue -mydomain.com --standalone

 

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

這種方式的好處是, 你不需要任何伺服器, 不需要任何公網 ip, 只需要 dns 的解析記錄即可完成驗證.

 
1 acme.sh --issue --dns -mydomain.com

 

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

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

 
1 acme.sh --renew -mydomain.com

 

註意第二次這裡用的是 –renew

dns 方式的真正強大之處在於可以使用功能變數名稱解析商提供的 api 自動添加 txt 記錄完成驗證.

acme.sh 目前支持 cloudflare, dnspod, cloudxns, godaddy 以及 ovh 等數十種解析商的自動集成.

以 阿裡雲 為例, 你需要先登錄到阿裡雲 賬號, 然後控制台,右上角你的頭像里,有Access Key 然後:

 
1 2 export Ali_Key="123123" export Ali_Secret="456456"

 

 
1 acme.sh --issue --dns dns_ali -aa.com -www.aa.com

 

多個功能變數名稱就增加 -d www.bb.com

經過等待120秒後,證書就會自動生成,提示:

 
1 2 3 4 [2018年 05月 20日 星期日 10:00:50 CST] Your cert is in /root/.acme.sh/domain.com/domain.com.cer [2018年 05月 20日 星期日 10:00:50 CST] Your cert key is in /root/.acme.sh/domain.com/domain.com.key [2018年 05月 20日 星期日 10:00:50 CST] The intermediate CA cert is in /root/.acme.sh/domain.com/ca.cer [2018年 05月 20日 星期日 10:00:50 CST] And the full chain certs is there: /root/.acme.sh/domain.com/fullchain.cer

提示這個說明證書就生成成功了

這裡給出的Ali_Key 和Ali_Secret 會被自動記錄下來, 將來你在使用 aliyun api 的時候, 就不需要再次指定了. 直接生成就好了:

 
1 acme.sh --issue -mydomain2.com --dns  dns_ali

 

3、 copy/安裝 證書

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

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

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

 
1 2 3 4 acme.sh --installcert -d domain.com \ --key-file /usr/local/nginx/conf/ssl/www.domain.cn.key \ --fullchain-file /usr/local/nginx/conf/ssl/www.domain.cn.cer \ --reloadcmd "service nginx reload"

 

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

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

值得註意的是, 這裡指定的所有參數都會被自動記錄下來, 併在將來證書自動更新以後, 被再次自動調用.

4、更新證書

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

5、更新 acme.sh

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

升級 acme.sh 到最新版 :

 
1 acme.sh --upgrade

 

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

 
1 acme.sh --upgrade --auto-upgrade

 

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

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

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

 

好了,到此acme.sh的使用基本就是這些了,至於是採用HTTP還是DNS方式來申請證書?就經驗來看,我比較喜歡DNS的驗證方式,因為這種方式的依賴性最小,更加的靈活,我建議大家都用DNS來驗證申請Let’s Encrypt證書。

當然,acme.sh還有不少實用的參數可以方便我們來管理已經通過acme.sh申請過證書、功能變數名稱等等,比如:

 
1 acme.sh --list

 

這個就是列出當前已經申請到證書的功能變數名稱信息,如下圖:

具體的參數,大家可以使用 acme.sh --help 來查看。

6、NGINX安裝證書

 

            PHP  
1 2 3 4 5 6 7 8 9                 ssl on;                 ssl_certificate              /usr/local/nginx/conf/ssl/www.domain.cer;                 ssl_certificate_key          /usr/local/nginx/conf/ssl/www.domain.key;                 ssl_ciphers                  EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256::!MD5;                 ssl_protocols                TLSv1 TLSv1.1 TLSv1.2;                 ssl_prefer_server_ciphers    on;                 ssl_session_cache            builtin:1000 shared:SSL:10m;                 ssl_session_timeout          1d;                 ssl_session_tickets          on;

在站點配置文件裡加入以上代碼即可,證書路徑是第三步 copy 寫的路徑,記得別搞錯

其實 acme.sh 的使用還是非常“傻瓜”的,只要照著指令參數做就可以輕鬆搞定的,上述的示例其實將功能變數名稱修改為自己的功能變數名稱就可以用了,其它的也是同樣的道理,簡單修改一下參數就可以拿來用的。目前,申請獲取 Let’s Encrypt 證書有很多種方法,軍哥的 LNMP 一鍵包里也可以直接申請的,網上也有不少申請 Let’s Encrypt 證書的教程,使用的工具可以說是五花八門。但是,就經驗來看 acme.sh 這個是最方便、最快捷、最省事兒的,因為使用的就是 Let’s Encrypt 的 ACME 協議,所以相容性絕對是最可靠的,Shell 腳本式的對系統幾乎沒有任何依懶性,有很強的自由度。

好了,申請獲取 Let’s Encrypt 證書的教程就講到這裡了,後期如果積累新的經驗我會第一時間分析給大家的,大家有什麼疑問也可以在下麵的評論里提出來。

轉載於:https://www.zhoutao.org/blog/2018/05/773.html


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

-Advertisement-
Play Games
更多相關文章
  • Debian 10.3 下載地址: "http://mirrors.163.com/debian cd/10.3.0 live/amd64/iso hybrid/debian live 10.3.0 amd64 standard.iso" 備份 更換 輸入以下內容: 註意許可權問題,否則可能編輯不了此 ...
  • 對於varninsh來講,緩存項修剪也叫緩存項刪除;我們在varnish伺服器上可以通過vcl語言來編寫緩存策略,對於某些緩存該如何緩存,緩存多久等等;假如我們在定義好緩存策略後,在定義緩存過期時間內,後端伺服器內容發生了變化,或者後端伺服器發生了內容更新,我們如果不把varnish上的緩存修剪掉... ...
  • 1、文件屬性 文件屬性是指: 文件的大小,創建時間,類型,許可權,屬組等。 文件的屬性總共10列 第一列 是文件的唯一標識,也稱之為 inode(節點)號 第二列 第一個字元 是指文件類型 \ 是代表文件類型為普通文件 (用f表示) d 是代表文件類型為目錄 (用d表示) l 是代表文件類型為連接文件 ...
  • 轉載:https://www.cnblogs.com/irockcode/p/7044722.html NR,表示awk開始執行程式後所讀取的數據行數. FNR,與NR功用類似,不同的是awk每打開一個新文件,FNR便從0重新累計. 下麵看兩個例子: 1,對於單個文件NR 和FNR 的 輸出結果一樣 ...
  • alias 功能固然好用,但在快捷方便的同時,隱藏了原始命令的結節。久而久之,不記得原始命令是什麼了,因些,我想到了實現原命令輸出,以作為提示。先看效果圖吧。 /etc/bash.bashrc 文件追加代碼如下: ### 開始自定義 ### #環境變數 PROGRAMS=/usr/local PHP ...
  • 記憶體映射 Linux 內核給每個進程都提供了一個獨立的虛擬地址空間,並且這個地址空間是連續的。這樣,進程就可以很方便地訪問記憶體,更確切地說是訪問虛擬記憶體。 虛擬地址空間的內部又被分為內核空間和用戶空間兩部分,不同字長(也就是單個 CPU 指令可以處理數據的最大長度)的處理器,地址空間的範圍也不同。比 ...
  • 今天給大家介紹兩種ASP中過濾器攔截的兩種方法。 一種是EF 的HtppModule,另一種則是靈活很多針對MVC的特性類 Attribute 具體什麼是特性類可以參考著篇文章:https://www.cnblogs.com/abc1069/p/6074171.html 在平常的練習或者項目中,整體 ...
  • 1.在命令行下輸入:sudo su ,之後會提示你輸入密碼 2.此時輸入你之前設定的密碼既可; 3.但有時會提示你該普通用戶不在sudoers文件里 4.此時可以使用以下命令來切換root用戶許可權:su - root ;之後輸入創建的root用戶密碼,回車確認; 可以看見用戶名已經變成了[root@ ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...