使用acme.sh自动申请证书让你的网站用上https

1,363 阅读2分钟

acme.sh

Let's Encrypt是一个证书颁发机构,从它可以申请3个月的泛域名证书

有了证书就可以让我们的网站用上https了

acme.sh是可以从Let's Encrypt申请证书的一个工具,

使用它可以在自动在证书将到期前申请并更换证书,也就相当于永久的了

域名

要申请证书,你需要证明你对域名的实际控制权

有二种方式来验证

  1. 添加一条特定的DNS解析记录
  2. 使用域名http方式访问到验证文件

后者没有办法去申请泛域名,只能申请单个域名,因为没有办法验证到所有的子域名

当前我的域名是从阿里云购买的,并且acme.sh支持阿里云

因此可以申请一个泛域名证书

在阿里云中RAM访问控制里创建一个用户acmesh,并且只给该用户修改域名解析所需要的权限AliyunDNSFullAccess

环境变量里加入访问密钥,在.bashrc中加入

export Ali_Key="AccessKeyID的值" 
export Ali_Secret="AccessKeySecret的值"

安装acme.sh

curl  https://get.acme.sh | sh -s email=你的邮箱

国内的网络,上面的安装很可能会失败,如果上面安装失败,从代码安装

git clone https://github.com/acmesh-official/acme.sh.git 
cd acme.sh
./acme.sh --install -m 你的邮箱

安装成功后还不可以直接使用acme.sh

需要source ~/.bashrc,或者用户重新登录

申请证书

现在acme.sh命令可以用了,那么

acme.sh --issue --dns dns_ali -d *.你的域名

导出证书

mkdir -p /certs/
acme.sh --install-cert -d *.你的域名 --key-file /certs/key.pem --fullchain-file /certs/cert.pem --reloadcmd "systemctl reload nginx"

自动更新

之前安装成功的时候,系统中被添加了一条定时任务每天执行

上面的安装证书的操作也都会被变成配置记录在域名下

当证书更新成功后就会覆盖之前的证书文件,并且执行配置中记录的reloadcmd使证书生效