今天跟彧繎聊天时发现他的站使用的也是泛域名证书而且是一年了,问了他才知道是收费的,当然并不贵,只是我没有admin开启的邮箱也就是admin#talklee.com,所以无法申请,恰巧看到明月登楼博主的博客也是SSL证书就咨询了以下,发现他的是zerossl的证书,当然跟青云的一样有效期三个月,但是zerossl可以通过acme.sh实现自动续费,目前acme泛域名貌似仅仅命令形式申请,在官网上申请的时候需要一些费用才行。
首先安装acme.sh
acme.sh 实现了 acme 协议,可以帮助你快速申请SSL证书,自动更新证书等操作,极大简化操作步骤。在使用之前,我们需要先安装,以下命令均在Linux系统完成。
代码语言:javascript复制curl https://get.acme.sh | sh
source ~/.bashrc
或者:
代码语言:javascript复制wget -O - https://get.acme.sh | sh
使用curl命令安装的第一次出现了如图的错误,提示可以先安装 socat ,因为我不需要,所以没有安装。curl安装失败,可以使用wget命令尝试。
设置为自动更新(可选):
代码语言:javascript复制acme.sh --upgrade --auto-upgrade
acme的GitHub地址:https://github.com/acmesh-official/acme.sh
安装acme完成后使用“acme.sh -v”命令查看版本号,代码如下:
代码语言:javascript复制acme.sh -v
如图所示,acme版本号是3.0.3,忽略图中的红色,因为测试的时候我用了两台机器,由于第一次安装各种错误,导致教程不完善,毕竟我也是摸着石头过河,对这些东西不熟悉,只能一点点来,至此安装acme完成。
按照网上所说的acme.sh 2.x版本默认使用Let’s Encrypt作为服务提供商,3.x之后默认使用的是ZeroSSL,但是由于我第一次弄,所以还是重新更换默认服务商为ZeroSSL,代码如下:
代码语言:javascript复制acme.sh --set-default-ca --server zerossl
系统返回的命令就是zerossl服务商,然后我们设置下域名解析的DNS API。
配置DNS API
SSL证书验证可通过DNS验证、文件验证等多种方式,为了方便多个域名申请以及后续证书更新,推荐使用DNS API方式,不过在使用前需要先进行设置。 如果使用的DNSPOD(国内版),命令为:
代码语言:javascript复制export DP_Id="00521"
export DP_Key="talklee.com"
获取DNSPOD密钥可通过:https://console.dnspod.cn/account/token/token 获取,如图:
将ID换成自己的,把Token值放在Key之内,然后执行命令,如图:
acme.sh部署完成后我们来申请ZeroSSL泛域名SSL证书,需要先关联账户,执行下面的命令会自动关联账户,命令如下(admin@talklee.com改成你自己的ZeroSSL邮箱,即使没注册,运行命令之后也会自动注册的):
代码语言:javascript复制acme.sh --register-account -m admin@talklee.com --server zerossl
命令执行后,如图,会给你反馈一些信息,记下来就行,一般用不到。
账户注册关联完成后申请泛域名证书,执行以下命令:
代码语言:javascript复制acme.sh --dns dns_dp --issue -d *.talklee.com
其中 dns_dp 是指DNSPOD,*.talklee.com 换成您的 域名即可,完成后如图:
注:acme.sh支持多个DNS服务商,演示用的dnspod,其他的服务商可以参考官方文档:https://github.com/acmesh-official/acme.sh/wiki/dnsapi 进行查看设置。
生成过程中,几分钟左右即可完成,在验证的过程中会自动解析一个TXT记录,校验完成后会自动删除,所以建议大家选择DNS校验,这里就不截图了,感兴趣的可以是dnspod域名继续的记录查看。待验证通过后即表示申请成功,如图所示,会给我们反馈证书生成的路径:
生成的证书放在了/root/.acme.sh/*.talklee.com目录,因为这是 acme.sh 脚本的内部使用目录,而且目录结构可能会变化,所以我们不能让 Nginx 的配置文件直接读取该目录下的证书文件,需要使用--installcert命令,指定目标位置,然后证书文件会被 copy 到相应的位置,我们先去/data/目录下新建一个/ssl/文件夹,进入文件夹在新建一个/域名文件夹/,例如, /data/ssl/talklee/,然后执行以下命令:
代码语言:javascript复制acme.sh --installcert -d *.talklee.com
--key-file /data/ssl/talklee/*.talklee.com.key
--fullchain-file /data/ssl/talklee/fullchain.cer
--reloadcmd "service nginx reload"
把“*.talklee.com”替换成刚刚您自己申请的泛域名,再把“*.talklee.com.key”换成刚刚生成的SSL证书密钥文件,fullchain.cer不需要替换了,默认生成的就是这个。
另外还得说下,我直接执行命令的时候出错(cannot touch错误 ),所以才新建目录之后才执行,执行完成后,在目录中才能看见被Copy的文件。正确的显示如下:
即完成命令之后会自动迁移,但是重启的命令出错,(重载代码已更新,不会出现图中错误),如图无效去宝塔软件面板中重载nginx即可,证书配置完成后,我们需要部署到网站,打开对应的站点,点击站点配置,在弹出的界面选择SSL,然后选择其他证书,把刚刚Copy的文件内容复制到证书里面,到密钥(KEY)对应的是.key文件,证书(PEM格式)对应的是.cer文件。
复制完成后点击底部保存按钮,关于是否开启http强制跳转httls随意,建议开启,在右上角,设置完成后,打开配置文件,如图:
其他内容都不需要管,因为是系统生成的,我们只需要把SSL证书的路径更换一些,代码如下:
代码语言:javascript复制ssl_certificate /data/ssl/talklee/fullchain.cer;
ssl_certificate_key /data/ssl/talklee/*.talklee.com.key;
把证书的路径换成我们刚刚Copy的路径即可。一切就绪之后我们打开网站,查看SSL证书,如图:
终于完成了,不怪彧繎博主了,真的是太费事,目前证书有效期是90天,三个月后按理说会自动续期,至于结果如何我们三个月后再见了,码了小半天的文章,测试了整整一天,我得去冲杯咖啡歇会,太尼玛累人了,当然网上的教程很多,只不过他们会忽略一步基本的步骤,导致我测试的时候有些抓瞎,所以才把完整的步骤整理后重新发布一篇,有问题留言反馈吧。