Linux 服务器 HTTPS 的配置
文章增补说明
原题目:Linux 服务器添加 SSL 证书,最初于 2022 年 4 月 21 日发布。
现增加 SSL 证书自动部署部分重新发布,原文章永久链接不变。
让网站加上一个小锁。先展示未安装证书之前:
现描述配置步骤如下。
自动部署方式
本节于 2023 年 12 月 6 日新增。
首先确保相关子域名的 DNS 已经成功解析到当前服务器。
安装 certbot:
1 | # CentOS 安装 certbot: |
使用:
1 | certbot --nginx |
可以发现 Nginx 的配置文件已经出现了变化。比如我要加密的是 push.uuanqin.top 的子域名。现在的配置为:
修改后记得重启 nginx 一下:
1 | systemctl restart nginx |
迁移服务器提示:把 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 个月:关于免费证书有效期策略调整通知_数字证书管理服务-阿里云帮助中心 (aliyun.com)。一个月后,新产品 HTTPS加速网关 上市,每月 60 元。
腾讯云目前(2024 年 3 月 7 日)依然保持方法有效期 1 年的免费证书。一年可签发 50 张。但是 2024 年 4 月 25 日以后,免费 SSL 证书有效期将从 12 个月缩短至 3 个月:SSL 证书 关于免费 SSL 证书策略调整通知-产品公告-文档中心-腾讯云 (tencent.com)
获取 SSL 免费证书
在云服务商上申请免费证书。阿里云免费证书有效期为 1 年(2023 年 11 月 14 日以前)。现以阿里云免费证书 云盾证书服务 (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 端口:
CDN 中的 HTTPS 设置
我一开始遇到的问题是这个:Apache 安装好证书后还是无法生效。Chrome 浏览器提醒的是证书不匹配,一看详情,他竟然在匹配腾讯云的 cdn 的证书…所以我认为 CDN 环节中还需要相应设置。(和我遇到同样的问题:https://cloud.tencent.com/developer/ask/21141)
解决方法如下所述。
如果你的网站开启了 CDN,比如我使用的是腾讯云的 CDN,那么需要在腾讯云控制台中进行设置:
按照指引上传证书进行托管:
上传成功后部署即可。
参考文档:SSL 证书 安装部署 SSL 证书到内容分发网络(CDN)指引 - 证书安装 - 文档中心 - 腾讯云 (tencent.com)
【可选】强制跳转 HTTPS
在腾讯云域名控制台开启这个:
后续
WordPress 博客网站使用 HTTPS:WordPress 使用 HTTPS
301 重定向以及 HSTS 等进阶配置:Nginx 与 CDN 完成重定向:从 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