使用lets encrypt 生成免費的證書

2021-09-12 18:42:36 字數 3763 閱讀 1092

說明

mr.l edited this page on 23 oct 2018 · 21 revisions

acme.sh 實現了 acme 協議, 可以從 letsencrypt 生成免費的證書.

主要步驟:

安裝 acme.sh

生成證書

copy 證書到 nginx/apache 或者其他服務

更新證書

更新 acme.sh

出錯怎麼辦, 如何除錯

下面詳細介紹.

安裝 acme.sh

安裝很簡單, 乙個命令:

curl | sh

普通使用者和 root 使用者都可以安裝使用. 安裝過程進行了以下幾步:

把 acme.sh 安裝到你的 home 目錄下:

~/.acme.sh/

並建立 乙個 bash 的 alias, 方便你的使用: alias acme.sh=~/.acme.sh/acme.sh

2). 自動為你建立 cronjob, 每天 0:00 點自動檢測所有的證書, 如果快過期了, 需要更新, 則會自動更新證書.

更高階的安裝選項請參考:

安裝過程不會汙染已有的系統任何功能和檔案, 所有的修改都限制在安裝目錄中: ~/.acme.sh/

生成證書

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

http 方式需要在你的**根目錄下放置乙個檔案, 來驗證你的網域名稱所有權,完成驗證. 然後就可以生成證書了.

只需要指定網域名稱, 並指定網域名稱所在的**根目錄. acme.sh 會全自動的生成驗證檔案, 並放到**的根目錄, 然後自動完成驗證. 最後會聰明的刪除驗證檔案. 整個過程沒有任何***.

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

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

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

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

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

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

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

更高階的用法請參考:

dns 方式, 在網域名稱上新增一條 txt 解析記錄, 驗證網域名稱所有權.

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

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

然後, acme.sh 會生成相應的解析記錄顯示出來, 你只需要在你的網域名稱管理面板中新增這條 txt 記錄即可.

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

acme.sh --renew -d mydomain.com

注意第二次這裡用的是 --renew

dns 方式的真正強大之處在於可以使用網域名稱解析商提供的 api 自動新增 txt 記錄完成驗證.

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

以 dnspod 為例, 你需要先登入到 dnspod 賬號, 生成你的 api id 和 api key, 都是免費的. 然後:

export dp_id=「1234」

export dp_key=「saddsdasdgdsf」

acme.sh --issue --dns dns_dp -d aa.com -d www.aa.com

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

acme.sh --issue -d mydomain2.com --dns dns_dp

更詳細的 api 用法:

copy/安裝 證書

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

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

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

nginx 的配置 ssl_certificate 使用 /etc/nginx/ssl/fullchain.cer ,而非 /etc/nginx/ssl/.cer ,否則 ssl labs 的測試會報 chain issues incomplete 錯誤。

–installcert命令可以攜帶很多引數, 來指定目標檔案. 並且可以指定 reloadcmd, 當證書更新以後, reloadcmd會被自動呼叫,讓伺服器生效.

詳細引數請參考:

值得注意的是, 這裡指定的所有引數都會被自動記錄下來, 並在將來證書自動更新以後, 被再次自動呼叫.

更新證書

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

更新 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

6. 出錯怎麼辦:

如果出錯, 請新增 debug log:

acme.sh --issue … --debug

或者:acme.sh --issue … --debug 2

請參考:

最後, 本文並非完全的使用說明, 還有很多高階的功能, 更高階的用法請參看其他 wiki 頁面.

注意:文章**於/%e8%af%b4%e6%98%8e

注:本人安裝到/home/目錄 ,故 alias acme.sh=/home/acme.sh/acme.sh

使用 let s encrypt 證書

let s encrypt 是個開放的 ca,提供免費的 tls 證書,旨在提高整個網際網路的安全性。let s encrypt 的自身的根證書已得到一些常見的根證書的簽名,通過它頒發的 tls 證書可在大部分的系統 瀏覽器上使用,相容性見 let s encrypt 通過 acme automat...

let s encrypt免費證書申請及使用

let s encrypt是國外一家提供免費ssl網域名稱證書的機構,申請過程非常簡單,但是免費期只有90天,不過到期可以免費續簽。git clone 註冊 cd letsencrypt letsencrypt auto certonly standalone email 554599744 qq....

letsencrypt自動續簽

let s encrypt申請的證書會有三個月的有效期,如何更方便的續期呢?所謂letsencrypt續期,續期相當於重新申請一次證書,然後在伺服器端將過期的證書替換掉即可。由於這個免費的證書只有3個月的有效期,所以需要提前申請好新的證書,然後部署到伺服器上。一般情況下在自己伺服器部署申請let s...