因為阿里云的免費證書只有三個月的有效期,每次更換都比較繁瑣,所以找到了 acme.sh
,還有一種 certbot
我沒有去了解,就直接使用了 acme.sh
來更新證書,acme.sh
的主要特點就是:
- 支持多種 DNS 服務商
- 自動化續期
- 直接指定證書路徑
足以解決證書有效期問題。
1. 安裝 acme.sh
如果尚未安裝 acme.sh,切換到常用安裝目錄下通過以下命令安裝,并加載環境變量和系統配置::
curl https://get.acme.sh | sh -s email=your_email@example.com
source ~/.bashrc
其他安裝方式:
git clone https://gitee.com/neilpang/acme.sh.git
cd acme.sh
./acme.sh --install -m your_email@example.com
source ~/.bashrc
2. 獲取阿里云 DNS API 密鑰
登錄阿里云控制臺,進入 RAM 訪問控制
,創建一個具有 DNS
管理權限的子用戶,并獲取其 AccessKey ID
和 AccessKey Secret
。
可參考 創建RAM用戶 幫助文檔查看詳細規則。
創建用戶賬號后分配權限,選擇 AliyunDNSFullAccess
為一個子用戶授予完全管理云解析DNS 的權限。分配完成后會列表中會有復制按鈕,需要保存你的 AccessKey ID
和 AccessKey Secret
,之后無法獲取。
詳細步驟參考 子用戶權限管理 幫助文檔。
3. 配置阿里云 DNS
上一步獲取到的 AccessKey ID
和 AccessKey Secret
API 秘鑰,配置到 acme.sh
中:
vim acme.sh
export Ali_Key="your_aliyun_access_key"
export Ali_Secret="your_aliyun_access_secret"
4. 申請 SSL 證書并自動續期
申請證書
acme.sh --issue --dns dns_ali -d example.com
創建證書存放目錄
mkdir -p /etc/nginx/cert/example.com
安裝證書并設置自動更新
acme.sh --install-cert -d example.com \--certpath /etc/nginx/cert/example.com/cert.pem \--keypath /etc/nginx/cert/example.com/privkey.pem \--fullchainpath /etc/nginx/cert/example.com/fullchain.pem \--reloadcmd "systemctl reload nginx"
檢查自動續期配置
crontab -l
acme
自動設置定時任務,定期檢查并更新證書,無需手動操作。
5. 域名解析到當前服務器并修改nginx配置文件
阿里云域名解析到當前服務器:
server
{listen 80;server_name example.com;rewrite ^(.*) https://$host$1 permanent;
}server {listen 443 ssl;server_name example.com;root /root/example.com/public_html/public;index index.php index.html index.htm;ssl_certificate /etc/nginx/cert/example.com/fullchain.pem;ssl_certificate_key /etc/nginx/cert/example.com/privkey.pem;ssl_session_cache shared:SSL:1m;ssl_session_timeout 10m;ssl_ciphers HIGH:!aNULL:!MD5;ssl_prefer_server_ciphers on;...}
6. acme常用命令
查看證書列表:
acme.sh --list
或
"/root/.acme.sh"/acme.sh --list
查看證書信息:
acme.sh --info -d example.com
手動續期證書:
acme.sh --renew -d example.com
刪除證書
acme.sh --remove -d example.com
7. 注意事項
- 證書默認有效期為 90 天,
acme.sh
會自動續期。 - 如果使用其他 DNS 服務商,需調整相應的 API 配置。
- 更多詳細配置參考官方文檔:
過程中遇到的問題
openssl 版本過低。
centos7|操作系統|升級openssl-1.0.2k到openssl-3.3.0