记录一些常用的函数和瞎折腾的过程……

使用Let's Encrypt的acme.sh申请泛域名证书

提醒:本文最后更新于 409 天前,文中所描述的信息可能已发生改变,请谨慎使用。

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
《使用Let's Encrypt的acme.sh申请泛域名证书》3条评论
  1. 学习了,不错!

    山野愚人居 回复
  2. 这个教程非常好啊!

    工控人生 回复
发表评论