宝塔面板申请和续期SSL证书:免费Let's Encrypt教程

蜗牛大人VPS教程

本文含推广链接:通过此链接购买,本站可获得佣金,不影响你的价格。

没有SSL证书的网站,浏览器会在地址栏提示“不安全”,谷歌也会降低它的排名。虚拟主机一般会自动装好SSL,而在VPS上需要自己申请。好在宝塔面板内置了免费的Let's Encrypt证书申请功能,点几下就能完成,而且会自动续期。

SSL证书的几个基本概念

  • SSL证书让网站可以用 https:// 访问,浏览器和服务器之间的数据是加密的;
  • Let's Encrypt是一个免费的证书颁发机构,它的证书被所有主流浏览器信任,加密强度和付费证书没有区别;
  • Let's Encrypt的证书有效期只有90天,需要定期续期,宝塔会自动处理;
  • 付费证书的区别主要在于验证企业身份(OV、EV证书)和售后保障,普通网站用免费证书就够了。

申请之前的准备

申请证书时,Let's Encrypt要验证这个域名确实由你控制。所以要先确认:

  1. 域名已经解析到VPS的IP,带www和不带www的都要解析,并且已经生效;
  2. 宝塔里已经添加了站点,并且两个域名都在站点的域名列表里,添加方法见《宝塔面板安装WordPress教程》;
  3. 80端口是通的。服务器防火墙和VPS厂商后台的防火墙都要放行80和443端口;
  4. 如果用了Cloudflare,先把代理状态改成“仅DNS”(灰色云朵),证书申请好之后再开启。

用文件验证申请证书

这是最简单的方式,适合绝大多数情况。

  1. 在宝塔左侧菜单点击网站,找到要申请证书的站点,点击设置;
  2. 在弹出的窗口里点击左侧的SSL;
  3. 选择Let's Encrypt选项卡;
  4. 验证方式选择 文件验证;
  5. 在域名列表里勾选要包含在证书里的域名,带www和不带www的都勾上;
  6. 点击申请证书。

等待十几秒到一分钟,申请成功后会自动部署到站点,页面上会显示证书的品牌、到期时间和包含的域名。

文件验证的原理是:宝塔在网站目录下放一个临时文件,Let's Encrypt通过 http://你的域名/.well-known/acme-challenge/ 来访问这个文件,能访问到就说明域名是你的。所以域名必须已经解析到这台服务器,80端口必须能从外网访问。

用DNS验证申请证书

下面几种情况需要用DNS验证:

  • 要申请通配符证书(*.example.com,一张证书覆盖所有子域名);
  • 域名还没有解析到这台服务器,比如迁移网站时想提前把证书准备好;
  • 80端口因为某些原因无法从外网访问。

步骤:

  1. 在SSL的Let's Encrypt选项卡里,验证方式选择 DNS验证;
  2. 选择DNS服务商。宝塔支持通过API自动添加验证记录,常见的Cloudflare、阿里云、腾讯云DNSPod都在列表里;
  3. 按提示填写DNS服务商的API密钥。以Cloudflare为例,需要填写账号邮箱和API Key,或者一个有DNS编辑权限的API Token;
  4. 勾选域名,点击申请证书。

如果列表里没有你的DNS服务商,可以选择手动解析:宝塔会给出一条TXT记录,你到DNS后台手动添加,等生效之后回到宝塔点击验证。手动方式的缺点是不能自动续期,每次到期前都要重新操作一遍,所以尽量用API方式。

开启强制HTTPS

证书部署好之后,网站可以同时用 http:// 和 https:// 访问。在SSL页面的右上角有一个 强制HTTPS 开关,打开它,所有 http:// 的访问都会自动跳转到 https://。

然后到WordPress后台的设置、常规里,把“WordPress地址”和“站点地址”都改成 https:// 开头并保存。保存后会要求重新登录。

如果网站是从http迁移过来的旧站,文章里可能还有以 http:// 开头的图片地址,浏览器会提示“混合内容”,地址栏的锁图标不显示。可以用Better Search Replace这类插件,把数据库里的 http://你的域名 批量替换成 https://你的域名。

证书自动续期

宝塔申请的Let's Encrypt证书会自动续期,不需要手动操作。它的原理是:宝塔在计划任务里添加了一条“续签Let's Encrypt证书”的任务,每天检查一次,证书快到期(剩余不到30天)时自动重新申请并部署。

建议检查两件事:

  1. 在宝塔的计划任务菜单里,确认有这条续签任务,并且状态是正常的。不要把它删掉;
  2. 在站点的SSL页面里,可以看到证书的到期时间。也可以在面板的设置、告警通知里配置邮箱或者其他通知方式,让宝塔在证书快到期时提醒你。

自动续期失败的常见原因:

  • 域名解析改了,不再指向这台服务器;
  • 开启了Cloudflare代理,并且设置了一些拦截规则,导致验证文件访问不到;
  • 网站设置了全站跳转或者访问限制,把 /.well-known/ 目录也拦住了;
  • 用的是手动DNS验证。

续期失败的话,回到SSL页面手动点击一次续签,根据报错信息排查。

给宝塔面板本身开启SSL

上面说的是给网站申请证书。宝塔面板的登录地址本身默认可能是 http://IP:端口,登录密码是明文传输的。

在面板的设置里找到 面板SSL,开启它。可以选择自签证书:开启后用 https:// 访问面板,浏览器会提示证书不受信任,点击继续访问即可,数据已经是加密的了。新版本的宝塔安装时默认就开启了面板SSL。

面板安全的其他设置见《VPS安全基础设置》。

配合Cloudflare使用

如果网站要用Cloudflare的CDN(橙色云朵),推荐这样设置:

  1. 先用灰色云朵,在宝塔里申请好Let's Encrypt证书;
  2. 在Cloudflare的SSL/TLS设置里,把加密模式设为 完全(严格);
  3. 再把DNS记录改成橙色云朵。

不要用“灵活”模式。灵活模式下Cloudflare到你的服务器之间走的是http,如果服务器又开了强制HTTPS,会出现“重定向次数过多”的错误。

开启代理之后,文件验证的续期一般仍然可以成功。如果续期失败,把验证方式换成DNS验证并使用Cloudflare的API,就不再受代理影响了。

另一个办法是使用Cloudflare的源服务器证书(Origin Certificate):在Cloudflare后台生成一张有效期最长15年的证书,把证书和私钥粘贴到宝塔SSL页面的“其他证书”里。这种证书只在开启Cloudflare代理时有效,好处是不用再管续期。

CDN的基本概念见《什么是CDN?》。

常见问题

申请时提示验证失败

依次检查:域名是否已经解析到这台服务器的IP(用 ping 域名 确认);Cloudflare是否开着代理;80端口是否放行;站点的域名列表里是否包含了要申请的域名。

提示申请次数过多

Let's Encrypt对同一个域名有申请频率限制,短时间内失败太多次会被暂时限制,一般等一个小时到几天后恢复。所以申请失败时不要反复点,先把原因找出来。

证书到期了,网站打不开

先在SSL页面点击续签。如果续签失败,临时的办法是关闭强制HTTPS让网站可以用http访问,或者重新申请一张新证书。之后检查自动续签任务为什么没有成功。

一个站点绑定了多个域名,怎么办?

申请时把所有域名都勾上,会生成一张包含多个域名的证书。之后如果给站点新增了域名,需要重新申请一次,把新域名也包含进去。

宝塔里的“宝塔SSL”“商用证书”是什么?

是宝塔提供的其他证书渠道,有免费的也有付费的,部分需要登录宝塔账号。普通网站用Let's Encrypt就可以了。

总结

在宝塔里申请SSL证书的流程是:域名解析到服务器,站点设置里选择Let's Encrypt和文件验证,勾选域名申请,然后打开强制HTTPS。证书每90天到期,宝塔的计划任务会自动续期,偶尔到SSL页面看一眼到期时间即可。

更多VPS教程见《VPS教程汇总》。

文章版权归作者所有,转载请注明出处:https://woniune.com/posts/baota-ssl-certificate/

相关推荐