github: https://github.com/Neilpang/acme.sh
或者直接访问: https://acme.sh

功能介绍:

支持派发的证书有:
1.Letsencrypt.org CA
2.BuyPass.com CA
3.Pebble strict Mode
4.ZeroSSL.com CA (2020-8-27新增)

支持签发ECDSA类型(ECC)
支持自动续签
多种签发模式(本地服务器,80端口,443端口,nginx,阿帕奇,dns 等等)
无需烦琐配置,几条命令即可搞定

安装

# 连接SSH,打开命令行(这个我就不教了,不懂百度)
# 然后 二选一

curl https://get.acme.sh | sh
# 或
wget -O -  https://get.acme.sh | sh

然后就完成安装了,后面分别介绍 Let's EncryptBuyPass 证书签发
博主使用的签发方式是DNS API(推荐),优势是不依靠服务器,自动续签.

注意,在安装完成后关闭SSH控制台,然后重新连接SSH控制台!!!

# 开启acme.sh脚本自动更新
acme.sh  --upgrade  --auto-upgrade

打开链接: https://github.com/Neilpang/acme.sh/wiki/dnsapi
查看是否支持你的DNS服务(现在大部分都是支持的,除非你的DNS服务商冷门,或者没有API)
不同服务商, 关键词字段不一样,所以要去上面给的链接查看
我用的阿里云DNS,所以使用的命令是:

export Ali_Key="sdfsdfsdfljlbjkljlkjsdfoiwje"
export Ali_Secret="jlsdflanljkljlfdsaklkjflsa"

Snipaste_2019-11-19_17-59-29.png
把key改成自己的以后在命令行粘贴运行就设置好DNSAPI了,下次签发证书就可以重复使用,无需再次设置了

签发 Let's Encrypt 证书(有效期90天,支持泛域名)

把sm.link改成你自己的域名.
注意第2行的 --dns dns_ali 字段, 把 dns_ali 改成你的DNS服务商字段, 在上方给的API链接查看.
单个证书支持签发多个域名,使用 -d 分隔. 泛解析需要引号括起来.

acme.sh --issue -d sm.link -d www.sm.link -d '*.sm.link' \
        --dns dns_ali \
        --keylength ec-256 \  # 此字段用于签发ECC证书,不需要请删除此行
        --days 60  # 此字段用于指定续签时间,60就是60天续签一次,不需要请删除此行

没明白DNS服务商字段是啥的看下图就知道了:
Snipaste_2019-11-19_18-12-29.png

至此就完成了 Let's Encrypt 证书的签发.
签发后证书默认保存在 root/.acme.sh/你的域名 目录.
fullchain.cer 文件是你的证书(证书和中间件), 安装SSL的时候就用它
你的域名.key 文件是你的key
剩下几个就不说了,一般用不上,或者你可以到官方文档了解


签发 BuyPass 证书(有效期180天,不支持泛域名)

欧洲的一家公司,最近才推出这个免费证书的.

首次使用需要注册, 输入命令:
acme.sh --server https://api.buypass.com/acme/directory \
        --register-account  --accountemail me@example.com

# 把 me@example.com 改成你的邮箱
开始签发:
acme.sh --server https://api.buypass.com/acme/directory  \
        --issue -d sm.link -d www.sm.link \
        --dns dns_ali \
        --keylength ec-256 \  # 此字段用于签发ECC证书,不需要请删除此行
        --days 90  # 此字段用于指定续签时间,90就是90天续签一次,不需要请删除此行

# sm.link 改为你的域名,增加域名使用 `-d` 分隔

然后就完成证书签发了.
Snipaste_2019-11-19_18-49-49.png

DNS手动签发

有些朋友的DNS服务商可能没有API,这时可以使用手动验证的方式

Let's Encrypt

# 把域名改为你的,然后运行下方命令,之后会要求你解析TXT记录,按要求解析好
acme.sh --issue  -d sm.link -d "*.sm.link"  --dns --yes-I-know-dns-manual-mode-enough-go-ahead-please

# TXT记录解析完毕后,再运行下方命令,就可以签发成功了
acme.sh --renew  -d sm.link -d "*.sm.link"  --dns --yes-I-know-dns-manual-mode-enough-go-ahead-please

BuyPass

# 把域名改为你的,然后运行下方命令,之后会要求你解析TXT记录,按要求解析好
# 注意,不支持泛解析!!!
acme.sh --server https://api.buypass.com/acme/directory --issue -d sm.link --dns --yes-I-know-dns-manual-mode-enough-go-ahead-please

# TXT记录解析完毕后,再运行下方命令,就可以签发成功了
acme.sh --server https://api.buypass.com/acme/directory --renew -d sm.link --yes-I-know-dns-manual-mode-enough-go-ahead-please

DNS CNAME别名模式

同样的,如果你的DNS解析商不支持API,还可以使用别名模式签发证书,比手动模式更方便。

要求和准备

1. 一个多余的域名,用来给需要签发证书的域名做CNAME记录
2. 注册一个支持API的DNS解析厂商,建议使用 Cloudflare.com 或 DNSPod.cn

这里举个例子
我多余的域名是:abc.com, 并且被托管在 Cloudflare.com
而我需要申请SSL证书的域名是:sm.link, 但是我的这个域名DNS托管解析商并没有API

开始签发

比如我们要给 sm.link , www.sm.link , *.sm.link 签发证书
首先给sm.link解析CNAME记录: 
_acme-challenge.sm.link 到 _acme-challenge.abc.com
_acme-challenge.www.sm.link 到 _acme-challenge.abc.com

到 ssh 控制台设置DNS解析商的API令牌(abc.com的DNS解析商)
export CF_Token="sdfsdfsdfljlbjkljlkjsdfoiwje"
export CF_Account_ID="xxxxxxxxxxxxx"

签发证书
acme.sh --issue \
    -d sm.link \
    -d www.sm.link \
    -d '*.sm.link' \
    --challenge-alias abc.com \
    --dns dns_cf

到这里我们就完成了证书的签发

其他命令

amce.sh --lsit  查看已经颁发的证书列表
acme.sh --romove -d example.com &&  rm -fr /root/.acme.sh/example.com 删除证书列表里的证书,并删除证书文件夹
acme.sh --revoke -d example.com 吊销已经签发的证书(不是单纯的删除证书哦,是吊销!)

# 安装/复制 SSL证书到Nginx SSL存放目录,每次更新续签证书后,会自动更新Nginx SSL文件,并重载Nginx配置文件
acme.sh --install-cert -d 'sm.link' \
--key-file       /www/server/panel/vhost/ssl/sm.link/privkey.pem \
--fullchain-file /www/server/panel/vhost/ssl/sm.link/fullchain.pem \
--reloadcmd     "/etc/init.d/nginx reload"

教程就到这里,如果你还有什么不清楚的,可以在下方留言, 或者到项目的wiki查看文档.

Vultr, 注册就送100$, 价格实惠, 服务器节点多多
最后修改:2021 年 01 月 28 日 05 : 36 PM
如果觉得我的文章对你有用,请随意赞赏