使用 acme.sh 申请 Let's Encrypt 通配符证书

虽然一直在使用 Let's Encrypt 的 SSL 证书,不过是手动在 freessl.cn 申请并手动上传至服务器。有时候一不小心就过期了也没有发现,或者没来得及更新。

今天,在想能不能找到一个办法,自动申请 Let's Encrypt 的 SSL 证书,并且更新之。这样,就不用再担心 SSL 的问题了。于是,我找到了 acme.sh

本文需要用到指令:curl。有些系统不会自带,需要手动安装。

首先,需要下载 acme.sh 并执行。

curl https://get.acme.sh | sh

如果显示"OK, Close and reopen your terminal to start using acme.sh",并且没有提示错误,那么就代表 acme.sh 已经下载并配置好一些东西了。

这时候,我们需要手动让 ~/.bashrc 生效。

source ~/.bashrc
get.acme.sh 干了什么?

1.下载 acme.sh 的压缩包到你账户所在的 home 目录下,并且解压之。

2.创建一个 bash 的 alias,方便使用。

3.创建 cronjob,每天 0:00 自动检查所有的证书。如果快过期,会自动更新证书。

这样,就可以开始正式使用了。

acme.sh 实现了 acme 协议支持的所有验证协议。一般有两种方式验证:HTTP 和 DNS 验证。这里使用 DNS 更加方便一些,因为国内常用的提供域名解析的服务商基本都有提供 API,我们只要申请之,然后使用 export 创建环境变量,之后就可以一劳永逸。

这里演示 DNSPod 创建 API 的过程,其余服务商可以自行查看官方文档。

登陆到 DNSPod 后,点击“用户中心 -> 安全设置 -> API Token 下的查看”就到了图示页面。

DNSPod 创建 API

之后点击“创建 API Token”并输入名称。这里我使用了“SSL”作为名称。之后会提醒你创建成功。并让你截图或复制的方法保存 Token。之后,就可以使用了。

回归正题。之后,我们就可以使用 acme.sh 创建并自动更新证书了。

刚才申请的 API 当然是有用处的。

export DP_Id="YOURID"
export DP_Key="YOURTOKEN"

好了,这里我们创建通配符证书。

acme.sh --issue --dns dns_dp -d example.com -d *.example.com

通配符证书是好了,但是相关文件没有复制到相应位置。那么,我们难道还得手动 mv 一下?不需要,acme.sh 提供了相关的功能。

这里我们使用如下指令:

acme.sh --installcert -d konekomoe.com -d *.konekomoe.com \
--key-file /etc/nginx/ssl/YOURDOMAIN.key \
--fullchain-file /etc/nginx/ssl/full_chain.cer \
--reloadcmd "service nginx force-reload"

当然"--key-file"和"--fullchain-file"这两项后面的路径和文件名都可以更改。我只是按照我的习惯做了一些配置而已。

点赞
  1. shiro说道:
    Google Chrome Windows 10

    Let's Encrypt 通配符证书的确挺不错的,虽然有效期太短了没法开HSTS,但免费,毕竟白嫖的敌敌畏都是甜的 :xdsz:

    1. Yusorai说道:
      Google Chrome Windows 10

      诶,不行吗?不过我好像暂时也用不到,目前解决方案是 Nginx 监听 80 端口并把所有请求都 301 到 https://xxx.com :xdsx:

发表评论

电子邮件地址不会被公开。必填项已用 * 标注