Pre-1.前言

ACME.sh是一个基于ACME协议的证书小工具,可以很方便的获取、续费基于ACME协议CA的证书

Part-1. ACME.sh的安装

ACME.sh的安装非常简单,仅需一个命令就可以搞定
curl https://get.acme.sh | sh

由于部分过于纯净的系统没有cron,在安装ACME之前应该先运行此命令
sudo yum install cron* -y

输出应该如图所示

  • 如需使用Standalone模式,请自行安装socat,我就不多bb了

如需创建一个bash的Alias,请执行此命令
alias acme.sh=~/.acme.sh/acme.sh

至此,ACME.sh的安装已经全部完成

Part-2. 使用Http文件验证签发证书

Http验证方式需要你在网站根目录下放置一个文件,验证通过后会删除,此方式无法签发通配符证书
如果你使用的是Apache Web Server,执行此命令
acme.sh --issue -d example.com -d www.example.com --apache

如果你使用的是Nginx Web Server,执行此命令
acme.sh --issue -d example.com -d www.example.com --nginx

如果你不知道你使用的是什么Web Server,你就需要指定网站根目录,应执行此命令
acme.sh --issue -d example.com -d www.example.com --webroot /path/to/your/webroot

无论你使用的是哪一种方式,证书签发后都会恢复原样,但是需要人工进行SSL配置

Part-3. 使用TXT记录验证签发证书(DNS-Api)

选择这种方式需要你提供DNS服务商的Api,以便自动添加TXT记录来完成验证,此方式可签发通配符证书
如果你使用的是CloudFlare DNS,请执行以下命令

export CF_Key="example-key"
export CF_Email="example@example.com"
acme.sh --issue --dns dns_cf -d example.com -d www.example.com

如果你使用的是DNSPod(天朝版),请执行以下命令

export DP_Id="example-id"
export DP_Key="example-key"
acme.sh --issue --dns dns_dp -d example.com -d www.example.com

如果你使用的是DNSPod(国际版),请执行以下命令

export DPI_Id="example-id"
export DPI_Key="example-key"
acme.sh --issue --dns dns_dpi -d example.com -d www.example.com

如果你使用的是CloudXNS,请执行以下命令

export CX_Key="example-key"
export CX_Secert="example-secert"
acme.sh --issue --dns dns_cx -d example.com -d www.example.com

如果你使用的是GoDaddy,请执行以下命令

export GD_Key="example-key"
export GD_Secert="example-secert"
acme.sh --issue --dns dns_gd -d example.com -d www.example.com

如果你使用的是AWS Route53,请执行以下命令
Route53的Access Api Key获取步骤略微繁琐,请参照此文

export AWS_ACCESS_KEY_ID="example-id"
export AWS_SECRET_ACCESS_KEY="example-secert"
acme.sh --issue --dns dns_aws -d example.com -d www.example.com

如果你使用的是Azure DNS,请执行以下命令
Azure的Api Key获取步骤最为繁琐,请参照此文

export AZUREDNS_SUBSCRIPTIONID="example-subscription-id"
export AZUREDNS_TENANTID="example-tenant-id"
export AZUREDNS_APPID="example-app-id"
export AZUREDNS_CLIENTSECRET="example-client-secert"
acme.sh --issue --dns dns_azure -d example.com -d www.example.com

如果你使用的是Aliyun DNS,请执行以下命令

export Ali_Key="example-key"
export Ali_Secert="example-secert"
acme.sh --issue --dns dns_ali -d example.com -d www.example.com

如果你使用的是NSOne/NS1,请执行以下命令

export NS1_Key="example-key"
acme.sh --issue --dns dns_nsone -d example.com -d www.example.com

如果你使用的是HE DNS,请执行以下命令

export HE_Username="example-username"
export HE_Password="example-password"
acme.sh --issue --dns dns_he -d example.com -d www.example.com

这里只列出几个常用DNS服务商的命令,更多服务商请参考此处

Part-4. 使用TXT记录验证签发证书(手动创建记录)

此种模式没有任何其他需求,只需按照提供的TXT记录解析后即可签发证书,可签发通配符证书,不支持自动续期

  • 第一步,执行此命令
    acme.sh --issue -d example.com -d www.example.com --dns --yes-I-know-dns-manual-mode-enough-go-ahead-please

输出应该如图所示,会提示你添加TXT记录

  • 第二步,手动添加TXT记录并确认生效后,执行此命令
    acme.sh --renew -d example.com -d www.example.com --dns --yes-I-know-dns-manual-mode-enough-go-ahead-please

如果一切正常的话,证书已经签发,输出应该如图所示

下方会给出crt和key的路径,此时你就可以copy并install啦~

Part-5. 使用TXT记录验证签发证书(Alias模式)

当需要签发大量证书时,此种方式最为简便

先挖个坑,过段时间再填

Part-6. 安装说明

很多人可能并不知道,ACME其实是可以帮你自动安装证书的,可以节省你宝贵的时间(ACME.sh和WebServer要在同一台机器上)
以CentOS 7下Nginx为例,运行如下命令即可自动安装(此命令会被ACME记录下来,当证书续期/更新时会自动执行)

acme.sh --installcert -d example.com --keyfile /path/to/nginx/example.com.key --fullchain-file /path/to/nginx/example.com.crt --reloadcmd "systemctl force-reload nginx"

防踩坑小提示:部分WebServer Reload时不会更新证书(如nginx),故需要'force-reload',如果你不确定你的WebServer Reload时是否会更新证书,最好使用restart参数而不是reload

Part-7. 证书续期

如果你不是手动添加TXT记录/Alias模式签发的证书,那么ACME.sh会在到期前30天自动续期证书,无需人工干预
如果没有配置自动安装证书,你可能仍然需要手动配置证书

如需指定自动续期的日期,请在签发签发证书时使用--days参数
例如,在证书签发80天后执行续期,运行如下命令
acme.sh --issue -d example.com -d www.example.com --webroot /path/to/your/webroot --days 90

如果在自动续期前,需要人工续期请将签发命令中的--issue参数替换为--renew
举个例子
acme.sh --renew -d example.com -d www.example.com --webroot /path/to/your/webroot

Part-8. ACME.sh的更新

手动更新ACME.sh请执行
acme.sh --upgrade

升级ACME,并打开自动更新功能
acme.sh --upgrade --auto-upgrade

关闭自动更新功能
acme.sh --auto-upgrade 0

Part-9. ACME.sh支持的其他命令/参数

ACME.sh命令构成

acme.sh [命令] [参数]

ACME.sh命令(只说常用的)

--uninstall
卸载ACME.sh

--upgrade
升级ACME.sh

--issue
签发新的证书

--install-cert
讲过了,参照上文

--renew, -r
讲过了,参照上文

--renew-all
续期全部证书

--revoke
吊销证书

--remove
从ACME.sh中删除一张证书(记得先吊销)

--list
列出ACME.sh中的所有证书

--toPkcs
转换到pckcs12格式(pfx/p12),可以用于IIS

ACME.sh参数

--keylength, -k
指定密钥的长度,例如-k 2048,如需签发ECC算法密钥的证书,使用-k ec-256-k ec-384即可

--ocsp-must-staple, --ocsp
签发带有OCSP Must Staple拓展的证书,先挖坑,过后再填

--server
指定ACME服务器,默认为Let's Encrypt,如果需要签发其他CA的证书(比如Buypass),可使用此参数指定,for example
acme.sh --issue -d example.com -d www.example.com --webroot /path/to/your/webroot --server https://api.buypass.com/acme/directory

Buypass免费证书

既然都说到Buypass了,就顺便提一下,他家是180天有效期,Let's Encrypt是90天
用Buypass需要先注册账户
acme.sh --register-account --accountemail example@example.com --server https://api.buypass.com/acme/directory

然后就可以和Let's Encrypt一样正常签发证书了,就是要带--server--days 160,不然ACME.sh默认是在第60天续期的
acme.sh --issue -d example.com --webroot /path/to/your/webroot --server https://api.buypass.com/acme/directory

为保证良好的排版风格,请在搬运时使用 Markdown 版本,本文 Markdown 版本

Comments