快捷搜索:   nginx

Let's Encrypt Wildcard免费SSL泛域名证书(野卡)签署方法 acme.sh脚本签署免费泛域名证

Let's Encrypt Wildcard正式上线,对于有多重二级域名需求的站长们,是一个大大的福音,不用再去一个个子域名申请,只需要申请一个泛域名,就可以给同域名下的所有子域名使用。当然期限还是一惯的3个月,3个月后得重签一次。

这里还是使用了acme.sh的脚本,acme.sh 实现了 acme 协议, 可以从 letsencrypt 生成免费的证书.现在已经支持泛域名证书的签署


主要步骤:


安装 acme.sh

生成证书

copy 证书到 nginx/apache 或者其他服务

更新证书

更新 acme.sh


1. 安装 acme.sh


安装很简单, 一个命令:

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

普通用户和 root 用户都可以安装使用. 安装在根目录~/.acme.sh/ 这个目录下

而且会自动创建 一个 bash 的 alias, 方便你的使用: acme.sh=~/.acme.sh/acme.sh


2). 自动为你创建 cronjob, 每天 0:00 点自动检测所有的证书, 如果快过期了, 需要更新, 则会自动更新证书.

更高级的安装选项请参考: https://github.com/Neilpang/acme.sh/wiki/How-to-install

安装过程不会污染已有的系统任何功能和文件, 所有的修改都限制在安装目录中: ~/.acme.sh/


现在正式进入正题,签署一份泛域名证书,目前只支持DNS验证的方式签署Let's Encrypt泛域名证书

1、先安装acme.sh脚本

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

如果你之前安装过acme.sh,那建议每次执行之前都升级一下

#./acme.sh --upgrade

或者设置为自动升级

#./acme.sh  --upgrade  --auto-upgrade

2、接下来正式进行签署操作

进入脚本所在目录

#cd ~/.acme.sh/

执行DNS方式获取SSL

#./acme.sh --force --issue --dns -d bnxb.com -d *.bnxb.com --yes-I-know-dns-manual-mode-enough-go-ahead-please

这次升级带来的好处就是如果你之前验证过域名,通过这个步骤就能完成全部申请不需要下面的renew过程

注意这里需要一个bnxb.com和一个*.bnxb.com因为bnxb.com是不被包含在*.bnxb.com下,如果只授权*.bnxb.com的话,就会出现bnxb.com的SSL证书有问题。另外哪个放前面,到时候申请下来的证书名就是哪个,就是浏览器显示的颁发给:*.bnxb.com 还是颁发给:bnxb.com的区别,还有哪个在前面下面步骤操作的目录就需要相应的修改,我这里都是以bnxb.com在前为例

如果是要显示*.bnxb.com

那就改成下面的执行代码,但是要注意这种模式目前有BUG,可能会出现要求你设置两个重复的TXT记录,根本就实现不了,这种情况下,只要执行一遍上面那种签发给bnxb.com的,然后再来执行一遍*.bnxb.com的就能正确执行。

./acme.sh --force --issue --dns -d *.bnxb.com -d bnxb.com --yes-I-know-dns-manual-mode-enough-go-ahead-please

blob.png

按方框里面的要求,将你的域名做一个TXT记录到要求的TXT VALUE上,然后等TXT记录生效(不知道生效了没有可以到https://tool.bnxb.com/dns/查询一下TXT记录是不是这个)

生效后,继续执行

#./acme.sh --force --renew -d bnxb.com -d *.bnxb.com --yes-I-know-dns-manual-mode-enough-go-ahead-please

其实就是把--issue换成了--renew

当然如果你上面第一次执行的是*.bnxb.com在前面,这里也要相应修改,改成类似:

./acme.sh --force --renew -d *.bnxb.com -d bnxb.com --yes-I-know-dns-manual-mode-enough-go-ahead-please


blob.png

下面绿色字体就是生成的SSL cert文件存放位置一共4个注意根据需要COPY到相应位置。到这里需要的证书文件就都生成成功了,正常需要用到的是fullchain.cer和bnxb.com.key

3、接下来说一下证书怎么安装

这里以nginx为例:

注意, 默认生成的证书都放在安装目录下: ~/.acme.sh/, 不要直接使用此目录下的文件, 例如: 不要直接让 nginx/apache 的配置文件使用这目录下面的文件. 这里面的文件都是内部使用, 目录结构随时可能会变化.

正确的使用方法是使用 --installcert 命令,并指定目标位置, 然后证书文件会被copy到相应的位置, 例如:

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

注意吧<domain>换成你的域名

(一个小提醒, 这里用的是 service nginx force-reload, 不是 service nginx reload, 据测试reload 并不会重新加载证书, 所以用的 force-reload)

Nginx 的配置 ssl_certificate 使用 /etc/nginx/ssl/fullchain.cer,而非 /etc/nginx/ssl/<domain>.cer ,否则 SSL Labs 的测试会报 Chain issues Incomplete 错误。

--installcert命令可以携带很多参数, 来指定目标文件. 并且可以指定 reloadcmd, 当证书更新以后, reloadcmd会被自动调用,让服务器生效.

详细参数请参考: https://github.com/Neilpang/acme.sh#3-install-the-issued-cert-to-apachenginx-etc

值得注意的是, 这里指定的所有参数都会被自动记录下来, 并在将来证书自动更新以后, 被再次自动调用.


4、另外一种通过复制证书内容的安装的方法:

主要用于虚拟主机,和宝塔面板,CPANEL等支持自定义输入证书内容的面板,虚拟主机或者宝塔面板的服务器,可以通过面板黏贴SSL CERT文件内容达到自动配置的方式,因此这里特别提一下方法。

①、证书链

那这里就只需要把把fullchain.cer里面的内容复制出来

fullchain.cer的内容其实就是刚刚显示出来的红色框里的内容(bnxb.cer)+ca.cer的内容组合而成的完整证书链

关于复制方法:可以将文件使用WINSCP下载下来用记事本打开,也可以直接在SSH中使用命令(注意刚刚第一步如果是生成*.bnxb.com的证书,下面的路径中bnxb.com就要换成*.bnxb.com)

#cd ~/.acme.sh/bnxb.com
#vi fullchain.cer

vi编辑器的退出行会是按shift+:然后输入q回车

注意在SSH中,fullchain.cer输出的内容其中ca.cer部分的右侧可能会被自动加上一排^M字符,可以复制到记事本后替换掉

这样的命令打开,然后选择复制出来


blob.png

然后把这些内容复制下来黏贴到

blob.png


②、私钥(密钥KEY)也就是PRIVATE KEY

这个在bnxb.com.key这个文件里,只要直接复制出来就行了

同样的下载下来打开,或者VI法

#vi bnxb.com.key

blob.png


blob.png

搞定收工


5、最后说说这个泛域名证书(俗称的野卡)如何自动更新

因为使用了DNS验证,因此需要使用到你域名解析的DNS面板的API接口来修改TXT记录,目前支持 cloudflare, dnspod, cloudxns, godaddy 以及 ovh 等数十种解析商的自动集成。

以 dnspod 为例, 你需要先登录到 dnspod 账号, 进入"用户中心-安全设置-API TOKEN"生成你的 api id 和 api key, 都是免费的. 然后:

执行

#cd ~/.acme.sh/
#export DP_Id="1234"
#export DP_Key="sADDsdasdgdsf"

把里面的ID和key替换成你实际的

#./acme.sh --issue --dns dns_dp -d bnxb.com -d *.bnxb.com

证书就会自动生成了. 这里给出的 api id 和 api key 会被自动记录下来, 将来你在使用 dnspod api 的时候, 就不需要再次指定了. 直接生成就好了:

下次只需要执行

./acme.sh --issue -d bnxb.com -d *.bnxb.com --dns dns_dp

证书就自动生成了,所以只要把这句命令设置自动执行,就会自动生成了


更多DNS的API更新方法详见 https://github.com/Neilpang/acme.sh/blob/master/dnsapi/README.md

您可能还会对下面的文章感兴趣: