目录

acme.sh 使用技巧

安装

1
curl https://get.acme.sh | sh -s email=<your_email>

配置 alias 到 zsh 中

1
alias acme.sh=/root/.acme.sh/acme.sh

或者设置软链接

1
ln -s /root/.acme.sh/acme.sh /usr/local/bin/acme.sh

生成证书

通过服务器来生成

  • Nginx
1
acme.sh --issue -d mydomain.com --nginx
  • Apache
1
acme.sh --issue -d mydomain.com --apache

通过域名解析商提供的 api 来生成(个人最常用)

介绍
acme.sh 目前支持 cloudflare, dnspod, cloudxns, godaddy 以及 ovh 等数十种解析商的自动集成.

生成 api 的配置信息,这个请根据官方的来,链接: https://github.com/acmesh-official/acme.sh/wiki/dnsapi

配置好了过后,就可以使用了,以 dnspod 为例,

1
2
export DP_Id="<id>"
export DP_Key="<key>"

之后生成证书就可以直接这样:

1
./acme.sh --issue --dns dns_dp -d example.com
1
./acme.sh --issue --dns dns_dp -d example.com -d *.example.com

切换 CA 机构

  • 切换到 Let’s Encrypt
1
acme.sh --set-default-ca --server letsencrypt
  • 切换 Buypass
1
acme.sh --set-default-ca --server buypass
  • 切换 ZeroSSL
1
acme.sh --set-default-ca --se

使用证书

1
2
3
4
5
acme.sh --install-cert -d example.com \
--key-file       /etc/nginx/ssl/example.com/example.com.key  \
--fullchain-file /etc/nginx/ssl/example.com/fullchain.cer \
--ca-file /etc/nginx/ssl/example.com/ca.cer \
--reloadcmd     "systemctl restart nginx"

然后配置 Nginx 的配置文件即可:

1
2
3
ssl_certificate         /etc/nginx/ssl/example.com/fullchain.cer;
ssl_certificate_key     /etc/nginx/ssl/example.com/example.com.key;
ssl_trusted_certificate /etc/nginx/ssl/example.com/ca.cer;

快速配置证书

在 zsh 中添加一个函数:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
function ac() {
    domain="$1"

    if [ -z "$domain" ]; then
        echo "Usage: ac <domain>"
        return 1
    fi

    ssl_dir="/etc/nginx/ssl/$domain"
    if [ ! -d "$ssl_dir" ]; then
        mkdir -p "$ssl_dir"
    fi

    acme.sh --issue -d "$domain" --dns dns_cf
    acme.sh --install-cert -d "$domain" \
        --key-file "$ssl_dir/$domain.key" \
        --fullchain-file "$ssl_dir/fullchain.cer" \
        --ca-file "$ssl_dir/ca.cer" \
        --reloadcmd "systemctl restart nginx"

    echo "SSL certificate for $domain has been generated and installed, and Nginx reloaded."
}

--dns dns_cf 这儿要替换成自己的 dns 服务商对应的名字。

将其压缩成一行:

1
2
# Add an alias for quick SSL certificate generation and Nginx reload
function ac() { domain="$1"; if [ -z "$domain" ]; then echo "Usage: ac <domain>"; return 1; fi; ssl_dir="/etc/nginx/ssl/$domain"; if [ ! -d "$ssl_dir" ]; then mkdir -p "$ssl_dir"; fi; acme.sh --issue -d "$domain" --dns dns_cf; acme.sh --install-cert -d "$domain" --key-file "$ssl_dir/$domain.key" --fullchain-file "$ssl_dir/fullchain.cer" --ca-file "$ssl_dir/ca.cer" --reloadcmd "systemctl restart nginx"; echo "SSL certificate for $domain has been generated and installed, and Nginx reloaded."; }

之后当我新添加一个域名的时候,直接使用

1
ac new.example.com

即可生成对应的证书,同时自动将其复制到 /etc/nginx/ssl/$domain 中,最后只需要自己替换一下 Nginx 对应域名的 SSL 配置即可。