amtoaer

晓风残月

叹息似的渺茫,你仍要保存着那真!
github
x
telegram
steam
nintendo switch
email

免費獲取Let's Encrypt泛域名證書

去年在GoDaddy買的jeasonlau.xyz域名即將到期,然而最近囊中羞澀續費不起了,於是考慮將網站業務遷移到allwens.work域名下。

目前在jeasonlau.xyz域名下的服務主要有我的馬原毛概刷題工具、用於訂閱RSSRSSHub和個人使用的Cloudreve網盤,遷移的話我打算將其掛在不同的子域名下,所以打算看看能不能免費申請一張泛域名證書,結果還真找到了教程。

按著教程走了一遍,整個流程不過十分鐘,非常方便,本文主要記錄一下申請過程。😆

安裝acme.sh#

Let's Encrypt官方提供了一系列的申請方法文檔,但流程比較複雜。我們使用第三方工具acme.sh來簡化申請流程。

首先安裝acme.sh

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

該腳本進行的操作有:

  • acme.sh安裝到~/.acme.sh/
  • alias acme.sh = ~/.acme.sh/acme.sh,達到類似安裝到環境變量中的效果;
  • 自動創建cronjob腳本,每天自動檢測證書,如果快過期則自動更新。

使用DNS-API驗證獲取證書#

參考acme.sh 文檔可以發現,我們可以用很多種方式進行域名驗證來得到證書。因為我的服務器未備案,所以web的那幾種方式用起來都不是很方便,最終我選用了DNS-API來進行驗證。

DNS驗證指的是通過在你域名的 DNS 解析中加入指定的txt記錄來驗證你對域名的所有權,而DNS-API則是通過使用 DNS 提供商的 API 自動進行txt記錄的增加和刪除,達到自動驗證的效果。

對於不同的提供商,需要不同的API key,可以點擊此處查看詳細教程,此處以阿里雲為例。

  1. 首先在阿里雲賬號的 API 管理中獲取到AccessKey IDAccessKey Secret

  2. 在服務器中執行

    export Ali_Key=AccessKey ID
    export Ali_Secret=AccessKey Secret
    
  3. 運行以下命令獲取證書(以allwens.work為例)

    acme.sh --issue --dns dns_ali -d allwens.work -d *.allwens.work
    

    完成後,證書文件將會存放在~/.acme.sh/allwens.work中,後續acme.sh將會自動更新該文件夾內的證書。

    我目前尚不清楚更新時是否需要 API,因此為了保險又將第二步創建環境變量的語句寫到了~/.zshrc中。

在 web 服務器中使用證書#

因為嫌原有的路徑名過長,所以我首先在/etc下新建了cert文件夾,做了一個軟鏈接:

該步驟可以跳過,我只是為了讓路徑短一點 🤣

sudo mkdir /etc/cert
cd /etc/cert
ln -s ~/.acme.sh/allwens.work/allwens.work.cer ./
ln -s ~/.acme.sh/allwens.work/allwens.work.key ./

接著打開 web 服務器的配置文件(以nginx為例),找到需要使用證書的Server塊:

# Cloudreve
server {
        server_name drive.allwens.work;
        location / {
                proxy_pass http://localhost:5212;
        }
        client_max_body_size 30g;
        error_page 497 =301 https://$http_host$request_uri;
        listen 10000;
        # 加入如下內容
        ssl on;
        ssl_certificate /etc/cert/allwens.work.cer;
        ssl_certificate_key /etc/cert/allwens.work.key;

接著讓nginx重新加載配置文件即可:

nginx -s reload
載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。