阿里雲伺服器如何安裝和續簽Let’s Encrypt證書
- 1230字
- 6分鐘
- 2024-07-09
Let’s Encrypt 是一個免費的、自動化的、開放的證書頒發機構(CA),旨在通過提供免費的SSL/TLS證書來提高整個互聯網的安全性。本文將詳細介紹如何在阿里雲伺服器上安裝Let’s Encrypt證書,並使用Certbot工具實現證書的自動續簽。
安裝前的準備
在開始安裝Let’s Encrypt證書之前,請確保你的伺服器已經安裝了Nginx,並且域名已經解析到伺服器的IP地址。如果你的伺服器使用的是Alibaba Cloud Linux系統,可以使用以下命令來安裝Nginx:
1sudo yum install nginx -y2sudo systemctl start nginx3sudo systemctl enable nginx
安裝Certbot
Certbot 是 EFF 開發的一個自動化客戶端工具,用於從 Let’s Encrypt 獲取和安裝證書。我們需要使用yum命令來安裝Certbot及其相關組件。
- 添加EPEL倉庫:
1sudo yum install epel-release -y2
3# 如果上述命令安裝報錯,可先卸載epel-aliyuncs-release再重新安裝4sudo yum remove epel-aliyuncs-release -y5sudo yum install epel-release -y
- 安裝Certbot和Nginx插件:
1sudo yum install certbot python3-certbot-nginx -y
獲取和安裝證書
安裝完Certbot後,可以通過以下命令為所有二級域名統一簽發證書,將example.com替換為你的真實域名:
1sudo certbot certonly --manual --preferred-challenges dns -d *.example.com -d example.com
該命令會詢問你一系列問題,並會生成一個txt記錄需要你記錄到dns伺服器上,如圖所示:
到阿里雲雲解析DNS中找到當前域名,添加一個txt記錄,把上圖中出現的記錄值記錄進去,如下圖所示:
檢查dns txt記錄是否正確,正確後回到終端回車即可,如下圖所示:
Certbot完成後,你的證書和密鑰文件通常會存儲在/etc/letsencrypt/live/你的域名/
目錄中。
編輯Nginx配置文件以使用新的SSL證書,通常位於 /etc/nginx/conf.d/ 目錄中。
1sudo vim /etc/nginx/conf.d/www.conf
添加如下代碼,並將yourdomain替換為你自己的domain:
1server {2 listen 80;3 server_name yourdomain.com *.yourdomain.com;4
5 # 重定向到HTTPS6 return 301 https://$host$request_uri;7}8
9server {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:
1sudo systemctl reload nginx
配置自動續簽
Let’s Encrypt 證書的有效期為90天,因此我們需要配置自動續簽以確保證書始終有效。Certbot 提供了一個cron任務,可以自動檢查並續簽即將到期的證書。
使用以下命令測試續簽證書:
1sudo certbot renew --dry-run
會發現報錯,原因是Certbot是通過DNS方式申請域名證書,因此在續訂時需要更新 DNS 記錄,所以直接使用 certbot renew 更新會報錯。我們可以使用[certbot-dns-aliyun]腳本來自動調用阿里雲接口,實現自動申請和續簽證書。
安裝Aliyun CLI工具:
1wget https://aliyuncli.alicdn.com/aliyun-cli-linux-latest-amd64.tgz2tar xzvf aliyun-cli-linux-latest-amd64.tgz3sudo cp aliyun /usr/local/bin4rm -rf aliyun
配置用戶
登錄 https://ram.console.aliyun.com/ 添加用戶,開啟 OpenAPI 調用訪問權限,並添加AliyunDNSFullAccess 授權。完成後需要記錄AccessKeyID 和 AccessKeySecret,並回到伺服器執行如下代碼:
1sudo aliyun configure
根據引導填入相應信息:
1Access Key Id []: AccessKeyID2Access Key Secret []: AccessKeySecret3Default Region Id []: cn-beijing4Default Output Format [json]: json (Only support json)5Default Language [zh|en] en: zh
成功後會顯示
1Configure 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
1wget https://cdn.jsdelivr.net/gh/justjavac/certbot-dns-aliyun@main/alidns.sh2sudo cp alidns.sh /usr/local/bin3sudo chmod +x /usr/local/bin/alidns.sh4sudo ln -s /usr/local/bin/alidns.sh /usr/local/bin/alidns5rm alidns.sh
如果https://cdn.jsdelivr.net/gh/justjavac/certbot-dns-aliyun@main/alidns.sh
無法下載,可本地下載後上傳到伺服器。
續簽
1# 測試申請2certbot certonly -d *.example.com --manual --preferred-challenges dns --manual-auth-hook "alidns" --manual-cleanup-hook "alidns clean" --dry-run3
4# 測試續簽5certbot renew --manual --preferred-challenges dns --manual-auth-hook "alidns" --manual-cleanup-hook "alidns clean" --dry-run6
7# 正式申請和續簽去掉 --dry-run 參數
設置定時任務實現自動續簽
1crontab -e
輸入以下內容:
10 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證書,提高網站的安全性。