HTTPS 的配置及证书的签发与部署
文章增补说明 260318
260318原题目:
- 「Linux 服务器添加 SSL 证书」最初于
220421发布。 - 「Linux 服务器 HTTPS 的配置」于
231206增补重发。增加 SSL 证书自动部署部分重新发布,原文章永久链接不变。
现文章:
260318增加腾讯云无感知续费证书的流程。删除一些不必要的章节段落。
现在的网络应用程序都需要部署 HTTPS 证书。如果你的博客网站没有开启 HTTPS,浏览器会加上「不安全」的提示:

安装证书后的效果:

本文的主要内容:
- Linux 上使用 Certbot 自动部署证书
- 将签发好的证书手动部署到服务器中
- 腾讯云一条龙,无感知自动管理 SSL 证书
自动部署方式
本节于
231206新增。
首先确保相关子域名的 DNS 已经成功解析到当前服务器。
安装 certbot:
1 | # CentOS 安装 certbot: |
先在 Nginx 配置文件中做好基础的配置:
1 | server { |
然后才使用 Certbot:
1 | certbot --nginx |
可以发现 Nginx 的配置文件已经出现了变化。比如我要加密的是 mcp.uuanqin.top 的子域名。现在的配置为:
1 | server { |
修改后记得更新 Nginx 配置一下:
1 | nginx -s reload |
迁移服务器提示:把 nginx 配置文件迁移到新的服务器上时。在新服务器第一次使用 certbot 前,把之前旧服务器 certbot 在配置文件中自动添加的内容删掉,不然出错。
其他参考(没试过):ZeroSSL: How to Secure Your Website with a Free SSL Certificate (linuxiac.com)
certbot 部署的证书有效期为 3 个月,在过期前 1 个月会收到提示。我们可以重新运行 certbot --nginx 对相应的证书进行更新。或者结合 cron 定时任务完成自动更新。cron 用法详见:站内文章Linux 使用 Cron 创建定时任务。
手动部署方式
现在的免费证书都是 3 个月有效期了
获取 SSL 免费证书
在云服务商上申请免费证书。阿里云免费证书有效期为 1 年(231114 以前)。现以阿里云免费证书 云盾证书服务 (aliyun.com) 购买为例:

在控制台下载证书:

选择 Apache 服务器类型的证书进行下载(图中以 Apache 为例):

得到一个压缩文件,文件包含以下内容:

- 证书文件:以.crt 为后缀或文件类型。
- 证书链文件:以.crt 为后缀或文件类型。
- 密钥文件:以.key 为后缀或文件类型。
文档链接:在 Apache 服务器上安装 SSL 证书 (aliyun.com)
如果网站开启了 CDN,更新证书时,请确保加速域名配置的证书是新的证书。
安装证书到 Nginx
在 Nginx 或 Tengine 服务器安装 SSL 证书 (aliyun.com)
安装证书到 Apache
接下来请根据这篇指引进行配置安装:在 Apache 服务器上安装 SSL 证书 (aliyun.com)
在实际操作中,我和指引中不同的是,mod_ssl.so 不需要在 httpd.conf 里进行引用。阿里云文档里的 http-ssl.conf,实际上就是/etc/httpd/conf.d/ssl.conf(安装好 mod_ssl.so 模块后,ssl.conf 文件就会产生)。
通过 FTP 传输工具把证书上传到指定位置,在配置时就用这个位置(下图)。
httpd.conf:

ssl.conf:

弄好后记得重启 Apache 服务器:
1 | apachectl restart |
服务器的安全组记得开放 443 端口:

腾讯云无感知自动申领、续费和部署 SSL 证书
260318 新增。我在在腾讯云使用了 CDN 和 EO 产品,相关域名的证书也是通过腾讯云 SSL 颁发的。当免费证书过期时,可以手动申领并手动在相关产品处切换为新证书。
但是这样很麻烦:
- 需要及时感知证书的到期时间并手动申领
- 手动申领证书后还要对域名进行 DNS 认证
- 新证书需要到相关产品处重新更换
为了避免这些步骤,腾讯云贴心提供了解决方案。SSL 证书开启自动续费 + 证书托管,即可实现自动化管理证书 [3]。

但是腾讯云的证书自动续费指的是自动申请一张待验证的证书,证书的成功签发还需要 DNS 验证步骤,而这个步骤往往是需要人工介入的 [4]。但是,如果证书绑定的域名托管在腾讯云 DNSPod(记得开启解析),系统会自动添加 DNS 验证,所有你可以将相关域名(或子域名)交给 DNSPod 进行解析。
只将子域名交给 DNSPod 进行解析详看 站内文章更换域名解析商。

后续参考
WordPress 博客网站使用 HTTPS:站内文章WordPress 使用 HTTPS
301 重定向以及 HSTS 等进阶配置:站内文章从 HTTP 重定向到 HTTPS、从 WWW 重定向到根
本文参考
- songquanpeng/one-api(github.com)
- reactjs - Issue using certbot with nginx - Stack Overflow
- 使用Certbot申请泛域名SSL证书(Let’s Encrypt) - 知乎 (zhihu.com)
- Certbot Instructions | Certbot (eff.org)
- 使用 CertBot 自动更新 Let’s Encrypt SSL 证书 - 简书 (jianshu.com)
我走过的弯路:How to install an SSL Certificate on Apache – HelpDesk SSLs.com





