安装 acme.sh
安装位置:~/.acme.sh/
1 2 3 4 5 6 7 8 9 10 11
| cd ~
curl https://get.acme.sh | sh -s email=me@example.com
git clone https://github.com/acmesh-official/acme.sh.git .acme.sh
alias acme.sh=~/.acme.sh/acme.sh
|
更新 acme.sh
1 2 3 4 5 6 7 8
| acme.sh --upgrade
acme.sh --upgrade --auto-upgrade
acme.sh --upgrade --auto-upgrade 0
|
生成证书
acme.sh 支持两种方式验证域名所有权:DNS 和 http
dns 方式(推荐)
这种方式不需要服务器和公网IP,只需要DNS的解析记录即可完成验证,但是需要配置一次apikey
腾讯云
dnspod创建Token地址
1 2 3 4 5 6 7 8 9
| export DP_key="xxxxxxxxx" export DP_Secret="xxxxxxxxxx" acme.sh --issue --dns dns_dp -d www.domain.com
acme.sh --issue --dns dns_ali -d www.domain.com -d test.domain.com
acme.sh --issue --dns dns_ali -d www.domain.com -d '*.domain.com'
|
阿里云
1 2 3
| export Ali_key="xxxxxxxxx" export Ali_Secret="xxxxxxxxxx" acme.sh --issue --dns dns_ali -d www.domain.com
|
http 方式
1 2 3 4 5 6 7 8 9 10 11
| acme.sh --issue -d www.domain.com --webroot /usr/share/nginx/html/
acme.sh --issue -d www.domain.com --nginx
acme.sh --issue -d www.domain.com --apache
acme.sh --issue -d www.domain.com --standalone
|
证书生成完成之后 acme.sh 会自动保存 API_ID 和 APK KEY,保存到 ~/.acme.sh/account.conf,下次再使用时,不需要再指定AccessKey了。
Nginx配置SSL证书
请参考以下配置修改自己域名的配置文件,不要直接复制!!!记得修改域名和证书和密钥的目录
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| server { listen 80; listen 443 ssl; server_name www.domain.com; root /www/default;
#----------- HTTPS -----------# #强制HTTPS if ($server_port !~ 443){ rewrite ^(/.*)$ https://$host$1 permanent; } #SSL相关配置 ssl_certificate /存放证书的目录/www.domain.com.crt; ssl_certificate_key /存放密钥的目录/www.domain.com.key; ssl_session_timeout 5m; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; ssl_prefer_server_ciphers on; }
|
安装证书
默认生成的证书都放在 ~/.acme.sh/DOMAIN/ 目录下,使用 –install-cert 命令,证书将会复制到相应的位置。
1
| acme.sh --install-cert -d www.domain.com --fullchain-file /存放证书的目录/www.domain.com.crt --key-file /存放密钥的目录/www.domain.com.key --reloadcmd "docker restart nginx"
|
--reloadcmd
证书安装完成后执行的命令。比如我的Nginx是在docker里运行的,我就改为了docker restart nginx
来重启Nginx。如果你是直接安装的Nginx可以改为systemctl reload nginx
来重启Nginx
更新证书
手动更新
在生成证书的命令上加一个 --force
表示更新证书
1
| acme.sh --issue --force --dns dns_dp -d git.imeepo.com
|
定时任务
每天凌晨3点查看域名ssl是否到期
1 2 3
| crontab -e
0 3 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null
|
撤销删除证书
1 2 3 4 5 6 7
| acme.sh --list acme.sh --revoke -d www.domain.com
acme.sh --list acme.sh --remove -d www.domain.com
|
本文参考 官方Wiki 由本人整理并实测后发布,仅供参考,一切以 官方Wiki 为准。