使用Let's Encrypt的acme.sh申请泛域名证书
Let's Encrypt是一个非常不错的域名证书机构,致力于普及https,现在早已能够签发泛域名证书(俗称“野卡”),而且还是免费的,要知道其它机构的泛域名证书可贵的很。
下面就简单介绍一下如何申请Let's Encrypt证书。
也可以参考官方说明:https://github.com/Neilpang/acme.sh。
一、安装
在Linux下在线安装脚本,使用以下命令
curl https://get.acme.sh | sh
或者:
wget -O - https://get.acme.sh | sh
在这一步安装过程中,完成了3个任务:
1、拷贝sh脚本到~/.acme.sh/
2、创建alias别名acme.sh=~/.acme.sh/acme.sh
3、启动定时器,并加入到定时任务
其中定时任务可以通过“crontab -l”命令查看到,若没有,也可以自行添加,定时任务如下:
0 0 * * * "/home/user/.acme.sh"/acme.sh --cron --home "/home/user/.acme.sh" > /dev/null
二、http方式申请单域名证书
若不想使用DNS api,或者你的域名服务商不提供DNS API,此时就可以使用acme.sh的http方式手动申请单域名或多域名证书了(一个根域名或多个个二级域名)。命令如下:
acme.sh --issue -d example.com -d www.example.com -d -w /home/wwwroot/example.com
其中“/home/wwwroot/example.com”是你网站根目录,要确保能正常访问。www.example.com和example.com为需要申请证书的域名。申请完成后,域名证书存放在“~/.acme.sh/example.com/”中。
注意:此申请方式为http方式,在申请过程中,必需要指定域名,也必需并指定域名所在的网站根目录,acme.sh在执行过程中 会全自动的生成验证文件,并放到网站的根目录, 然后自动完成验证, 最后会也会自动的删除验证文件, 整个过程没有任何副作用。
若要申请泛域名证书,忽略此步,继续往下看。
三、导入DNS API
签发泛域名证书是最好的方式了,申请一个证书任意二级域名都可以使用,非常方便。
根据你的域名服务商提供的DNS API,并导入DNS API,各域名服务商的DNS API请参考官方说明:https://github.com/Neilpang/acme.sh/tree/master/dnsapi。
这里以阿里云为例,在阿里云的控制台里找到自己的DNS API,然后使用以下命令导入到acme.sh中:
export Ali_Key="ali-key"
export Ali_Secret="ali-secret"
这个DNS API信息会保存在“~/.acme.sh/account.conf”文件中。
四、申请泛域名证书
导入域名商的DNS API之后就可以使用以下命令,自动解析DNS(通过api给你的域名添加一条txt解析记录),验证通过后就会下发证书:
acme.sh --issue --dns dns_ali -d example.com -d *.example.com
证书申请成功后,默认保存在“~/.acme.sh/example.com”目录下。注意:“dns_ali”表示使用阿里云的DNS API,域名商不同的话此处会不同,请参考上述文档。
五、更新nginx或apache证书
由于更新周期为60天,自动更新续签后,需要重新加载你的nginx或apache,以便刷新证书。不然新证书不能自动更新到你的nginx或Appache服务中。
Apache命令如下:
acme.sh --install-cert -d example.com \
--cert-file /path/to/certfile/in/apache/cert.pem \
--key-file /path/to/keyfile/in/apache/key.pem \
--fullchain-file /path/to/fullchain/certfile/apache/fullchain.pem \
--reloadcmd "service apache2 reload"
Nginx命令如下:
acme.sh --install-cert -d example.com \
--key-file /path/to/keyfile/in/nginx/key.pem \
--fullchain-file /path/to/fullchain/nginx/cert.pem \
--reloadcmd "service nginx reload"
执行该命令后,命令中的参数将自动保存在~/.acme.sh/example.com目录下的example.com.conf文件里,定时器更新证书的时候实现自动部署。
上述命令把下发的证书复制到你指定的位置,这样避免你直接从“~/.acme.sh/”读取证书,然后重新加载nginx或apache以刷新证书。域名为必需参数,其它参数为可选。
但要注意的是,reloadcmd参数非常重要(reloadcmd后面的参数为重新加载nginx或Apache的命令,可以根据系统的不同作相应修改),即使更新了证书,但是nginx或apache没有重新加载,证书是不是会刷新到服务中去的。
7、升级更新acme.sh
升级acme.sh可以使用以下命令:
acme.sh --upgrade
或者使用自动升级,使用以下命令,有更新就自动更新,不需人工干预:
acme.sh --upgrade --auto-upgrade
要关闭自动升级使用以下命令:
acme.sh --upgrade --auto-upgrade 0