acme.sh是一个流行的Let's Encrypt免费证书客户端,其协议支持完整,且支持众多DNS服务商的API部署,本文介绍软件的安装、并提供插件列表和翻译的命令帮助。
介绍
- 完全用Shell(Unix shell)语言编写的ACME协议客户端。
- 完整地实现ACME协议。
- 支持ACME v1和ACME v2
- 支持ACME v2通配符证书
- 简单,功能强大且易于使用。你只需要3分钟就可以学习它。
- 兼容Bash,dash和sh。
- 最简单的shell脚本实现的Let’s Encrypt免费证书客户端。
- 完全用Shell编写,不依赖于python或官方的Let’s Encrypt客户端。
- 只需一个脚本即可自动颁发,续订和安装证书。
- 不需要
root/sudoer
访问权限。 - 对Docker友好
- IPv6支持
- Cron作业通知续订或错误等
它可能是“最简单,最智能”的shell脚本,可以自动发布和续订Let’s Encrypt的免费证书。
安装
只需运行sudo curl https://get.acme.sh | sh
,下面是安装的过程:
qiushan@topvps:~$ sudo curl https://get.acme.sh | sh
[sudo] password for qiushan:
# 下载了get.acme.sh
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 705 0 705 0 0 393 0 --:--:-- 0:00:01 --:--:-- 393
# 下载了acme.sh
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 183k 100 183k 0 0 2346 0 0:01:20 0:01:20 --:--:-- 3610
# 开始运行acme.sh
[Wed May 22 11:37:37 CST 2019] Installing from online archive.
# 从github下载整个软件包,其中包含了deploy、dnsapi、notify三类shell脚本
[Wed May 22 11:37:37 CST 2019] Downloading https://github.com/Neilpang/acme.sh/archive/master.tar.gz
[Wed May 22 11:37:39 CST 2019] Extracting master.tar.gz
# 推荐适用于standalone模式的依赖:socat,如果使用webroot、dns-01等模式,这个可以忽略
[Wed May 22 11:37:39 CST 2019] It is recommended to install socat first.
[Wed May 22 11:37:39 CST 2019] We use socat for standalone server if you use standalone mode.
[Wed May 22 11:37:39 CST 2019] If you don't use standalone mode, just ignore this warning.
# 将脚本安装到用户目录
[Wed May 22 11:37:39 CST 2019] Installing to /home/qiushan/.acme.sh
[Wed May 22 11:37:39 CST 2019] Installed to /home/qiushan/.acme.sh/acme.sh
# 添加alias命令
[Wed May 22 11:37:39 CST 2019] Installing alias to '/home/qiushan/.bashrc'
[Wed May 22 11:37:39 CST 2019] OK, Close and reopen your terminal to start using acme.sh
# 添加cron任务
[Wed May 22 11:37:39 CST 2019] Installing cron job
49 0 * * * "/home/qiushan/.acme.sh"/acme.sh --cron --home "/home/qiushan/.acme.sh" > /dev/null
# 完成
[Wed May 22 11:37:39 CST 2019] Good, bash is found, so change the shebang to use bash as preferred.
[Wed May 22 11:37:39 CST 2019] OK
[Wed May 22 11:37:39 CST 2019] Install success!
至此就可以运行acme.sh
了。acme.sh最强大的地方是它支持非常多的dns服务商的api,因为作者是中国人,所以对国内dns服务商的支持比较好,其中也有很多其它用户贡献的插件。下面是acme.sh支持的dnsapi和deploy插件列表。
插件
dnsapi
dns_acmedns.sh
dns_acmeproxy.sh
dns_active24.sh
dns_ad.sh
dns_ali.sh # 阿里云
dns_autodns.sh
dns_aws.sh # 亚马逊 AWS
dns_azure.sh # 微软 AZURE
dns_cf.sh # CloudFlare
dns_cloudns.sh
dns_cn.sh
dns_conoha.sh
dns_cx.sh
dns_cyon.sh
dns_da.sh
dns_ddnss.sh
dns_desec.sh
dns_dgon.sh # digital ocean
dns_dnsimple.sh
dns_do.sh
dns_doapi.sh
dns_dp.sh # 腾讯云/DNSPOD
dns_dpi.sh # 腾讯云/DNSPOD
dns_dreamhost.sh
dns_duckdns.sh
dns_dyn.sh
dns_dynu.sh
dns_euserv.sh
dns_exoscale.sh
dns_freedns.sh
dns_gandi_livedns.sh
dns_gcloud.sh
dns_gd.sh
dns_gdnsdk.sh
dns_he.sh
dns_hostingde.sh
dns_infoblox.sh
dns_internetbs.sh
dns_inwx.sh
dns_ispconfig.sh
dns_kinghost.sh
dns_knot.sh
dns_lexicon.sh
dns_linode.sh
dns_linode_v4.sh
dns_loopia.sh
dns_lua.sh
dns_me.sh
dns_myapi.sh
dns_mydevil.sh
dns_mydnsjp.sh
dns_namecheap.sh
dns_namecom.sh
dns_namesilo.sh # 域名服务商namesilo
dns_nederhost.sh
dns_neodigit.sh
dns_netcup.sh
dns_nsd.sh
dns_nsone.sh
dns_nsupdate.sh
dns_nw.sh
dns_one.sh
dns_online.sh
dns_openprovider.sh
dns_ovh.sh
dns_pdns.sh
dns_pointhq.sh
dns_rackspace.sh
dns_schlundtech.sh
dns_selectel.sh
dns_servercow.sh
dns_tele3.sh
dns_ultra.sh
dns_unoeuro.sh
dns_vscale.sh
dns_yandex.sh # 俄罗斯yandex
dns_zilore.sh
dns_zone.sh
dns_zonomi.sh
WebServer、云服务的证书安装/部署插件
根据自己的需要查看脚本,设定环境变量使用。
apache.sh # 这是一个将证书部署到apache服务器的脚本。
cpanel_uapi.sh # 这是一个使用cpanel API将证书部署到cpanel的脚本。
dovecot.sh # 这是一个将cert部署到dovecot服务器的脚本。
exim4.sh # 这是一个将cert部署到exim4服务器的脚本。
fritzbox.sh # 这是一个将证书部署到AVM FRITZ!Box路由器的脚本。
gcore_cdn.sh # 这是一个使用G-Core Labs API(https://docs.gcorelabs.com/cdn/)将证书部署到G-Core CDN服务(https://gcorelabs.com/ru/)的脚本。
gitlab.sh # 将证书部署到Gitlab托管页面的脚本
haproxy.sh # 将证书部署到haproxy的acme.sh脚本
keychain.sh
kong.sh
mailcow.sh # 这是一个将cert部署到mailcow的脚本。
myapi.sh
mydevil.sh
mysqld.sh # 这是一个将cert部署到mysqld服务器的脚本。
nginx.sh # 这是一个将cert部署到nginx服务器的脚本。
opensshd.sh # 这是一个将cert部署到opensshd服务器的脚本。
pureftpd.sh # 这是一个将cert部署到pureftpd服务器的脚本。
qiniu.sh # 用于为七牛云(qiniu.com)创建证书的脚本
routeros.sh # 这是一个将cert部署到routeros路由器的脚本。
ssh.sh # 通过SSH将证书部署到远程服务器的脚本
strongswan.sh
unifi.sh # 这是一个将cert部署到unifi服务器的脚本。
vault_cli.sh # 这是一个将cert部署到hashicorp库的脚本
vsftpd.sh # 这是一个将cert部署到vsftpd服务器的脚本。
中文帮助
acme.sh支持的命令比较多,下面是命令帮助的中文版。
qiushan@topvps:~$ acme.sh
https://github.com/Neilpang/acme.sh
v2.8.2
Usage: acme.sh command ...[parameters]....
Commands:
--help, -h 显示此帮助消息。
--version, -v 显示版本信息。
--install 将acme.sh安装到您的系统。
--uninstall 卸载acme.sh,然后卸载cron作业。
--upgrade 将acme.sh升级到https://github.com/Neilpang/acme.sh中的最新代码。
--issue 颁发证书。
--signcsr 从现有的csr发出证书。
--deploy 将证书部署到您的服务器。
--install-cert 将颁发的证书安装到apache/nginx或任何其他服务器。
--renew, -r 续订证书。
--renew-all 续订所有证书。
--revoke 撤销证书。
--remove 从acme.sh已知的证书列表中删除证书。
--list 列出所有证书。
--showcsr 显示csr的内容。
--install-cronjob 安装cron作业以续订证书,您不需要调用它。'install'命令可以自动安装cron作业。
--uninstall-cronjob 卸载cron作业。'uninstall'命令可以自动执行此操作。
--cron 运行cron job以续订所有证书。
--toPkcs 将证书和密钥导出到pfx文件。
--toPkcs8 转换为pkcs8格式。
--update-account 更新帐户信息。
--register-account 注册帐户密钥。
--deactivate-account 停用该帐户。
--create-account-key 创建帐户私钥,供专业使用。
--create-domain-key 创建域私钥,供专业使用。
--createCSR, -ccsr 创建CSR,供专业使用。
--deactivate 停用域名authz,供专业使用。
--set-notify 设置cron通知挂钩,级别或模式。
Parameters:
--domain, -d domain.tld 指定用于发布,续订或撤销等的域。
--challenge-alias domain.tld DNS别名模式的挑战域别名:https://github.com/Neilpang/acme.sh/wiki/DNS-alias-mode
--domain-alias domain.tld DNS别名模式的域别名:https://github.com/Neilpang/acme.sh/wiki/DNS-alias-mode
--force, -f 用于强制安装或强制立即续订证书。
--staging, --test 使用登台服务器,仅用于测试。
--debug 输出调试信息。
--output-insecure 输出所有敏感消息。默认情况下,所有凭据/敏感消息都在输出/调试/日志中隐藏以确保安全。
--webroot, -w /path/to/webroot 指定Web根模式的Web根文件夹。
--standalone 使用独立模式。
--alpn 使用独立的alpn模式。
--stateless 使用无状态模式,请参阅:https://github.com/Neilpang/acme.sh/wiki/Stateless-Mode
--apache 使用apache模式。
--dns [dns_cf|dns_dp|dns_cx|/path/to/api/file] 使用dns模式或dns api。
--dnssleep [120] 等待所有txt记录在dns api模式下生效的时间(以秒为单位)。默认120秒。
--keylength, -k [2048] 指定域密钥长度:2048,3072,4096,8192或ec-256,ec-384。
--accountkeylength, -ak [2048] 指定帐户密钥长度。
--log [/path/to/logfile] 指定日志文件。如果您未在此处提供文件路径,则默认为:"/home/qiushan/.acme.sh/acme.sh.log"。
--log-level 1|2 指定日志级别,默认为1。
--syslog [0|3|6|7] Syslog级别,0:禁用syslog,3:错误,6:info,7:debug。
这些参数用于在颁发/续订证书后将证书安装到nginx/apache或任何其他服务器:
--cert-file 发布/续订后,证书将被复制到此路径。
--key-file 发出/续订后,密钥将被复制到此路径。
--ca-file 发布/续订后,中间证书将被复制到此路径。
--fullchain-file 发布/续订后,fullchain证书将被复制到此路径。
--reloadcmd "service nginx reload" 发布/续订后,它用于重新加载服务器。
--server SERVER ACME目录资源URI。(默认:https://acme-v01.api.letsencrypt.org/directory)
--accountconf 指定自定义帐户配置文件。
--home 指定acme.sh的主目录。
--cert-home 指定保存所有证书的主目录,仅对"--install"命令有效。
--config-home 指定保存所有配置的主目录。
--useragent 指定用户代理字符串。它将被保存以备将来使用。
--accountemail 指定帐户电子邮件,仅对"--install"和"--update-account"命令有效。
--accountkey 指定帐户密钥路径,仅对"--install"命令有效。
--days 指定使用'--issue'命令时续订证书的天数。默认值为60天。
--httpport 指定独立侦听端口。仅在服务器位于反向代理或负载平衡器后面时才有效。
--tlsport 指定独立的tls侦听端口。仅在服务器位于反向代理或负载平衡器后面时才有效。
--local-address 如果您有多个IP地址,则指定独立/tls服务器侦听地址。
--listraw 仅用于'--list'命令,以原始格式列出证书。
--stopRenewOnError, -se 仅对'--renew-all'命令有效。如果一个证书在续订时出错,请停止。
--insecure 不检查服务器证书,在某些设备中,api服务器的证书可能不受信任。
--ca-bundle 指定CA证书包的路径以验证api服务器的证书。
--ca-path 指定包含PEM格式的CA证书的目录,由wget或curl使用。
--nocron 仅对'--install'命令有效,这意味着:不要安装默认的cron作业。在这种情况下,证书不会自动续订。
--noprofile 仅对'--install'命令有效,这意味着:不要将别名安装到用户配置文件。
--no-color 不要输出彩色文字。
--force-color 强制输出彩色文字。用于与HTML电子邮件的aha工具进行非交互式使用。
--ecc 指定使用ECC证书。适用于'--install-cert',' - renew','--revoke',' - toPkcs'和'--createCSR'
--csr 指定输入csr。
--pre-hook 在获取任何证书之前要运行的命令。
--post-hook 尝试获取/续订证书后要运行的命令。无论获得/更新是成功还是失败。
--renew-hook 每个成功续订的证书都要运行一次的命令。
--deploy-hook 用于部署证书的挂钩文件
--ocsp-must-staple, --ocsp 生成ocsp必须Staple扩展。
--always-force-new-domain-key 续订时生成新的域密钥。否则,默认情况下不会更改域密钥。
--auto-upgrade [0|1] 适用于'--upgrade'命令,指示将来是否自动升级。
--listen-v4 强制standalone/tls服务器监听ipv4。
--listen-v6 强制standalone/tls服务器监听ipv6。
--openssl-bin 指定自定义openssl bin位置。
--use-wget 强制使用wget,如果你同时安装了curl和wget。
--yes-I-know-dns-manual-mode-enough-go-ahead-please 强制使用dns手动模式:https://github.com/Neilpang/acme.sh/wiki/dns-manual-mode
--branch, -b 仅对'--upgrade'命令有效,指定要升级到的分支名称。
--notify-level 0|1|2|3 设置通知级别:默认值为2。
0:禁用,不会发送通知。
1:仅在出现错误时发送通知。没有消息就是好消息。
2:成功续订证书时发送通知,或者出现错误
3:跳过,续订或错误证书时发送通知
--notify-mode 0|1 设置通知模式。默认值为0。
0:批量模式。在一条消息中发送所有域的通知(邮件)
1:证书模式。为每个证书发送一条消息。
--notify-hook [hookname] 设置通知挂钩
-- EOF --
本文最后修改于6年前 (2019-05-22)