鹧鸪菜菜子

免费申请Let's Encrypt泛域名SSl证书
Let's Encrypt 是目前免费SSL证书应用最广泛的一家,不仅免费而且证书也被众多机构认可的。以前 Let...
扫描右侧二维码阅读全文
30
2018/09

免费申请Let's Encrypt泛域名SSl证书

Let's Encrypt 是目前免费SSL证书应用最广泛的一家,不仅免费而且证书也被众多机构认可的。以前 Let’s Encrypt 的证书只支持顶级域名申请,不过最近新出来通配符/泛域名SSL证书。泛域名证书就比单域名证书方便的多了,一次签发所有子域名通用只需要担心续期问题就行了。

免费SSL证书

今天我们来说下如何申请使用 Let’s Encrypt 泛域名SSL 证书。

安装 acme.sh

进入 home 目录,并执行安装命令

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

安装成功后会自动将acme.sh安装进了用户目录下.acme目录中,你可以使用 find 命令找到真实的路径。

创建 一个 bash 的 alias

alias acme.sh=~/.acme.sh/acme.sh

方便我们之后可以直接使用acme.sh调出命令。

生成证书

这里我使用的是dns自动验证方式验证域名所有权。

acme.sh 目前支持 cloudflare, dnspod, cloudxns, godaddy 以及 ovh 等数十种解析商的自动集成
具体可参考官方文档:https://github.com/Neilpang/acme.sh/blob/master/dnsapi/README.md

由于我的dns解析使用的是 Hurricane ( dns.he.net ) 这家因为没有提供Api,所以我们需要手动设置用户信息来完成域名所有权的验证,如下:

export HE_Username="用户名"
export HE_Password="密码"

然后执行下面的命令生成证书文件(请替换为自己的域名)

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

需要注意的是:第一个 -d 后不可直接写通配符域名 *.example.com,否则可能会出现签发的证书无法被信任的情况,一定要写个单域名。第二个 -d 后面可以写泛域名。

到这里我们的证书就自动获取到用户目录下.acme.sh 文件夹下了。

复制/安装证书

正确的使用方法是使用 --installcert 命令,并复制到指定目标位置,可用以下命令自动复制到指定目录:

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

该命令会被自动记录,以后自动更新证书的时候也会自动执行该命令的。

注意事项

  1. 这里的 service nginx force-reload, 不是 service nginx reload, 据测试, reload 并不会重新加载证书, 所以用的 force-reload,另外WDCP的LNMP用的是 service nginxd force-reload这行命令。
  2. Nginx 的配置 ssl_certificate 使用 /etc/nginx/ssl/fullchain.cer ,而非 /etc/nginx/ssl/<domain>.cer ,否则 SSL Labs 的测试会报 Chain issues Incomplete 错误。
  3. --installcert命令可以携带很多参数,来指定目标文件。并且可以指定reloadcmd,当证书更新以后,reloadcmd会被自动调用,让服务器生效。
  4. 证书在 60 天以后会自动更新,无需任何操作。
最后修改:2018 年 10 月 18 日 03 : 03 PM
如果觉得我的文章对你有用,请随意赞赏

发表评论