部署免费SSL证书-acme脚本

ACME自签证书

https

获取API-KEY 设置环境变量

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

API-KEY:获取位置如图

image-20241110210615502

ZoneID与AccountID获取位置:

image-20241110210648494

设置环境变量

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 lovezsr.cfd -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」,如果用的是 nginx 可以使用 systemctl restart nginxnginx -s reload

证书路径及重新加载的命令,请根据需要调整功能。

自动更新证书

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 参数进行强制更新。

上一篇
下一篇