Let's Encrypt

申请过SSL证书的童鞋应该对Let's Encrypt这个证书颁发机构不陌生,他免费,而且也被各大浏览器所支持和认可.但一般我们申请到的都单域或双域(www和主域名)的证书.这样一来,我们需要做全站SSL的工作量就会超级大!有没有一个办法,像DNS解析一样,用*.url的方式,让全站共用一个SSL证书呢.

acme.sh

acme.sh是一个实现了 acme 协议的脚本,可以从 Let's Encrypt 生成我们需要的泛解析SSL证书.当然,你用来生产普通证书也是没有问题的.

本文仅对使用域名提供/解析商的 API Token 来自动申请泛域名证书的过程进行讲解,acme.sh还有很多很强大的功能例如配合 Nginx 或者 Apache 自动申请证书等,请自行查看 github 项目 wiki 发掘

项目链接:Github - Link

安装 acme.sh

curl https://get.acme.sh | sh
# 或者
wget -O- https://get.acme.sh | sh

安装过程中可能会出现要你安装socat的警告,既然是警告嘛,忽略就是了,警告不就是用来忽略的嘛)滑稽
当然我们还是真诚的建议安装.

安装过程不会修改已有的任何系统功能和文件,请放心食用. acme.sh在程序结束后会被自动安装到~/.acme.sh/目录中

获取API Token

由于acme.sh对域名解析/提供商的支持十分广泛,所以请针对自己所在的域名提供商获取对应的API Token.
支持列表:点我跳转

本文以腾讯的DNSPod为例,首先,登录DNSPod,进入顶部导航栏里的用户中心,在左侧的导航栏里,找到安全设置,看到页面的最下面,有个API Token.点击查看->创建API Token->填写Tokens名称,复制好ID与Token即可.保存待用.

申请泛解析域名SSL证书

首先,我们需要设置两个临时环境变量,内容为我们刚刚得到的ID与Token.用下面两条命令即可,复制并修改相应部分.
注:注意大小写,不同的域名提供商,环境变量名不同!

# DNSPod
export DP_Id="你的 API ID"
export DP_Key="你的 Token"

如果你的域名提供商不是DNSPod,其他域名提供商变量名一览表:点我查看

临时环境变量只需配置这一次即可,当成功申请证书后,API 信息会被自动保存在~/.acme.sh/account.conf里,下次你使用acme.sh的时候系统会自动读取并使用.

下面我们来正式开始申请泛域名证书,将example.com换成你自己的域名(重要!)

cd ~/.acme.sh/ 或 alias acme.sh=~/.acme.sh/acme.sh
acme.sh --issue -d example.com -d *.example.com --dns dns_dp
# 多个域名只需要"-d 你的域名"即可

注:不同的域名解析商所用命令有细微不同!如果你的提供商不是DNSPod,请自行去上面的链接查看!

过程有点长,稍作等待,夏天这么热,喝杯冰阔落就好了( ̄﹃ ̄)

查看证书

申请完成后屏显会输出证书路径
证书文件名为fullchain.cer
密匙文件名为example.com.key

由于证书默认(在你没安装宝塔等同样调用 acme 签发证书的面板时)会在 acme 的内部目录~/.acme.sh/中生成,不建议直接使用该路径填写至 nginx 等配置中,而是使用--installcert命令,具体请参考↓
Github

关于证书续期

Let's Encrypt 证书的有效期为三个月,acme.sh会每隔60天自动帮你续期,无需你进行任何干预

如果你想强制续期或者取消自动续期可以看
Github链接
参考链接