使用acme.sh申请&自动续期LetsEncrypt免费SSL证书

时间:2024-04-15 12:10:23

一、简介

LetsEncrypt是一个免费、自动、开放的证书颁发机构。
acme.sh 实现了 acme 协议, 可以从 LetsEncrypt 生成免费的证书。

本文介绍如何使用acme.sh来签发并自动续期LetsEncrypt免费SSL证书。

二、安装

安装acme.sh,只需要一条命令 

curl https://get.acme.sh | sh
alias acme.sh=~/.acme.sh/acme.sh

使用DNS方式验证 ,本文以CloudXNS(此服务商已经停止为免费用户提供dns服务,建议使用阿里云的云解析dns,方法同理)为例,其他DNS服务商见文章结尾

事实上,acme.sh支持http方式和DNS方式验证域名所有权,但考虑到有时会失效和部分用户服务器无web服务,此处使用DNS验证方式。

--------

2021-07-21更新:由于acme.sh调整了默认证书let\'s encrypt为zerossl导致后续签发证书报错如下:

 

 

 解决方案二选一:

1.添加ssl证书前执行:export ACCOUNT_EMAIL="你的邮箱xxx@xxx.com"

2.添加ssl证书前执行:acme.sh --set-default-ca  --server  letsencrypt

-------

1.验证域名

登录DNS控制台,进入API管理页面(不同DNS服务商的页面不同,见文章结尾),记录下API信息

导入API信息到acme.sh,运行命令

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

2.签发证书

[1]签发指定域名,如example.com,运行命令

acme.sh --issue --dns dns_cx -d example.com -d www.example.com --reloadcmd "/nginx/nginx/sbin/nginx -s reload"
#签发ECC证书请使用以下命令
acme.sh --issue --dns dns_cx -d example.com -d www.example.com --keylength ec-256 --reloadcmd "/nginx/nginx/sbin/nginx -s reload"

[2]签发泛域名,运行命令

acme.sh --issue --dns dns_cx -d example.com -d *.example.com --reloadcmd "/nginx/nginx/sbin/nginx -s reload"
#签发ECC证书请使用以下命令
acme.sh --issue --dns dns_cx -d example.com -d *. example.com --keylength ec-256 --reloadcmd "/nginx/nginx/sbin/nginx -s reload"

请注意:reloadcmd非常重要,--reloadcmd "" 中为重启对应服务命令,如上为博主自己服务器上重启nginx服务命令。如果没有正确的“reloadcmd”,证书可以自动续订,但是证书可能无法刷新到您的服务器(如nginx或apache),那么您的网站将无法在60天内显示续订证书。

保持最新的acme

acme.sh --upgrade --auto-upgrade

请注意,命令中export CX_Key、export CX_Secret、–dns dns_cx为CloudXNS的参数,请根据你的服务商修改

各大DNS商API获取方法请参考官方文档(本教程在第三点,阿里云在第11),如下:

https://github.com/Neilpang/acme.sh/blob/master/dnsapi/README.md

https://github.com/Neilpang/acme.sh/wiki/dnsapi

阿里云 云解析参考:

export Ali_Key="sdfsdfsdfljlbjkljlkjsdfoiwje"
export Ali_Secret="jlsdflanljkljlfdsaklkjflsa"
acme.sh --issue --dns dns_ali -d example.com --reloadcmd "/nginx/nginx/sbin/nginx -s reload"

签发成功!

 

 

取消域名签发方式:

acme.sh --remove -d example.com

并手动删除目录 /root/.acme.sh/签发的域名/

 

默认新签发的证书路径为: /root/.acme.sh/签发的域名/ 目录下。

 

另外有standalone生成ssl证书的方式,请参考 https://www.cnblogs.com/007sx/p/11370713.html