Administrator
发布于 2024-02-05 / 485 阅读
0

acme.sh申请Let’s Encrypt的https证书 (阿里云DNS)

acme.sh 实现了 acme 协议, 可以从 letsencrypt 生成免费的证书.

主要步骤:

  1. 安装 acme.sh

  2. 生成证书

  3. copy 证书到 nginx/apache 或者其他服务

  4. 更新证书

  5. 更新 acme.sh

下面详细介绍.

一. 安装 acme.sh

安装很简单, 一个命令:

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

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

  1. 把 acme.sh 安装到你的 home 目录下:

~/.acme.sh/

并创建 一个 shell 的 alias, 例如 .bashrc,方便你的使用: alias acme.sh=~/.acme.sh/acme.sh

  1. 自动为你创建 cronjob, 每天 0:00 点自动检测所有的证书, 如果快过期了, 需要更新, 则会自动更新证书.

更高级的安装选项请参考: https://github.com/Neilpang/acme.sh/wiki/How-to-install

安装过程不会污染已有的系统任何功能和文件, 所有的修改都限制在安装目录中: ~/.acme.sh/

二. 生成证书

温馨提示:如果第二次生成,可以从第4步开始,不需要重复前面1-3步操作

1、阿里云云账号AccessKey ID和AccessKey Secret

如何获取阿里云云账号AccessKey ID和AccessKey Secret - 阿里云

2、指定默认的CA机构

acme.sh --set-default-ca --server letsencrypt

3、配置AccessKey ID和AccessKey Secret

export Ali_Key="xxxxxxx" && export Ali_Secret="xxxxxx"

4、生成证书

acme.sh --issue --dns dns_ali -d ubock.com -d *.ubock.com

结果如下:

5、安装证书

注意, 默认生成的证书都放在安装目录下: ~/.acme.sh/, 请不要直接使用此目录下的文件, 例如: 不要直接让 nginx/apache 的配置文件使用这下面的文件. 这里面的文件都是内部使用, 而且目录结构可能会变化.

正确的使用方法是使用 --install-cert 命令,并指定目标位置, 然后证书文件会被copy到相应的位置, 例如:

Apache example:

acme.sh --install-cert -d ubock.com -d *.ubock.com \
--cert-file      /path/to/certfile/in/apache/cert.pem  \
--key-file       /path/to/keyfile/in/apache/key.pem  \
--fullchain-file /path/to/fullchain/certfile/apache/fullchain.pem \
--reloadcmd     "sudo service apache2 force-reload"

Nginx example:

acme.sh --install-cert -d ubock.com -d *.ubock.com \
--key-file       /home/ecs-user/ubock/cert/ubock.com.key  \
--fullchain-file /home/ecs-user/ubock/cert/fullchain.cer \
--reloadcmd     "sudo service nginx force-reload"

(一个小提醒, 这里用的是 service nginx force-reload, 不是 service nginx reload, 据测试, reload 并不会重新加载证书, 所以用的 force-reload)

Nginx 的配置 ssl_certificate 使用 /etc/nginx/ssl/fullchain.cer ,而非 /etc/nginx/ssl/<domain>.cer ,否则 SSL Labs 的测试会报 Chain issues Incomplete 错误。

5、查看已安装证书信息

acme.sh --info -d ubock.com

输出结果:

三、更新证书

证书默认在 60 天以后会自动更新, 你无需任何操作, 你不用关心.

查看更新时间命令如下:

crontab  -l

我这里修改为每月的1号和20号0点0分更新


0 0 1,20 * * "/home/ecs-user/.acme.sh"/acme.sh --cron --home "/home/ecs-user/.acme.sh" > /dev/null

四、更新 acme.sh

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

升级 acme.sh 到最新版 :

acme.sh --upgrade

如果你不想手动升级, 可以开启自动升级:

acme.sh --upgrade --auto-upgrade

之后, acme.sh 就会自动保持更新了.

你也可以随时关闭自动更新:

acme.sh --upgrade --auto-upgrade  0