1、安装acme.sh

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

或:

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

把上面 my@example.com 改成您的邮箱地址。

普通用户和 root 用户都可以安装使用. 安装过程进行了以下几步:

  • 把 acme.sh 安装到你的 home 目录下:~/.acme.sh/,并创建 一个 nginx 的 alias, 方便你的使用: alias acme.sh=~/.acme.sh/acme.sh(重启生效)
  • 自动为你创建 cronjob, 每天 0:00 点自动检测所有的证书, 如果快过期了, 需要更新, 则会自动更新证书。
    通过 crontab -l 查看 crontab 任务。

所以安装完需要重启下服务器以生效。

其他安装方法参考:https://github.com/Neilpang/acme.sh/wiki/How-to-install

2、申请namesilo dns api

export Namesilo_Key="申请的key"

这样就把 API key 赋予了环境变量。

3、生成证书

以 namesilo 为例:

acme.sh --issue --dns dns_namesilo --dnssleep 900 -d 您的域名 -d *.您的域名

注意: 这里等待时间设为 900 秒对于 namesilo 这更新很慢的解析是不够的,往往至少也得2000秒以上才能获利正确的 DNS 更新数据。

其他 DNS API 的使用方法参考:其他的DNS请参考:https://github.com/Neilpang/acme.sh/blob/master/dnsapi/README.md

如,使用 Cloudflare 管理的域名:

acme.sh --issue --dns dns_cf -d example.com -d www.example.com

4、复制/安装 证书

acme.sh --install-cert -d  您的域名  \
--key-file /www/ssl/您的域名/您的域名 .key \
--fullchain-file /www/ssl/您的域名/fullchain.cer \
--reloadcmd "/etc/init.d/nginx reload"

说明

  • --key-file--fullchain-file 后的路径要换成您要存放证书的路径,并事先手工新建好相应的目录。
  • --reloadcmd 即重启 Nginx 的命令,不同安装环境是不同命令的,要自行更改。

更多命令信息参考acme.sh中文说明:https://github.com/Neilpang/acme.sh/wiki/%E8%AF%B4%E6%98%8E

5、设定自动续签

安装了ACME后,它会添加一个自动任务到你服务器的Cron里,每天都会检查你的证书是否快要过期,ACME会自动帮你续签。

如果要手工强制续签证书,可以执行:

acme.sh --renew -d example.com --force

6、更新 acme.sh

目前由于 acme 协议和 letsencrypt CA 都在频繁的更新, 因此 acme.sh 也经常更新以保持同步。

  • 升级 acme.sh 到最新版:
acme.sh --upgrade
  • 开启自动升级:
acme.sh --upgrade --auto-upgrade
  • 关闭自动更新:
acme.sh --upgrade --auto-upgrade 0
  • 停止证书续订:
acme.sh --remove -d example.com [--ecc]

停止续订后,证书/密钥文件并不会从磁盘中删除。

需要手工删除相应的目录(例如~/.acme.sh/example.com)。

  • 查看证书列表:
acme.sh --list
  • 删除证书:
acme.sh remove <SAN_Domains>
  • 卸载acme.sh:
acme.sh --uninstall

7、修改 Nginx 配置文件启用 ssl

根据 nginx 部署的不同环境,修改vhost 相应的 conf 文件,如:

server {
  listen 443 ssl http2;
  server_name 域名;
  ssl_certificate /www/ssl/您的域名/fullchain.cer;
  ssl_certificate_key /www/ssl/您的域名/您的域名.key;
}

上面只是一个范例,比如在 BT 面板,对 ssl_certificate 和 ssl_certificate_key 的路径,以及命名,都专门的特别要求,需要根据实际情况修改。

发表回复