部署免费SSL证书-acme脚本

ACME自签证书

https

acme 脚本部署免费的 SSL 证书的教程,到期自动续签,比国内去域名服务厂商那里手动申请方便很多。大部分教程可以在 acme 脚本的 Github 仓库中找到,但是由于国内访问 Github 总是出问题,因此在这里简单记录一下。

获取API-KEY 设置环境变量

官网获取cloudfare api-key,设置环境变量。获取方法参考教程

API-KEY:获取位置如图

API-KEY

ZoneID与AccountID获取位置:

ID

设置环境变量

export CF_Token="Your Api Key"
export CF_Zone_ID="Your Zone ID"
export CF_Account_ID="Your Account ID"

安装ACME脚本

Check this project https://github.com/acmesh-official/get.acme.sh

curl https://get.acme.sh | sh -s email=my@example.com

Or:

wget -O - https://get.acme.sh | sh -s email=my@example.com

Or, Install from git Clone this project and launch installation:

git clone https://github.com/acmesh-official/acme.sh.git
cd ./acme.sh
./acme.sh --install -m my@example.com

获取证书

./acme.sh --issue -d 'mydomain.com' -d '*.mydomain.com' -k ec-256 --dns dns_cf --dnssleep 60

安装证书

可以使用图形化界面导入ssl证书(宝塔面包、1panel面板),或者修改配置文件:

# Caddy Server
tls /srv/ssl/example.com_fullchain.cer /srv/ssl/example.com.key

# nginx
ssl_certificate /srv/ssl/example.com_fullchain.cer;
ssl_certificate_key /srv/ssl/example.com.key;

也可使用脚本配置证书。脚本配置证书命令:

acme.sh --install-cert \
-d example.com --ecc \
--key-file /srv/ssl/example.com.key \
--fullchain-file /srv/ssl/example.com_fullchain.cer \
--reloadcmd "rc-service caddy reload"

参数说明:

  • --install-cert:安装证书,把证书文件复制到相应的目录。
  • -d:指定域名。
  • --ecc:ecc 证书使用此参数,对应签发时使用的-k ec-256
  • --key-file:指定 key 的存储路径。
  • --fullchain-file:指定 合并的证书文件 的存储路径。
  • --reloadcmd:完成后重新加载 caddy,可不带该参数。脚本结束后使用 systemctl restart nginxnginx -s reload 重启 nginx。

自动更新证书

acme.sh 可以使用 crontab 定时检查证书是否过期,并重新签发。crontab 文件一般位于 /var/spool/cron//etc/crontabs 目录下。

crontab -l 查看计划任务;crontab -e 编辑计划任务。

cronjob 格式一般如下:

# 分钟 小时 日期 月份 星期 命令
17 02 * * * "/PATH/.acme.sh"/acme.sh --cron --home "/PATH/.acme.sh" > /dev/null

表示每天凌晨 02:17 检查证书是否到期。默认设定证书到期前 30 天更新证书。

如果安装时 cronjob 没有添加成功,可以使用 acme.sh --install-cronjob 手动添加。

手动更新证书

# 更新一个证书
acme.sh --renew -d example.com --ecc

# 更新所有证书
acme.sh --renew-all

# 运行 cronjob 来更新证书(可用于检查 cronjob 命令是否正确)
acme.sh --cron

更新证书时,会自动跳过未到期的。可以使用 --force 参数进行强制更新。

下一篇