Let's Encrypt 是目前免费SSL证书应用最广泛的一家,不仅免费而且证书也被众多机构认可的。以前 Let’s Encrypt 的证书只支持顶级域名申请,不过最近新出来通配符/泛域名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  "/etc/init.d/nginx reload"该命令会被自动记录,以后自动更新证书的时候也会自动执行该命令的。
注意事项
- Nginx 的配置 ssl_certificate使用/etc/nginx/ssl/fullchain.cer,而非/etc/nginx/ssl/<domain>.cer,否则 SSL Labs 的测试会报Chain issues Incomplete错误。
- --installcert命令可以携带很多参数,来指定目标文件。并且可以指定- reloadcmd,当证书更新以后,- reloadcmd会被自动调用,让服务器生效。
- 证书在 60 天以后会自动更新,无需任何操作。
- 设置 Let's Encrypt 作为证书默认服务提供商,执行命令 acme.sh --set-default-ca --server letsencrypt

