去年在GoDaddy買的jeasonlau.xyz域名即將到期,然而最近囊中羞澀續費不起了,於是考慮將網站業務遷移到allwens.work域名下。
目前在jeasonlau.xyz域名下的服務主要有我的馬原毛概刷題工具、用於訂閱RSS的RSSHub和個人使用的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,可以點擊此處查看詳細教程,此處以阿里雲為例。
-
首先在阿里雲賬號的 API 管理中獲取到
AccessKey ID和AccessKey Secret -
在服務器中執行
export Ali_Key=AccessKey ID export Ali_Secret=AccessKey Secret -
運行以下命令獲取證書(以
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