本文以默认 CA ZeroSSL 为例,切换默认CA以及如何使用请参考 acme.sh Wiki

博主推荐使用 DNS 方式验证签发证书,简单快捷

安装 acme.sh

一键脚本

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

手动安装

如果是国内的机器,可以使用拖回源码直接安装:

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

请注意替换 my@example.com 为你自己的邮箱

安装完成后重新加载 Bash:

source ~/.bashrc

然后也可以开启自动更新:

acme.sh --upgrade --auto-upgrade

注册账号

acme.sh  --register-account  -m my@example.com --server zerossl

签发证书

使用 HTTP 验证签发证书

首先我们要做一下准备工作,假设你域名是 example.com ,解析到你的服务器让其生效后,我们建立一个目录:

mkdir -p /var/www/ZeroSSL

我们的目的是绑定 http://example.com/.well-known/acme-challenge 到这个目录。

如果您用的 Nginx,那么新建一个配置文件:

server {
    listen 80;
    listen [::]:80;
    server_name example.com;

    location /.well-known/acme-challenge {
        root /var/www/ZeroSSL;
    }

    location / {
        rewrite    ^/(.*)$ https://$host/$1 permanent;
    }
}

我们以 ZeroSSL 为例,直接在终端运行

acme.sh --issue -d example.com -w /var/www/ZeroSSL

如果希望签发 ECC 证书,则运行

acme.sh --issue -d example.com --keylength ec-256 -w /var/www/ZeroSSL

如果需要多个域名,则运行

acme.sh --issue -d example.com -d example.org -w /var/www/ZeroSSL

然后就等他执行完,直到出现 Cert success 的提示,然后我们可以安装证书

Nginx

acme.sh --install-cert -d example.com \
--cert-file      /etc/nginx/certs/example.com/cert  \
--key-file       /etc/nginx/certs/example.com/key  \
--fullchain-file /etc/nginx/certs/example.com/fullchain \
--reloadcmd     "systemctl reload nginx.service"

对应的 Nginx 配置指定证书文件

ssl_certificate     /etc/nginx/certs/example.com/cert;
ssl_certificate_key  /etc/nginx/certs/example.com/key;

如果是 ECC 证书,则安装的时候需要带上 --ecc 参数,比如

acme.sh --install-cert --ecc -d example.com \
--cert-file      /etc/nginx/certs/example.com/cert  \
--key-file       /etc/nginx/certs/example.com/key  \
--fullchain-file /etc/nginx/certs/example.com/fullchain \
--reloadcmd     "systemctl reload nginx.service"

注意如果是多个域名,也仅需要在 -d 参数后面指定第一个域名即可。

使用 DNS 验证签发证书

有时候因为不想暴露一些二级域名,或者希望在多台机器上部署同一个域名的证书,这时候就需要使用 DNS 签发证书了,acme.sh 支持几十种 DNS API

这里以 Cloudflare 为例,登录 Cloudflare Dash 后在 API Token 菜单里添加一个 API Token

  1. 登录 Cloudflare 后在 API Token 菜单里添加一个 API Token
  2. 然后选择 Edit Zone DNS 的模板
  3. 选择你要编辑的域名,也可以加入你服务器的 IP 作为白名单
  4. 完成后复制显示的一串字符,需要填入下方的 CF_Token 参数
  5. 进入域名的管理页面,在右侧 API 列找到 Account ID 并复制

接着在终端运行

export CF_Token="sdfsdfsdfljlbjkljlkjsdfoiwje"
export CF_Account_ID="xxxxxxxxxxxxx"

然后开启 acme.sh 的 DNS API 模式申请证书

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

安装证书方法同上

Last modification:March 20, 2022
If you think my article is useful to you, please feel free to appreciate