简介

acme.sh 是一个用 Shell 脚本编写的轻量级、功能强大的 ACME 客户端,用于从 Let’s Encrypt 或其他兼容 ACME 协议的证书颁发机构(CA)自动申请和续期免费的 TLS/SSL 证书。

本文根据本站的配置进行的实践过程

1.安装acme.sh

1.1 安装 acme.sh 并设置邮箱用来接受重要通知,如证书快过期未更新通知

1
curl https://get.acme.sh | sh -s email=xxx@qq.com

1.2 可能出现问题

A)问题:

1
curl: (7) Failed to connect to raw.githubusercontent.com port 443 after 0 ms: Couldn't connect to server

处理方案:源码下载运行

1
2
3
git clone https://gitee.com/neilpang/acme.sh.git
cd acme.sh
./acme.sh --install -m my@example.com

B)问题:
可能出现报错command not found

1
-bash: acme.sh: command not found

处理方案:重连终端后查看是否成功

1
acme.sh --version

2.申请证书(自动更新)

默认为zerossl, ‘–server letsencrypt’表示指定证书申请服务器为 Let’s Encrypt,更新证书的天数,默认值为 60 天,
注意:泛域名需要dns模式验证,本次采用webroot验证,每个二级域名都需要

–days xxx 为自动更新证书的时间

–webroot /etc/nginx/cert 指定验证文件根目录

默认为zerossl(-d 来配置多个域名)

1
acme.sh --issue -d brightchen.top -d www.brightchen.top -d dify.brightchen.top -d alist.brightchen.top -d minio.brightchen.top -d minioweb.brightchen.top -d waline.brightchen.top --webroot /etc/nginx/cert --days 10

letsencrypt证书(我的目前使用)

1
acme.sh --issue --server letsencrypt -d brightchen.top -d www.brightchen.top-d um.brightchen.top --webroot /etc/nginx/cert --days 30

增加域名的更新使用(注意letsencrypt每周最多5次) 加 --force来更新

比如需要增加新的二级域名cms.brightchen.top

1
acme.sh --issue --server letsencrypt -d brightchen.top -d www.brightchen.top -d um.brightchen.top -d cms.brightchen.top --webroot /etc/nginx/cert --days 30 --force

3.创建目录证书相关,验证文件相关目录

可以自定义其他目录

1
2
mkdir -p /etc/nginx/keystore/brightchen.top
mkdir -p /etc/nginx/cert

4.证书文件生成

1
2
3
4
acme.sh --install-cert -d brightchen.top \
--key-file /etc/nginx/keystore/brightchen.top/key.pem \
--fullchain-file /etc/nginx/keystore/brightchen.top/fullchain.cer \
--reloadcmd "docker restart nginx"

ps:docker exec -it nginx nginx -s reload 可以代替docker restart nginx

5.配置nginx 指定验证文件根目录

1
2
3
4
5
6
7
8
9
# ACME 请求优先处理

    location ^~ /.well-known/acme-challenge/ {

        alias /etc/nginx/cert/.well-known/acme-challenge/;

        try_files $uri =404;

    }

6.其他方案:自定义临时证书使用(不安全的ssl协议)

nginx 配置conf.d文件下创建default.conf

  • openssl: 调用 OpenSSL 工具。
  • req: 使用 X.509 证书生成和处理选项。
  • -x509: 直接输出自签名证书而不是生成一个证书签名请求。
  • -nodes: 不加密私钥(省略此参数会提示输入私钥密码)。
  • -days 365: 证书有效期为 365 天。
  • -newkey rsa:2048: 创建一个新的 2048 位 RSA 密钥对。
  • -keyout /etc/nginx/keystore/brightchen.top/key.pem: 指定私钥文件的输出路径。
  • `-out /etc/nginx/keystore/brightchen.top/fullchain.cer: 指定证书文件的输出路径。
    1
    2
    3
    4
    5
    6
    7
    8
    sudo openssl req \
    -x509 \
    -nodes \
    -days 365 \
    -newkey rsa:4096 \
    -keyout /etc/nginx/keystore/brightchen.top/key.pem \
    -out /etc/nginx/keystore/brightchen.top/fullchain.cer