类别:LINUX / GNU / 日期:2020-04-02 / 浏览:2006 / 评论:0
acme.sh实现了 acme 协议, 可以从 letsencrypt 生成免费的证书,可以通过http或dns的方式自动续签证书有效期。
常规操作看github上的说明即可,这里主要说一下我个人的部署方式。基本的思路就是 自定义证书路径-->自定义签发邮箱-->自定义签发标识-->自定义证书续签-->自定义目录部署,因为所属的环境不同,所以很难做到直接用acme.sh自动签发部署,下面就说下我的处理方法。
首先是安装acme.sh客户端,按照官方给的文档定义了三个地方,分别是证书路径,签发邮箱跟签发标识,如下:
git clone https://github.com/Neilpang/acme.sh.git cd acme.sh ./acme.sh --install \ --config-home /www/wwwroot/key/acme \ --accountemail "zhbogie@gmail.com" \ --useragent "wildcard"
由于V3版本的acme.sh使用了Zerossl作为默认(CA)证书颁发机构。因此在颁发新证书之前需要进行(一次性)帐户注册。如下
acme.sh --register-account -m zhbogie@gmail.com --server zerossl
然后是自动签发所需要的环境,我这里选择dns,运营商则是dnspod。虽然官网几乎覆盖了所有dns运营商,但是这里我还是强烈推荐dnspod,例如阿里云的api调用就会出问题,也不考虑去做修改,因为我怕以后官方更新之后会覆盖我的修改的文件。
从dnspod获取到id跟key之后,在系统配置内添加永久变量,如下:
# vi /etc/profile export DP_Id="100000" export DP_Key="10000000000000000000000000"
完成这一步就可以开始签发证书了,方式如下:
/root/.acme.sh/acme.sh --issue --dns dns_dp -d '*.onx8.com' -d onx8.com
等操作完成之后,证书会被保存在我们安装时填写的/www/wwwroot/key/acme/路径内,至此签发完成。那么就是考虑续签的问题了。根据官方文档得知续签命令如下:
/root/.acme.sh/acme.sh --renew-all
由于官方默认安装时,会在计划任务里面添加自动更新的命令(听说失误率很高),所以这里我们要修改一下这条命令,修改如下:
# crontab -e #0 0 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null 0 0 * * * "/root/.acme.sh"/acme.sh --renew-all > /dev/null
到此为止,证书每天凌晨都将会自动续签,剩下的就是部署的问题了。以下是我给出来的参考例子,你们可以根据自行情况进行修改。
mv /www/wwwroot/key/acme/*.onx8.com/*.onx8.com.key /www/wwwroot/key/acme/*.onx8.com/privkey.pem &> /dev/null mv /www/wwwroot/key/acme/*.onx8.com/fullchain.cer /www/wwwroot/key/acme/*.onx8.com/fullchain.pem &> /dev/null \cp -r -a /www/wwwroot/key/acme/*.onx8.com/privkey.pem /www/server/panel/vhost/cert/www.onx8.com/privkey.pem &> /dev/null \cp -r -a /www/wwwroot/key/acme/*.onx8.com/fullchain.pem /www/server/panel/vhost/cert/www.onx8.com/fullchain.pem &> /dev/null sleep 3 mv /www/wwwroot/key/acme/*.onx8.com/privkey.pem /www/wwwroot/key/acme/*.onx8.com/privateKey.pem &> /dev/null mv /www/wwwroot/key/acme/*.onx8.com/fullchain.pem /www/wwwroot/key/acme/*.onx8.com/certificate.pem &> /dev/null \cp -r -a /www/wwwroot/key/acme/*.onx8.com/privateKey.pem /www/server/panel/ssl/privateKey.pem &> /dev/null \cp -r -a /www/wwwroot/key/acme/*.onx8.com/certificate.pem /www/server/panel/ssl/certificate.pem &> /dev/null
大致的思路就是将现有的证书修改为对应的名字,在进行强制覆盖,当然这些操作都是丢弃响应日志的。将上面的命令做成一个脚本放在凌晨证书更新之后即可,在此郑重感谢acme还有LetsEncrypt为我们这些穷b创造了如此大的福祉。
最后要说明的是,这是二级通配符,并不支持三级泛解析!至少截止当前V2版本是这样的。
发表评论 / 取消回复