Acme.sh脚本签发Let’s Encrypt的ECC免费SSL证书
in 笔记 with 0 comment

Acme.sh脚本签发Let’s Encrypt的ECC免费SSL证书

in 笔记 with 0 comment

官方git:https://github.com/Neilpang/acme.sh

以往都是使用Let’s Encrypt官方的certbot来申请SSL证书,acme.sh使用的是acme协议来申请,免去安装certbot的一大堆支持库,甚至包括Python。

以下环境采用的是Debian8.10 64/NGINX 1.14.0,root用户。

1、安装:

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

把acme.sh加入环境变量,方便以后操作

vim .bashrc

加入一行:

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

更新以下acme.sh,并保持自动更新:

acme.sh  --upgrade  --auto-upgrade

把要申请的域名解析和http配置好。

2、下面来签发证书,根据各人不同情况,有Domain/Standalone/DNS/NGINX&Apache等模式,以及支持泛域名签发的DNS API模式。

我没有什么特殊需求,这里采用的是常见的域名模式:

acme.sh --issue -w /home/wwwroot/domain.com -d domain.com -d www.domain.com --keylength ec-256

其中ec-256还有384、521可选,一般256足够,Let’s Encrypt还不支持521长度的key。

一切顺利的话,大概过程如下:

[2018年 03月 16日 星期五 13:13:10 CST] Single domain='domain.com' [2018年
03月 16日 星期五 13:13:10 CST] Getting domain auth token for each domain
[2018年 03月 16日 星期五 13:13:10 CST] Getting webroot for
domain='domain.com' [2018年 03月 16日 星期五 13:13:10 CST] Getting
new-authz for domain='domain.com' [2018年 03月 16日 星期五 13:13:11 CST]
The new-authz request is ok. [2018年 03月 16日 星期五 13:13:11 CST]
domain.com is already verified, skip http-01. [2018年 03月 16日 星期五
13:13:11 CST] Verify finished, start to sign. [2018年 03月 16日 星期五
13:13:12 CST] Cert success.
-----BEGIN CERTIFICATE----- MIIFNzCCBB+gAwIBAgISAz3MZDk9mfiaF6gocWhzB5SHMA0GCSqGSIb3DQEBCwUA
................................................................
................................................................
fL4aJ96mvkFGOweOT5v+aaDUpo/Js6x3fHPOFLmInrnthO4QW1YaLhqwUg==
-----END CERTIFICATE----- [2018年 03月 16日 星期五 13:13:12 CST] Your cert is in /root/.acme.sh/domain.com_ecc/domain.com.cer
[2018年 03月16日 星期五 13:13:12 CST] Your cert key is in /root/.acme.sh/domain.com_ecc/domain.com.key
[2018年 03月 16日星期五 13:13:12 CST] The intermediate CA cert is in /root/.acme.sh/domain.com_ecc/ca.cer
[2018年 03月 16日 星期五 13:13:12 CST] And the full chain certs is there:
/root/.acme.sh/domain.com_ecc/fullchain.cer

补充api方式:

export CX_Key="1234"
export CX_Secret="1234"

acme.sh --issue --dns dns_cx -d domain.com -d *.domain.com --keylength ec-256

3、证书生成好了,可以看到最后还很贴心的帮你合并好了fullchain.cer,但我们并不要直接使用,因为该目录只是acme.sh的工作目录,随着升级等可能会有变化。

所以还需要安装证书:

acme.sh  --ecc \
         --installcert -d domain.com \
         --key-file   /usr/local/nginx/ssl/domain.com.key \
         --fullchain-file /usr/local/nginx/ssl/domainfullchain.cer \
         --reloadcmd  "service nginx force-reload"

需要注意的是,因为申请的是ECC证书,和RSA证书存放路径不同,所以要加一个--ecc参数,否则会提示找不到证书,acme.sh -h可以查看详细参数。

成功后输出的结果:

[2018年 03月 16日 星期五 13:29:55 CST] Installing key
to:/usr/local/nginx/ssl/domain.com.key [2018年 03月 16日 星期五 13:29:55
CST] Installing full chain
to:/usr/local/nginx/ssl/domainfullchain.cer [2018年 03月 16日 星期五
13:29:55 CST] Run reload cmd: service nginx force-reload [2018年 03月16日 星期五 13:29:55 CST] Reload success

4、证书自动更新

检查一下cron,如果没有acme.sh的任务,手动加入:

0 3 */11 * * "/root/.acme.sh"/acme.sh --cron --home "~/.acme.sh" > /dev/null

每隔11天凌晨3点检查更新一次。因为签发一次有效期3个月,能提前30天续期,这样设置已经足够。

剩下的就是修改NGINX配置,加入SSL方式了。

Responses