使用acme.sh从Let's Encrypt签发SSL证书

 1.关于let's encrypt和acme.sh的简介

 

1.1 let's encrypt

Let's Encrypt是一个于2015年三季度推出的数字证书认证机构,旨在以自动化流程消除手动创建和安装证书的复杂流程,并推广使万维网服务器的加密连接无所不在,为安全网站提供免费的SSL/TLS证书。

Let's Encrypt由互联网安全研究小组(缩写ISRG)提供服务。主要赞助商包括电子前哨基金会、Mozilla基金会、Akamai以及思科。2015年4月9日,ISRG与Linux基金会宣布合作。

用以实现新的数字证书认证机构的协议被称为自动证书管理环境(ACME)。GitHub上有这一规范的草案,且提案的一个版本已作为一个Internet草案发布。

Let's Encrypt宣称这一过程将十分简单、自动化并且免费

 

1.2 acme.sh

简单来说acme.sh 实现了 acme 协议, 可以从 let‘s encrypt 生成免费的证书。

acme.sh 有以下特点:

一个纯粹用Shell(Unix shell)语言编写的ACME协议客户端。

完整的ACME协议实施。 支持ACME v1和ACME v2 支持ACME v2通配符证书

简单,功能强大且易于使用。你只需要3分钟就可以学习它。

Let's Encrypt免费证书客户端最简单的shell脚本。

纯粹用Shell编写,不依赖于python或官方的Let's Encrypt客户端。

只需一个脚本即可自动颁发,续订和安装证书。 不需要root/sudoer访问权限。

支持在Docker内使用,支持IPv6

 

2.安装acme.sh

2.1 执行安装

https://github.com/Neilpang/acme.sh/wiki/dns-manual-mode

安装很简单, 一个命令:

curl  https://get.acme.sh | sh

脚本会根据系统不通选择不同的下载方式:

 

[root@clsn.io /opt]

#wget -O -  https://raw.githubusercontent.com/Neilpang/acme.sh/master/acme.sh | INSTALLONLINE=1  sh

--2018-11-13 15:31:42--  https://raw.githubusercontent.com/Neilpang/acme.sh/master/acme.sh

正在解析主机 raw.githubusercontent.com... 151.101.0.133, 151.101.64.133, 151.101.128.133, ...

正在连接 raw.githubusercontent.com|151.101.0.133|:443... 已连接。

已发出 HTTP 请求,正在等待回应... 200 OK

长度:168608 (165K) [text/plain]

正在保存至: “STDOUT”

 

100%[======================================================================>] 168,608     --.-K/s   in 0.07s

 

2018-11-13 15:31:42 (2.38 MB/s) - 已写入标准输出 [168608/168608]

 

[2018年 11月 13日 星期二 15:31:42 CST] Installing from online archive.

[2018年 11月 13日 星期二 15:31:42 CST] Downloading https://github.com/Neilpang/acme.sh/archive/master.tar.gz

[2018年 11月 13日 星期二 15:31:43 CST] Extracting master.tar.gz

[2018年 11月 13日 星期二 15:31:43 CST] It is recommended to install socat first.

[2018年 11月 13日 星期二 15:31:43 CST] We use socat for standalone server if you use standalone mode.

[2018年 11月 13日 星期二 15:31:43 CST] If you don't use standalone mode, just ignore this warning.

[2018年 11月 13日 星期二 15:31:43 CST] Installing to /root/.acme.sh

[2018年 11月 13日 星期二 15:31:43 CST] Installed to /root/.acme.sh/acme.sh

[2018年 11月 13日 星期二 15:31:43 CST] Installing alias to '/root/.bashrc'

[2018年 11月 13日 星期二 15:31:43 CST] OK, Close and reopen your terminal to start using acme.sh

[2018年 11月 13日 星期二 15:31:43 CST] Installing alias to '/root/.cshrc'

[2018年 11月 13日 星期二 15:31:43 CST] Installing alias to '/root/.tcshrc'

[2018年 11月 13日 星期二 15:31:43 CST] Installing cron job

#未知信息,已禁用 :34 0 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null

[2018年 11月 13日 星期二 15:31:43 CST] Good, bash is found, so change the shebang to use bash as preferred.

[2018年 11月 13日 星期二 15:31:44 CST] OK

[2018年 11月 13日 星期二 15:31:44 CST] Install success!

 

2.2 安装后的配置

普通用户和 root 用户都可以安装使用。

安装过程进行了以下几步:

把 acme.sh 安装到你的 home 目录下:~/.acme.sh/并创建 一个 bash 的 alias, 方便你的使用:

alias acme.sh=~/.acme.sh/acme.sh

echo 'alias acme.sh=~/.acme.sh/acme.sh' >>/etc/profile

安装过程中会自动为你创建 cronjob, 每天 0:00 点自动检测所有的证书, 如果快过期了, 需要更新, 则会自动更新证书。

00 00 * * * root /root/.acme.sh/acme.sh --cron --home /root/.acme.sh &>/var/log/acme.sh.logs

更高级的安装选项请参考: https://github.com/Neilpang/acme.sh/wiki/How-to-install

在该脚本的安装过程不会污染已有的系统任何功能和文件, 所有的修改都限制在安装目录中: ~/.acme.sh/

 

3.申请证书

acme.sh 实现了 acme 协议支持的所有验证协议. 一般有两种方式验证: http 和 dns 验证。

 

3.1 HTTP 方式

http 方式需要在你的网站根目录下放置一个文件, 来验证你的域名所有权,完成验证. 然后就可以生成证书了.

acme.sh  --issue  -d clsn.io -d *.clsn.io  --webroot  /www/wwwroot/clsn.io/

只需要指定域名, 并指定域名所在的网站根目录. acme.sh 会全自动的生成验证文件, 并放到网站的根目录, 然后自动完成验证. 最后会聪明的删除验证文件. 整个过程没有任何副作用.

如果你用的 apache服务器, acme.sh 还可以智能的从 apache的配置中自动完成验证, 你不需要指定网站根目录:

acme.sh --issue  -d clsn.io   --clsn.io

如果你用的 nginx服务器, 或者反代, acme.sh 还可以智能的从 nginx的配置中自动完成验证, 你不需要指定网站根目录:

acme.sh --issue  -d clsn.io  --nginx

注意, 无论是 apache 还是 nginx 模式, acme.sh在完成验证之后, 会恢复到之前的状态, 都不会私自更改你本身的配置. 好处是你不用担心配置被搞坏。

该类型的配置有一个缺点, 你需要自己配置 ssl 的配置, 否则只能成功生成证书, 你的网站还是无法访问https. 但是为了安全, 你还是自己手动改配置吧.

如果你还没有运行任何 web 服务, 80 端口是空闲的, 那么 acme.sh 还能假装自己是一个webserver, 临时听在80 端口, 完成验证:

acme.sh  --issue -d clsn.io   --standalone

更高级的用法请参考: https://github.com/Neilpang/acme.sh/wiki/How-to-issue-a-cert

 

3.2 DNS方式

这种方式的好处是, 你不需要任何服务器, 不需要任何公网 ip, 只需要 dns 的解析记录即可完成验证。

这种方式的缺点是,如果不同时配置 Automatic DNS API,使用这种方式 acme.sh 将无法自动更新证书,每次都需要手动再次重新解析验证域名所有权。

 

3.2.1 颁发证书

[root@clsn.io /opt]

#cd /root/.acme.sh/

[root@clsn.io /root/.acme.sh]

#acme.sh --issue -d *.clsn.io -d clsn.io --dns --yes-I-know-dns-manual-mode-enough-go-ahead-please

[2018年 11月 13日 星期二 15:34:55 CST] Creating domain key

[2018年 11月 13日 星期二 15:34:55 CST] The domain key is here: /www/server/panel/vhost/cert/*.clsn.io/*.clsn.io.key

[2018年 11月 13日 星期二 15:34:55 CST] Multi domain='DNS:*.clsn.io,DNS:clsn.io'

[2018年 11月 13日 星期二 15:34:55 CST] Getting domain auth token for each domain

[2018年 11月 13日 星期二 15:34:56 CST] Getting webroot for domain='*.clsn.io'

[2018年 11月 13日 星期二 15:34:57 CST] Getting webroot for domain='clsn.io'

[2018年 11月 13日 星期二 15:34:57 CST] Add the following TXT record:

[2018年 11月 13日 星期二 15:34:57 CST] Domain: '_acme-challenge.clsn.io'

[2018年 11月 13日 星期二 15:34:57 CST] TXT value: '9rj0bhiGrO9UJ44XgV0APXuGBRL1vOk4XKdsnnxaIf4'

[2018年 11月 13日 星期二 15:34:57 CST] Please be aware that you prepend _acme-challenge. before your domain

[2018年 11月 13日 星期二 15:34:57 CST] so the resulting subdomain will be: _acme-challenge.clsn.io

[2018年 11月 13日 星期二 15:34:57 CST] Add the following TXT record:

[2018年 11月 13日 星期二 15:34:57 CST] Domain: '_acme-challenge.clsn.io'

[2018年 11月 13日 星期二 15:34:57 CST] TXT value: 'yJ4Ca9yVg1Fsp4RhH5XZJohh0eE3dFXEKM2KGUFNHio'

[2018年 11月 13日 星期二 15:34:57 CST] Please be aware that you prepend _acme-challenge. before your domain

[2018年 11月 13日 星期二 15:34:57 CST] so the resulting subdomain will be: _acme-challenge.clsn.io

[2018年 11月 13日 星期二 15:34:57 CST] Please add the TXT records to the domains, and re-run with --renew.

[2018年 11月 13日 星期二 15:34:57 CST] Please add '--debug' or '--log' to check more details.

[2018年 11月 13日 星期二 15:34:57 CST] See: https://github.com/Neilpang/acme.sh/wiki/How-to-debug-acme.sh

 

3.2.2 修改DNS

在NS管理方修改主机记录

 

3.2.3 验证解析是否生效

$dig -t txt  _acme-challenge.clsn.io @8.8.8.8

; <<>> DiG 9.9.7-P3 <<>> -t txt _acme-challenge.clsn.io @8.8.8.8

;; global options: +cmd

;; Got answer:

;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 35785

;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:

; EDNS: version: 0, flags:; udp: 512

;; QUESTION SECTION:

;_acme-challenge.clsn.io.   IN  TXT

;; ANSWER SECTION:

_acme-challenge.clsn.io. 599    IN  TXT "yJ4Ca9yVg1Fsp4RhH5XZJohh0eE3dFXEKM2KGUFNHio"

_acme-challenge.clsn.io. 599    IN  TXT "9rj0bhiGrO9UJ44XgV0APXuGBRL1vOk4XKdsnnxaIf4"

;; Query time: 2502 msec

;; SERVER: 8.8.8.8#53(8.8.8.8)

;; WHEN: Tue Nov 13 15:40:55 CST 2018

;; MSG SIZE  rcvd: 164

 

3.2.4 生成证书

获取Let’s Encrypt免费泛域名证书。等DNS解析生效后,运行以下命令重新生成证书:

[root@clsn.io /root/.acme.sh]

#acme.sh --renew  -d *.clsn.io -d clsn.io --dns --yes-I-know-dns-manual-mode-enough-go-ahead-please

[2018年 11月 13日 星期二 15:39:26 CST] Renew: '*.clsn.io'

[2018年 11月 13日 星期二 15:39:26 CST] Multi domain='DNS:*.clsn.io,DNS:clsn.io'

[2018年 11月 13日 星期二 15:39:27 CST] Getting domain auth token for each domain

[2018年 11月 13日 星期二 15:39:27 CST] Verifying:*.clsn.io

[2018年 11月 13日 星期二 15:39:29 CST] Success

[2018年 11月 13日 星期二 15:39:29 CST] Verifying:clsn.io

[2018年 11月 13日 星期二 15:39:32 CST] Success

[2018年 11月 13日 星期二 15:39:32 CST] Verify finished, start to sign.

[2018年 11月 13日 星期二 15:39:33 CST] Cert success.

-----BEGIN CERTIFICATE-----

MIIFUzCCBDugAwIBAgISBFW6y9vj0CLdCtlbjd5uRZFoMA0GCSqGSIb3DQEBCwUA

MEoxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MSMwIQYDVQQD

ExpMZXQncyBFbmNyeXB0IEF1dGhvcml0eSBYMzAeFw0xODExMTMwNjM5MzJaFw0x

OTAyMTEwNjM5MzJaMBQxEjAQBgNVBAMMCSouY2xzbi5pbzCCASIwDQYJKoZIhvcN

AQEBBQADggEPADCCAQoCggEBANsBQz9vlST55GYdf/F9awtMqnwa2S+4nftk75NJ

s8zRLmj0LvtgZCn0fXgpNH4zAGRR3qzx7VGU80pDg539Kn8k3peoOFxRq5J3JCK2

NhvVLws7HspIsgHXngf3AyawUg+QN69K50ZDNF6/brgnOiNbmSY5fF2F9zXkNCd2

4Nsg8ptmYs3RL99ZM2CvjgLLgey3CPAuMWCse8afA4tHJ4pEZRk3dBTtWXy4q2wl

Uba8K4LuDmqOkWmQ7x3ufrq+1pQUTVQeJbKVQeDHsWQgFJVYnuHrGdd8mbz08quB

g4ruNCRnkHM1Fyxfu71IEnH1dutIeHv5OAvC3XMJUFE44kMCAwEAAaOCAmcwggJj

MA4GA1UdDwEB/wQEAwIFoDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIw

DAYDVR0TAQH/BAIwADAdBgNVHQ4EFgQUP0ZkyUrkFWnJMVT/zGVVTfhJudgwHwYD

VR0jBBgwFoAUqEpqYwR93brm0Tm3pkVl7/Oo7KEwbwYIKwYBBQUHAQEEYzBhMC4G

CCsGAQUFBzABhiJodHRwOi8vb2NzcC5pbnQteDMubGV0c2VuY3J5cHQub3JnMC8G

CCsGAQUFBzAChiNodHRwOi8vY2VydC5pbnQteDMubGV0c2VuY3J5cHQub3JnLzAd

BgNVHREEFjAUggkqLmNsc24uaW+CB2Nsc24uaW8wTAYDVR0gBEUwQzAIBgZngQwB

AgEwNwYLKwYBBAGC3xMBAQEwKDAmBggrBgEFBQcCARYaaHR0cDovL2Nwcy5sZXRz

ZW5jcnlwdC5vcmcwggEEBgorBgEEAdZ5AgQCBIH1BIHyAPAAdgDiaUuuJujpQAno

hhu2O4PUPuf+dIj7pI8okwGd3fHb/gAAAWcMAtr/AAAEAwBHMEUCIDn0gs520um3

dbTpgm3J/QhbjCwVG7Ln8cmONkhiA0S/AiEAqV2/kS63iMF4TGOVQ9s206OPnyx8

1sLMm7NQfGrUNsYAdgApPFGWVMg5ZbqqUPxYB9S3b79Yeily3KTDDPTlRUf0eAAA

AWcMAtsEAAAEAwBHMEUCIQDqMPOXRxylye3P2SBDP/DIeDlsa8QFcWM0lYKCmYQW

zwIgGhTWGjpMOnw4fkoygDE3mHceg+k2vqUBPTwCfu+qRNIwDQYJKoZIhvcNAQEL

BQADggEBADZWQ8ms7VG10pSQVGg98VHnRE9VfgYq+zCpoJdjVv3OZZ+3hZGkxlQU

jbpQDPdx2x2KWrhPIlSylZpw1KHFjXq5pwZpkcVjkTO5tkB4+XRsUl0dENj5HGMN

pwNRPNsiWMnvxiQgKnCpIPPVTOGsajJ5ByQA4+Vni3VNvEEAOurN024e0rfzxhYV

oXBnb7tK01+HIzoOBsOl9FRbIzkmuogjCrbjU8dBudAKPNAPmFS6bwFnYeFWO2G7

DhyNrlDFJodx8JjZ9qnzD53gCfutYzsftN3jwBBiGxRpLyWXXAQLqBN5QrkTwL+h

PFn9Tul9nibZXRIQsyutHx7jFMtAyOY=

-----END CERTIFICATE-----

[2018年 11月 13日 星期二 15:39:33 CST] Your cert is in  clsn.io/clsn.io.cer

[2018年 11月 13日 星期二 15:39:33 CST] Your cert key is in  /www/server/panel/vhost/cert/clsn.io/clsn.io.key

[2018年 11月 13日 星期二 15:39:33 CST] The intermediate CA cert is in  /www/server/panel/vhost/cert/clsn.io/ca.cer

[2018年 11月 13日 星期二 15:39:33 CST] And the full chain certs is there:  /www/server/panel/vhost/cert/clsn.io/fullchain.cer

[2018年 11月 13日 星期二 15:39:33 CST] It seems that you are using dns manual mode. please take care: The dns manual mode can not renew automatically, you must issue it again manually. You'd better use the other modes instead.

[2018年 11月 13日 星期二 15:39:33 CST] Call hook error.

注意第二次这里用的是 --renew

 

3.3 DNS API方式

dns 方式的真正强大之处在于可以使用域名解析商提供的 api 自动添加 txt 记录完成验证.

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

以 dnspod 为例, 你需要先登录到 dnspod 账号, 生成你的 api id 和 api key, 都是免费的. 然后:

export DP_Id="76GJHG4SG1Q"

export DP_Key="qaEDHSJiokjhfs"

acme.sh   --issue   --dns dns_dp   -d clsn.io  -d www.clsn.io

证书就会自动生成了. 这里给出的 api id 和 api key 会被自动记录下来, 将来你在使用 dnspod api 的时候, 就不需要再次指定了. 直接生成就好了:

acme.sh  --issue   -d  clsn.io   --dns  dns_dp

更详细的 api 用法:https://github.com/Neilpang/acme.sh/blob/master/dnsapi/README.md

 

===============================================================================================================================

域名运营商DNS API操作方式

1.使用 CloudFlare 域 API 自动颁发证书

首先,您需要登录您的 CloudFlare 帐户才能获取您的API密钥。

export CF_Key="sdfsdfsdfljlbjkljlkjsdfoiwje"

export CF_Email="xxxx@sss.com"

好的,让我们现在发布一个证书:

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

该CF_Key和CF_Email将被保存~/.acme.sh/account.conf并且在需要时将被重用。

 

2.使用 DNSPod.cn 域名 API 自动颁发证书

首先,您需要登录您的DNSPod 帐户才能获取您的API密钥和 ID。

export DP_Id="1234"

export DP_Key="sADDsdasdgdsf"

好的,让我们现在发布一个证书:

acme.sh --issue --dns dns_dp -d example.com -d www.example.com

该DP_Id和DP_Key将被保存~/.acme.sh/account.conf并且在需要时将被重用。

注:DNSPod 现在采用 Token 调用API,具体调用办法:

https://www.lizi.tw/soft/5051.html

 

3.使用 CloudXNS.com 域 API 自动颁发证书

首先,您需要登录您的 CloudXNS 帐户才能获取您的 API 密钥和秘密。

export CX_Key="1234"

export CX_Secret="sADDsdasdgdsf"

好的,让我们现在发布一个证书:

acme.sh --issue --dns dns_cx -d example.com -d www.example.com

该CX_Key和CX_Secret将被保存~/.acme.sh/account.conf并且在需要时将被重用。

 

4.使用 GoDaddy.com 域 API 自动颁发证书

首先,您需要登录您的 GoDaddy 帐户才能获得您的 API 密钥和秘密。

https://developer.godaddy.com/keys/

请创建一个生产密钥,而不是测试密钥。

export GD_Key="sdfsdfsdfljlbjkljlkjsdfoiwje"

export GD_Secret="asdfsdafdsfdsfdsfdsfdsafd"

好的,让我们现在发布一个证书:

acme.sh --issue --dns dns_gd -d example.com -d www.example.com

该GD_Key和GD_Secret将被保存~/.acme.sh/account.conf并且在需要时将被重用。

 

5.使用 PowerDNS 嵌入式 API 自动颁发证书

首先,您需要登录 PowerDNS帐户才能启用该 API 并在配置中设置您的 API 令牌。

https://doc.powerdns.com/md/httpapi/README/

export PDNS_Url="http://ns.example.com:8081"

export PDNS_ServerId="localhost"

export PDNS_Token="0123456789ABCDEF"

export PDNS_Ttl=60

好的,让我们现在发布一个证书:

acme.sh --issue --dns dns_pdns -d example.com -d www.example.com

的PDNS_Url,PDNS_ServerId,PDNS_Token和PDNS_Ttl将被保存~/.acme.sh/account.conf,需要时会被重用。

 

6.使用 OVH / kimsufi / soyoustart / runabove API 自动颁发证书

https://github.com/Neilpang/acme.sh/wiki/How-to-use-OVH-domain-api

 

7.使用 nsupdate 自动发出证书

首先,生成更新区域的密钥

b=$(dnssec-keygen -a hmac-sha512 -b 512 -n USER -K /tmp foo)

cat > /etc/named/keys/update.key <<EOF

key "update" {

    algorithm hmac-sha512;

    secret "$(awk '/^Key/{print $2}' /tmp/$b.private)";

};

EOF

rm -f /tmp/$b.{private,key}

将此密钥包含在您的命名配置中

include "/etc/named/keys/update.key";

接下来,将您的区域配置为允许动态更新。

取决于您的命名版本,请使用其中一种

zone "example.com" {

    type master;

    allow-update { key "update"; };

};

要么

zone "example.com" {

    type master;

    update-policy {

        grant update subdomain example.com.;

    };

}

最后,让 DNS 服务器和更新密钥可用 acme.sh

export NSUPDATE_SERVER="dns.example.com"

export NSUPDATE_KEY="/path/to/your/nsupdate.key"

好的,让我们现在发布一个证书:

acme.sh --issue --dns dns_nsupdate -d example.com -d www.example.com

在NSUPDATE_SERVER和NSUPDATE_KEY设置将被保存在~/.acme.sh/account.conf需要的时候将被重用。

 

8.使用 LuaDNS 域名 API

通过https://api.luadns.com/settings获取您的 API 令牌

export LUA_Key="sdfsdfsdfljlbjkljlkjsdfoiwje"

export LUA_Email="xxxx@sss.com"

颁发证书:

acme.sh --issue --dns dns_lua -d example.com -d www.example.com

该LUA_Key和LUA_Email将被保存~/.acme.sh/account.conf并且在需要时将被重用。

 

9.使用 DNSMadeEasy 域名 API

通过https://cp.dnsmadeeasy.com/account/info获取您的 API 凭据

export ME_Key="sdfsdfsdfljlbjkljlkjsdfoiwje"

export ME_Secret="qdfqsdfkjdskfj"

颁发证书:

acme.sh --issue --dns dns_me -d example.com -d www.example.com

该ME_Key和ME_Secret将被保存~/.acme.sh/account.conf并且在需要时将被重用。

 

10.使用 Amazon Route53 域 API

https://github.com/Neilpang/acme.sh/wiki/How-to-use-Amazon-Route53-API

export  AWS_ACCESS_KEY_ID=XXXXXXXXXX

export  AWS_SECRET_ACCESS_KEY=XXXXXXXXXXXXXXX

颁发证书:

acme.sh --issue --dns dns_aws -d example.com -d www.example.com

该AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY将被保存~/.acme.sh/account.conf并且在需要时将被重用。

 

11.使用 Aliyun 域名 API 自动颁发证书

首先,您需要登录您的 Aliyun 帐户才能获取您的 API 密钥。 https://ak-console.aliyun.com/#/accesskey

export Ali_Key="sdfsdfsdfljlbjkljlkjsdfoiwje"

export Ali_Secret="jlsdflanljkljlfdsaklkjflsa"

好的,让我们现在发布一个证书:

acme.sh --issue --dns dns_ali -d example.com -d www.example.com

该Ali_Key和Ali_Secret将被保存~/.acme.sh/account.conf并且在需要时将被重用。

 

12.使用 ISPConfig 3.1 API

这只适用于 ISPConfig 3.1(和更新版本)。

在 ISPConfig 控制面板中创建一个远程用户。远程用户至少必须有权访问DNS zone functions和DNS txt functions。

export ISPC_User="xxx"

export ISPC_Password="xxx"

export ISPC_Api="https://ispc.domain.tld:8080/remote/json.php"

export ISPC_Api_Insecure=1

如果您在另一个端口上安装了 ISPConfig,请相应地更改 8080。如果您的安装没有有效的 ssl 证书,则 Leaver ISPC_Api_Insecure 设置为 1。如果您拥有有效的 ssl 证书,请将其更改为 0。

颁发证书:

acme.sh --issue --dns dns_ispconfig -d example.com -d www.example.com

的ISPC_User,ISPC_Password,ISPC_Api和ISPC_Api_Insecure将被保存~/.acme.sh/account.conf,需要时会被重用。

 

13.使用 Alwaysdata 域名 API

首先,您需要登录您的 Alwaysdata 帐户才能获取您的 API 密钥。

导出 AD_API_KEY = “ myalwaysdataapikey ”

好的,让我们现在发布一个证书:

acme.sh --issue --dns dns_ad -d example.com -d www.example.com

在AD_API_KEY将保存在~/.acme.sh/account.conf需要的时候将被重用。

 

14.使用 Linode 域名 API

首先,您需要登录您的 Linode 帐户才能获得您的 API 密钥。 https://manager.linode.com/profile/api

然后添加一个标签为ACME的 API 密钥并复制新密钥。

export LINODE_API_KEY = “ ... ”

由于 DNS 记录中任何更改的重新载入时间,我们必须使用该dnssleep选项等待至少 15 分钟才能使更改生效。

好的,让我们现在发布一个证书:

acme.sh --issue --dns dns_linode --dnssleep 900 -d xsz.tw -d www.xsz.tw

在LINODE_API_KEY将保存在~/.acme.sh/account.conf需要的时候将被重用。

 

15.使用 FreeDNS

FreeDNS(https://freedns.afraid.org/)不提供更新 DNS 记录的 API(IPv4 和 IPv6 动态 DNS 地址除外)。acme.sh 插件因此通过登录到 FreeDNS 网站来读取并更新域 TXT 记录来读取 HTML 并将更新发布为 HTTP。该插件需要知道 FreeDNS 网站的用户名和密码。

export FREEDNS_User = “ ... ”

 export FREEDNS_Password = “ ... ”

您只需在第一次使用 FreeDNS 验证运行 acme.sh 客户端时提供此信息,然后在 FreeDNS 站点上更改密码时再次提供此信息。acme.sh FreeDNS 插件不存储您的用户标识或密码,而是保存 FreeDNS 返回的认证标记,~/.acme.sh/account.conf并在需要时重新使用它。

现在您可以颁发证书。

acme.sh --issue --dns dns_freedns -d example.com -d www.example.com

请注意,对于 FreeDNS 公共域或您在 FreeDNS 公共域下创建的子域,不能使用 acme.sh 自动 DNS 验证。您必须拥有顶级域名才能在 FreeDNS 中使用 acme.sh 自动验证。

 

16.使用 cyon.ch

你只需要设置你的 cyon.ch 登录凭证。如果您还启用了 2 因子身份验证(OTP),则需要设置您的秘密令牌并已oathtool安装。

export CY_Username="your_cyon_username"

export CY_Password="your_cyon_password"

export CY_OTP_Secret="your_otp_secret" # Only required if using 2FA

颁发证书:

acme.sh --issue --dns dns_cyon -d example.com -d www.example.com

这个CY_Username,CY_Password并且CY_OTP_Secret将被保存~/.acme.sh/account.conf并且在需要时将被重用。

 

17.使用 Domain-Offensive / Reseller 界面/ Domainrobot API

您需要将您的登录凭证(合作伙伴 ID +密码)加入经销商界面,并在运行之前导出它们acme.sh:

export DO_PID="KD-1234567"

export DO_PW="cdfkjl3n2"

好的,让我们现在发布一个证书:

acme.sh --issue --dns dns_do -d lizi.tw -d www.lizi.tw

18.使用 Gandi LiveDNS API

您必须先启用新的 Gandi LiveDNS API 并创建您的 api 密钥,请参阅:http ://doc.livedns.gandi.net/

export GANDI_LIVEDNS_KEY="fdmlfsdklmfdkmqsdfk"

好的,让我们现在发布一个证书:

acme.sh --issue --dns dns_gandi_livedns -d example.com -d www.example.com

 

19.使用结(knsupdate)DNS API 自动颁发证书

首先,生成用于更新区域的 TSIG 密钥。

keymgr tsig generate -t acme_key hmac-sha512 > /etc/knot/acme.key

将此密钥包含在结配置文件中。

include: /etc/knot/acme.key

接下来,将您的区域配置为允许动态更新。

该区域的动态更新可通过适当的 ACL 规则与update动作来实现。有关详细说明,请参阅结 DNS 的文档。

acl:

  - id: acme_acl

    address: 192.168.1.0/24

    key: acme_key

    action: update

zone:

  - domain: example.com

    file: example.com.zone

    acl: acme_acl

最后,让 DNS 服务器和 TSIG 密钥可用 acme.sh

export KNOT_SERVER="dns.example.com"

export KNOT_KEY=`grep \# /etc/knot/acme.key | cut -d' ' -f2`

好的,让我们现在发布一个证书:

acme.sh --issue --dns dns_knot -d example.com -d www.example.com

在KNOT_SERVER和KNOT_KEY设置将被保存在~/.acme.sh/account.conf需要的时候将被重用。

 

20.使用 DigitalOcean API(本机)

您需要从 DigitalOcean 帐户获取可读写的 API 密钥。请参阅:https : //www.digitalocean.com/help/api/

export DO_API_KEY="75310dc4ca779ac39a19f6355db573b49ce92ae126553ebd61ac3a3ae34834cc"

好的,让我们现在发布一个证书:

acme.sh --issue --dns dns_dgon -d example.com -d www.example.com

 

21.使用 ClouDNS.net API

您需要设置 HTTP API 用户标识和密码凭证。请参阅:https://www.cloudns.net/wiki/article/42/。出于安全原因,建议使用只能访问必要区域的子用户 ID,因为常规 API 用户可以访问整个帐户。

# Use this for a sub auth ID

export CLOUDNS_SUB_AUTH_ID=XXXXX

# Use this for a regular auth ID

#export CLOUDNS_AUTH_ID=XXXXX

export CLOUDNS_AUTH_PASSWORD="YYYYYYYYY"

好的,让我们现在发布一个证书:

acme.sh --issue --dns dns_cloudns -d example.com -d www.example.com

该CLOUDNS_AUTH_ID和CLOUDNS_AUTH_PASSWORD将被保存~/.acme.sh/account.conf并且在需要时将被重用。

 

22.使用 Infoblox API

首先,您需要在 Infoblox 设备上创建/获取 API 凭据。

export Infoblox_Creds="username:password"

export Infoblox_Server="ip or fqdn of infoblox appliance"

好的,让我们现在发布一个证书:

acme.sh --issue --dns dns_infoblox -d example.com -d www.example.com

注意:此脚本将自动创建并删除临时 txt 记录。该Infoblox_Creds和Infoblox_Server将被保存~/.acme.sh/account.conf并且在需要时将被重用。

 

23.使用 VSCALE API

首先,您需要在设置面板上创建/获取 API 令牌。

VSCALE_API_KEY="sdfsdfsdfljlbjkljlkjsdfoiwje"

好的,让我们现在发布一个证书:

acme.sh --issue --dns dns_vscale -d example.com -d www.example.com

 

24.使用 Dynu API

首先,您需要从 Dynu 帐户创建/获取 API 凭据。请参阅:https://www.dynu.com/resources/api/documentation

export Dynu_ClientId="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"

export Dynu_Secret="yyyyyyyyyyyyyyyyyyyyyyyyy"

好的,让我们现在发布一个证书:

acme.sh --issue --dns dns_dynu -d example.com -d www.example.com

该Dynu_ClientId和Dynu_Secret将被保存~/.acme.sh/account.conf并且在需要时将被重用。

 

25.使用 DNSimple API

首先,您需要登录您的 DNSimple 帐户并生成新的 oauth 标记。

https://dnsimple.com/a/{your帐户 ID} /帐户/ access_tokens

请注意,这是一个帐户令牌,而不是用户令牌。需要帐户令牌来推断account_id使用的请求。用户令牌将无法确定要使用的正确帐户。

export DNSimple_OAUTH_TOKEN="sdfsdfsdfljlbjkljlkjsdfoiwje"

要颁发证书只需指定dns_dnsimpleAPI。

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

在DNSimple_OAUTH_TOKEN将保存在~/.acme.sh/account.conf需要的时候将被重用。

如果您对此集成有任何问题,请将其报告至 https://github.com/pho3nixf1re/acme.sh/issues。

 

26.使用 NS1.com API

export NS1_Key="fdmlfsdklmfdkmqsdfk"

好的,让我们现在发布一个证书:

acme.sh --issue --dns dns_nsone -d example.com -d www.example.com

 

27.使用 DuckDNS.org API

export DuckDNS_Token="aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee"

请注意,由于 DuckDNS 使用 StartSSL 作为他们的证书提供者,因此在颁发证书时可能需要使用–insecure:

acme.sh --insecure --issue --dns dns_duckdns -d mydomain.duckdns.org

有关问题,请报告https://github.com/raidenii/acme.sh/issues。

 

28.使用 Name.com API

您需要在https://www.name.com/reseller/apply填写表格以申请 API 用户名和标记。

export Namecom_Username="testuser"

export Namecom_Token="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

现在您可以通过以下方式签发证书:

acme.sh --issue --dns dns_namecom -d example.com -d www.example.com

有关问题,请报告https://github.com/raidenii/acme.sh/issues。

 

29.使用 Dyn Managed DNS API 自动颁发证书

首先,登录您的 Dyn Managed DNS 帐户:https : //portal.dynect.net/login/

建议添加特定于 API 访问的新用户。

要求的最低“区域和记录权限”是:

RecordAdd

RecordUpdate

RecordDelete

RecordGet

ZoneGet

ZoneAddNode

ZoneRemoveNode

ZonePublish

将 API 用户凭据传递给环境:

export DYN_Customer="customer"

export DYN_Username="apiuser"

export DYN_Password="secret"

好的,让我们现在发布一个证书:

acme.sh --issue --dns dns_dyn -d example.com -d www.example.com

这个DYN_Customer,DYN_Username并且DYN_Password将被保存~/.acme.sh/account.conf并且在需要时将被重用。

 

30.使用 pdd.yandex.ru API

export PDD_Token="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

按照这些说明获取您的域的令牌https://tech.yandex.com/domain/doc/concepts/access-docpage/

acme.sh --issue --dns dns_yandex -d mydomain.example.org

有关问题,请报告https://github.com/non7top/acme.sh/issues。

 

31.使用 Hurricane Electric

Hurricane Electric(https://dns.he.net/)没有 API,因此只需设置您的登录凭证,如下所示:

export HE_Username="yourusername"

export HE_Password="password"

然后你可以发行你的证书:

acme.sh --issue --dns dns_he -d example.com -d www.example.com

在HE_Username和HE_Password设置将被保存在~/.acme.sh/account.conf需要的时候将被重用。

请将任何问题报告给https://github.com/angel333/acme.sh或me@ondrejsimek.com。

 

32.使用 UnoEuro API 自动颁发证书

首先,您需要登录您的 UnoEuro 帐户才能获取您的 API 密钥。

export UNO_Key="sdfsdfsdfljlbjkljlkjsdfoiwje"

export UNO_User="UExxxxxx"

好的,让我们现在发布一个证书:

acme.sh --issue --dns dns_unoeuro -d example.com -d www.example.com

该UNO_Key和UNO_User将被保存~/.acme.sh/account.conf并且在需要时将被重用。

 

33.使用 INWX

INWX提供一个 带有标准登录凭证的xmlrpc api,将它们设置为:

export INWX_User="yourusername"

export INWX_Password="password"

然后你可以用你的证书签发:

acme.sh --issue --dns dns_inwx -d example.com -d www.example.com

在INWX_User和INWX_Password设置将被保存在~/.acme.sh/account.conf需要的时候将被重用。

 

34.用户 Servercow API v1

从 servercow 控制中心创建一个新用户。不要忘记为这个用户激活DNS API。

export SERVERCOW_API_Username=username

export SERVERCOW_API_Password=password

现在你不能颁发证书:

acme.sh --issue --dns dns_servercow -d example.com -d www.example.com

两者,SERVERCOW_API_Username并且SERVERCOW_API_Password将被保存~/.acme.sh/account.conf,需要时会被重用。

 

35.使用 Namesilo.com API

您需要在https://www.namesilo.com/account_api.php上生成 API 密钥。 您可以选择将访问权限限制在此处的 IP 范围。

export Namesilo_Key="xxxxxxxxxxxxxxxxxxxxxxxx"

现在您可以通过以下方式签发证书:

acme.sh --issue --dns dns_namesilo --dnssleep 900 -d example.com -d www.example.com

 

36.使用 autoDNS(InternetX)

InternetX提供 带有标准登录凭据的xml api,将它们设置为:

export AUTODNS_USER="yourusername"

export AUTODNS_PASSWORD="password"

export AUTODNS_CONTEXT="context"

然后你可以用你的证书签发:

acme.sh --issue --dns dns_autodns -d example.com -d www.example.com

的AUTODNS_USER,AUTODNS_PASSWORD并AUTODNS_CONTEXT设置将被保存在~/.acme.sh/account.conf需要的时候将被重用。

 

37.使用 Azure DNS

您必须先创建一个服务主体。请参阅:如何使用 Azure DNS

export AZUREDNS_SUBSCRIPTIONID="12345678-9abc-def0-1234-567890abcdef"

export AZUREDNS_TENANTID="11111111-2222-3333-4444-555555555555"

export AZUREDNS_APPID="3b5033b5-7a66-43a5-b3b9-a36b9e7c25ed"

export AZUREDNS_CLIENTSECRET="1b0224ef-34d4-5af9-110f-77f527d561bd"

然后你可以用你的证书签发:

acme.sh --issue --dns dns_azure -d example.com -d www.example.com

AZUREDNS_SUBSCRIPTIONID,AZUREDNS_TENANTID,AZUREDNS_APPID和AZUREDNS_CLIENTSECRET设置将被保存在~/.acme.sh/account.conf需要的时候将被重用。

 

38.使用 selectel.com(selectel.ru)域 API 自动颁发证书

首先,您需要登录您的帐户以获取 API 密钥:https://my.selectel.r u/profile/apikeys。

导出 SL_Key = “ sdfsdfsdfljlbjkljlkjsdfoiwje ”

好的,让我们现在发布一个证书:

acme.sh --issue --dns dns_selectel -d example.com -d www.example.com

在SL_Key将保存在~/.acme.sh/account.conf需要的时候将被重用。

 

39.使用 zonomi.com 域 API 自动颁发证书

首先,您需要登录到您的帐户以查找您的 API 密钥:http: //zonomi.com/app/dns/dyndns.jsp

您将在示例网址中找到您的 API 密钥:

https://zonomi.com/app/dns/dyndns.jsp ?host = example.com & api_key = 1063364558943540954358668888888888

export ZM_Key = “ 1063364558943540954358668888888888 ”

好的,让我们现在发布一个证书:

acme.sh --issue --dns dns_zonomi -d example.com -d www.example.com

在ZM_Key将保存在~/.acme.sh/account.conf需要的时候将被重用。

 

40.使用 DreamHost DNS API

DNS API 密钥可以在https://panel.dreamhost.com/?tree=home.api上创建。确保创建的密钥添加和删除 privelages。

export DH_API_Key="<api key>"

acme.sh --issue --dns dns_dreamhost -d example.com -d www.example.com

‘DH_API_KEY’将被保存~/.acme.sh/account.conf并在需要时重新使用。

 

41.使用 DirectAdmin API

DirectAdmin 接口具有它自己的让我们加密功能,但是此脚本可用于为不在 DirectAdmin 上托管的名称生成证书

用户必须提供登录数据和 URL 到 DirectAdmin incl。港口。您可以创建只能访问的用户

CMD_API_DNS_CONTROL

CMD_API_SHOW_DOMAINS

通过使用登录密钥功能。另见https://www.directadmin.com/api.php和https://www.directadmin.com/features.php?id=1298

export DA_Api="https://remoteUser:remotePassword@da.domain.tld:8443"

export DA_Api_Insecure=1

设置DA_Api_Insecure为 1 表示不安全,0 表示安全 – >区别在于是否检查 ssl 证书的有效性(0)或是否接受(1)

好的,让我们现在发布一个证书:

acme.sh --issue --dns dns_da -d example.com -d www.example.com

该DA_Api和DA_Api_Insecure将被保存~/.acme.sh/account.conf并且在需要时将被重用。

使用自定义 API

如果你的 API 还不被支持,你可以编写你自己的 DNS API。

假设你想命名为’myapi’:

创建一个名为 bash 的脚本~/.acme.sh/dns_myapi.sh,

在脚本中,您必须有一个名为dns_myapi_add()acme.sh 的函数来添加 DNS 记录。

然后你可以使用你的 API 来颁发这样的证书:

acme.sh --issue --dns dns_myapi -d example.com -d www.example.com

有关更多详细信息,请查看我们的示例脚本:dns_myapi.sh

请参阅:https: //github.com/Neilpang/acme.sh/wiki/DNS-API-Dev-Guide

使用词典 DNS API

https://github.com/Neilpang/acme.sh/wiki/How-to-use-lexicon-dns-api

posted @ 2020-03-11 16:00  打闹闹酱  阅读(3020)  评论(0)    收藏  举报