因为阿里云的免费证书只有三个月的有效期,每次更换都比较繁琐,所以找到了 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