Let’s Encrypt 通配符域名(泛域名)证书申请及续期

0.背景

我这个小站目前使用的是 Let’s Encrypt 提供的免费 SSL 证书(是不是仿佛看到博主脸上若隐若现的一个…一个…“穷” 字了),Let’s Encrypt 的免费 SSL 证书使用还是挺广泛的,由于证书的有效期比较短,如果需要一直使用就要每 90 天内续期一次。单一域名的证书申请和续期比较方便,可以一键自动化申请,也可以用 Crontab 创建一个定时任务自动进行单一域名证书的续期;Let’s Encrypt 现在也支持通配符域名证书的申请,不过要自动化完成申请和续期比较困难。但是,博主的小站为了加速,使用了多域名来提高浏览器并发连接数(点击《 格物躬行博客(基于WordPress)的性能优化之路 》 了解详情),而且为了对抗“和谐”与“网络防火长城”开启了全站的 HTTPS ( SSL ) 加密,所以,Let’s Encrypt 不能自动或简便的完成通配符域名证书续期,那么通配符域名的证书如果到期了怎么(⊙_⊙?)!而且单一域名的证书续期命令” certbot-auto renew “也无效了,蒙圈了啊……

1.原理解析

通过一番搜索学习,发现 Let’s Encrypt 官方:https://certbot.eff.org/ 能够提供一个插件工具,对部分域名托管商的托管的通配符域名可以自动续期,如 Cloudflare 托管的域名可以使用” certbot-dns-cloudflare “插件。另外,针对阿里云、腾讯云托管的域名,可以参考《 不会自动为 Let’s Encrypt 通配符证书续期?我写了个小工具 》( https://www.jianshu.com/p/d318321b93a1 )。但是,悲剧的是我的域名托管商既不在 Let’s Encrypt 官方插件工具覆盖到的域名托管商里面,也不在阿里云、腾讯云进行域名托管的,所以,只能自己探索了,突然,灵光一闪,干嘛非要自动续期啊,不能自动就手动吖,手动不是不能用” certbot-auto renew “么,我把要续期的通配符域名重新申请一次 SSL 证书不就可以了吗,O(∩_∩)O!

2.通配符域名(泛域名)证书申请

  1. #从 Let’s Encrypt 官网下载 Certbot-auto 脚本,该脚本用于 SSL 证书申请。
  2. # certbot-auto 和 certbot 本质上是完全一样的;不同之处在于运行 certbot-auto 会自动安装它自己所需要的一些依赖,并且下次运行时,自动检测并更新 Certbot-auto 脚本。
  3. sudo wget https://dl.eff.org/certbot-auto
  4. sudo chmod a+x certbot-auto
  5. sudo  ./certbot-auto certonly -d *.go2do.net -d go2do.net --manual --preferred-challenges dns --server https://acme-v02.api.letsencrypt.org/directory
  6.  
  7. #参数" -d "指定为哪个域名申请证书,如" -d go2do.net "和(或)" -d www.go2do.net ",如果是通配符域名(泛域名)证书申请则输入" -d *.go2do.net ";
  8. #参数" --manual "表示手动交互模式,利于了解一下申请 SSL 证书的基本过程;
  9. #参数" --preferred-challenges dns "表示使用 DNS 方式校验域名所有权,通配符域名(泛域名)证书只能使用 DNS 方式;
  10. #参数" --server https://acme-v02.api.letsencrypt.org/directory "用于指定 Let's Encrypt ACME v2 版本使用的服务器, v2 与 v1 版本服务器不同,需要显示指定;
  11.  
  12. # 使用参数" --manual "时,手动交互操作交互流程包括:
  13. # 1.是否同意 Let's Encrypt 协议要求,按 Y 同意
  14. # 2.询问是否对域名和机器(IP)进行记录,按 Y 同意 (可能会要求输入 email)
  15. # 3.域名验证 dns 解析增加 TXT 配置,对申请域名添加 TXT 解析,名称为如" _acme-challenge.go2do.net ",值为交互模式所给出的一串保护大小写字母及数字混合的字符串
  16. #进行到第3步时,需要我们去域名托管的服务商那里,创建一条 TXT 解析,并完成无误的输入如上的的名称和值
  17. #原来执行" certbot-auto  "命令的窗口不要动,再新开一个 Shell 窗口
  18. sudo dig  -t txt  _acme-challenge.go2do.net @8.8.8.8 
  19.  
  20. #注意查看,是否能够返回我们在域名服务商那里设置的" _acme-challenge.go2do.net "域名的 txt 解析的值
  21. #成功了就可以去原来的窗口按下" Enter "键了,然后迎接" Congratulations! ... "
  22. #如果没有 dig 命令,安装 dig: yum install -y bind-utils
  23.  
  24. #看看新生成的 SSL证书的位置是否合适,是否在网站配置文件中指定的 SSL 证书的路径,默认在是
  25. # Certificate Path: /etc/letsencrypt/live/example.com/fullchain.pem
  26. # Private Key Path: /etc/letsencrypt/live/example.com/privkey.pem
  27. # fullchain.pem  - Nginx所需要 ssl_certificate 文件; privkey.pem - 安全证书 KEY 文件
  28. # cert.pem  - Apache服务器端证书; chain.pem  - Apache根证书和中继证书
  29. #最后,需要重新加载一下网站的配置软件,Nginx 服务器方法如下:
  30. sudo nginx -s reload

3.补充说明及拓展

官方文档:https://certbot.eff.org/docs/using.html
” certbot-auto “脚本,可以使用 certonly 或 run 命令来创建或更新域名的 SSL 证书,即使已经存在该域名的证书,” certbot-auto “脚本也会更新该证书,否则就创建一个新证书。

    run 和 certonly的区别:

  • run 默认的方式,获取并安装一个证书,会对网站的特定目录写入数据,也即” Installers “。
  • certonly 是创建或者更新一个证书,但是不安装该证书,也即” Authenticators “。
  1. #对于单一域名 SSL证书获取,可以用如下的方式
  2. sudo ./certbot-auto certonly --standalone --email go2do.net@gmail.com -d go2do.net
  3.  
  4. #参数" --standalone "会启动一个web服务器,使用--preferred-challenges http参数的话,对应使用80端口,使用--preferred-challenges tls-sni参数对应使用443端口,
  5. #所以如果你有占用这两个端口的服务,请根据你的实际使用端口,停用占用端口的程序
  6.  
  7. #测试一下更新,这一步没有在真的更新,如果出现有 Congratulations 的表示测试成功
  8. ./certbot-auto renew --dry-run
  9.  
  10. #手动 *强制* 更新证书的方法,因为 Let’s Encrypt 规定证书的更新在到期的 30日内有效,如果需要提前更新,就需要 * 强制 * 更新
  11. ./certbot-auto renew  --force-renewal  -d www.go2do.net  -d go2do.net
  12.  
  13. #手动自动更新快到期的证书 
  14. ./certbot-auto renew  
  15.  
  16. #使用crontab进行自动续期(每隔 两个月的 凌晨 2:15 执行 更新操作)
  17. #是 standalone 模式申请的证书,用下面的方式续签证书
  18.  
  19. 15 2 * */2 * /etc/letsencrypt/certbot-auto renew --pre-hook "service nginx stop" --post-hook "service nginx start"--quiet
  20.  
  21. # --pre-hook 表示执行更新操作之前要做的事情,如 standalone 模式的证书,需要停止 nginx 服务,解除端口占用;
  22. # --post-hook 表示执行更新操作完成后要做的事情,这里就恢复 nginx 服务;
  23. # --force-renewal, --renew-by-default 在证书到期前强制更新(--keep-until-expiring, --keep, --reinstall 更好);
  24. # --force-renewal 当请求一个已经存在并有相同域名的证书时,需要把每一个域名通过-d来指定,不管过期与否,强制更新证书。

The Certbot client supports two types of plugins for obtaining and installing certificates: authenticators and installers.

Authenticators are plugins used with the certonly command to obtain a certificate. The authenticator validates that you control the domain(s) you are requesting a certificate for, obtains a certificate for the specified domain(s), and places the certificate in the /etc/letsencrypt directory on your machine. The authenticator does not install the certificate (it does not edit any of your server’s configuration files to serve the obtained certificate). If you specify multiple domains to authenticate, they will all be listed in a single certificate. To obtain multiple separate certificates you will need to run Certbot multiple times.

Installers are Plugins used with the install command to install a certificate. These plugins can modify your webserver’s configuration to serve your website over HTTPS using certificates obtained by certbot.

Plugins that do both can be used with the certbot run command, which is the default when no command is specified. The run subcommand can also be used to specify a combination of distinct authenticator and installer plugins.

欢迎投稿、分享转载,转载请保留如下信息:格物躬行博客[https://www.go2do.net]

本文由 [go2do] 原创,本文链接: https://www.go2do.net/vps/how-letsencrypt-free-https-ssl-tls-wildcard-domain-renew.html



You may also like...

发表评论

电子邮件地址不会被公开。

本页共执行141次数据库查询,耗时0.289秒,使用内存 1.77 MB