阿里雲伺服器如何安裝和續簽Let’s Encrypt證書

Let’s Encrypt 是一個免費的、自動化的、開放的證書頒發機構(CA),旨在通過提供免費的SSL/TLS證書來提高整個互聯網的安全性。本文將詳細介紹如何在阿里雲伺服器上安裝Let’s Encrypt證書,並使用Certbot工具實現證書的自動續簽。

安裝前的準備

在開始安裝Let’s Encrypt證書之前,請確保你的伺服器已經安裝了Nginx,並且域名已經解析到伺服器的IP地址。如果你的伺服器使用的是Alibaba Cloud Linux系統,可以使用以下命令來安裝Nginx:

Terminal window
1
sudo yum install nginx -y
2
sudo systemctl start nginx
3
sudo systemctl enable nginx

安裝Certbot

Certbot 是 EFF 開發的一個自動化客戶端工具,用於從 Let’s Encrypt 獲取和安裝證書。我們需要使用yum命令來安裝Certbot及其相關組件。

  1. 添加EPEL倉庫:
Terminal window
1
sudo yum install epel-release -y
2
3
# 如果上述命令安裝報錯,可先卸載epel-aliyuncs-release再重新安裝
4
sudo yum remove epel-aliyuncs-release -y
5
sudo yum install epel-release -y
  1. 安裝Certbot和Nginx插件:
Terminal window
1
sudo yum install certbot python3-certbot-nginx -y

獲取和安裝證書

安裝完Certbot後,可以通過以下命令為所有二級域名統一簽發證書,將example.com替換為你的真實域名:

Terminal window
1
sudo certbot certonly --manual --preferred-challenges dns -d *.example.com -d example.com

該命令會詢問你一系列問題,並會生成一個txt記錄需要你記錄到dns伺服器上,如圖所示: txtdns

到阿里雲雲解析DNS中找到當前域名,添加一個txt記錄,把上圖中出現的記錄值記錄進去,如下圖所示: addtxtdns

檢查dns txt記錄是否正確,正確後回到終端回車即可,如下圖所示: txtdnscheck

Certbot完成後,你的證書和密鑰文件通常會存儲在/etc/letsencrypt/live/你的域名/目錄中。

編輯Nginx配置文件以使用新的SSL證書,通常位於 /etc/nginx/conf.d/ 目錄中。

Terminal window
1
sudo vim /etc/nginx/conf.d/www.conf

添加如下代碼,並將yourdomain替換為你自己的domain:

Terminal window
1
server {
2
listen 80;
3
server_name yourdomain.com *.yourdomain.com;
4
5
# 重定向到HTTPS
6
return 301 https://$host$request_uri;
7
}
8
9
server {
10
listen 443 ssl;
11
server_name yourdomain.com *.yourdomain.com;
12
13
ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
14
ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;
15
16
ssl_protocols TLSv1.2 TLSv1.3;
17
ssl_ciphers HIGH:!aNULL:!MD5;
18
19
# 其他Nginx配置,如根目錄、索引文件等
20
root /var/www/html;
21
index index.html;
22
23
location / {
24
try_files $uri $uri/ =404;
25
}
26
}

使用以下命令重新加載Nginx:

Terminal window
1
sudo systemctl reload nginx

配置自動續簽

Let’s Encrypt 證書的有效期為90天,因此我們需要配置自動續簽以確保證書始終有效。Certbot 提供了一個cron任務,可以自動檢查並續簽即將到期的證書。

使用以下命令測試續簽證書:

Terminal window
1
sudo certbot renew --dry-run

會發現報錯,原因是Certbot是通過DNS方式申請域名證書,因此在續訂時需要更新 DNS 記錄,所以直接使用 certbot renew 更新會報錯。我們可以使用[certbot-dns-aliyun]腳本來自動調用阿里雲接口,實現自動申請和續簽證書。

安裝Aliyun CLI工具:

Terminal window
1
wget https://aliyuncli.alicdn.com/aliyun-cli-linux-latest-amd64.tgz
2
tar xzvf aliyun-cli-linux-latest-amd64.tgz
3
sudo cp aliyun /usr/local/bin
4
rm -rf aliyun

配置用戶

登錄 https://ram.console.aliyun.com/ 添加用戶,開啟 OpenAPI 調用訪問權限,並添加AliyunDNSFullAccess 授權。完成後需要記錄AccessKeyID 和 AccessKeySecret,並回到伺服器執行如下代碼:

Terminal window
1
sudo aliyun configure

根據引導填入相應信息:

Terminal window
1
Access Key Id []: AccessKeyID
2
Access Key Secret []: AccessKeySecret
3
Default Region Id []: cn-beijing
4
Default Output Format [json]: json (Only support json)
5
Default Language [zh|en] en: zh

成功後會顯示

Terminal window
1
Configure Done!!!
2
..............888888888888888888888 ........=8888888888888888888D=..............
3
...........88888888888888888888888 ..........D8888888888888888888888I...........
4
.........,8888888888888ZI: ...........................=Z88D8888888888D..........
5
.........+88888888 ..........................................88888888D..........
6
.........+88888888 .......Welcome to use Alibaba Cloud.......O8888888D..........
7
.........+88888888 ............. ************* ..............O8888888D..........
8
.........+88888888 .... Command Line Interface(Reloaded) ....O8888888D..........
9
.........+88888888...........................................88888888D..........
10
..........D888888888888DO+. ..........................?ND888888888888D..........
11
...........O8888888888888888888888...........D8888888888888888888888=...........
12
............ .:D8888888888888888888.........78888888888888888888O ..............

如有報錯,請檢查是否有開啟 OpenAPI 調用訪問權限,並添加AliyunDNSFullAccess 授權。

安裝cerbot-dns-aliyun

Terminal window
1
wget https://cdn.jsdelivr.net/gh/justjavac/certbot-dns-aliyun@main/alidns.sh
2
sudo cp alidns.sh /usr/local/bin
3
sudo chmod +x /usr/local/bin/alidns.sh
4
sudo ln -s /usr/local/bin/alidns.sh /usr/local/bin/alidns
5
rm alidns.sh

如果https://cdn.jsdelivr.net/gh/justjavac/certbot-dns-aliyun@main/alidns.sh無法下載,可本地下載後上傳到伺服器。

續簽

Terminal window
1
# 測試申請
2
certbot certonly -d *.example.com --manual --preferred-challenges dns --manual-auth-hook "alidns" --manual-cleanup-hook "alidns clean" --dry-run
3
4
# 測試續簽
5
certbot renew --manual --preferred-challenges dns --manual-auth-hook "alidns" --manual-cleanup-hook "alidns clean" --dry-run
6
7
# 正式申請和續簽去掉 --dry-run 參數

設置定時任務實現自動續簽

Terminal window
1
crontab -e

輸入以下內容:

Terminal window
1
0 2 1 */1 * root certbot renew --manual --preferred-challenges dns --manual-auth-hook "alidns" --manual-cleanup-hook "alidns clean" --deploy-hook "nginx -s reload"

該任務將在每月的1號的凌晨2點0分執行一次,使用手動模式進行證書續簽,續簽成功後重新加載Nginx,以應用新的證書。在Crontab中,定時任務的格式由五個星號組成,這五個星號分別代表分鐘(0 – 59)、小時(0 – 23)、日期(1 – 31)、月份(1 – 12)、星期幾(0 – 7,0和7都表示星期日)。

總結

本文詳細介紹了如何在伺服器上安裝Let’s Encrypt證書,使用Certbot工具獲取和安裝證書,以及配置自動續簽的方法。通過這些步驟,你可以確保你的伺服器始終使用有效的SSL/TLS證書,提高網站的安全性。