去年在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