Skip to content

68 块钱的服务器,让我花 2000 买 SSL 证书?这波“智商税”我不交!

前几天收到阿里云短信,说我的免费 SSL 证书要过期了。我想着这还不简单,再申请一张不就完事了?

结果打开控制台一看,瞬间傻眼:免费证书只能用一次了?!续费居然要好几千?!

阿里云SSL证书价格

我的天,我那台阿里云乞丐版服务器才 68 块钱一年(用来跑个博客刚好),这 HTTPS 的成本比服务器本身还贵几十倍?这还能忍?

既然此路不通,那必须得另辟蹊径。我翻遍了全网,又跟 DeepSeek 聊了半天,终于让我找到了 Let's Encrypt 这个神器。不仅完全免费,而且还能自动续期,这不就是我要的“永久白嫖”方案吗?

不过,在 CentOS 7 这个“老古董”系统上折腾,确实有不少坑。我踩了一下午的雷,把这套完美避坑指南整理出来了。照着做,让你少走弯路,立省 2000 元!


1. 准备工作:别急着敲命令

首先确认下你的环境跟我一不一样:

  • 系统:CentOS 7.x(这系统真有点老了,但这年头能跑就行)
  • Web 服务:Nginx
  • 域名:比如我的 barebear.cn(一定要先解析到你的服务器 IP!)
  • 权限:你是管理员(root 或者有 sudo 权限)

确认无误?那我们开始。


2. 第一个大坑:千万别用 yum 装 Certbot!

很多教程上来就让你 yum install certbot,千万别信!

CentOS 7 自带的 yum 源里的 Certbot 版本太老了(1.11.0),装完运行的时候会直接给你报 Python 依赖错误: ImportError: cannot import name UnrewindableBodyError

这一步卡了我好久,最后发现官方推荐的方法是用 snap 安装

正确姿势:拥抱 snap

虽然麻烦点,但这是唯一稳妥的路子。

第一步:安装 snapd

bash
# 先装 EPEL 源
sudo yum install epel-release -y

# 再装 snapd
sudo yum install snapd -y

# 启动 snapd 通信套接字
sudo systemctl enable --now snapd.socket

# 做个软链接,方便以后用
sudo ln -s /var/lib/snapd/snap /snap

第二步:一定要等!等!等!

装完 snapd 之后,它后台需要初始化(seeding)。这时候如果你心急火燎地去装 Certbot,绝对会报错: error: too early for operation, device not yet seeded

避坑指南:去倒杯水,刷个短视频,等个 1-2 分钟。或者你用这个命令盯着它:

bash
snap changes

看到状态变成 Done 了再继续。如果等了半天还没动静,重启一下 snapd:sudo systemctl restart snapd

第三步:安装最新版 Certbot

bash
# 安装核心 snap
sudo snap install core; sudo snap refresh core

# 安装 Certbot(加 --classic 参数)
sudo snap install --classic certbot

# 做个软链接,让你可以直接敲 certbot 命令
sudo ln -s /snap/bin/certbot /usr/bin/certbot

到这里,最难的一步已经跨过去了。


3. 见证奇迹:一键配置 HTTPS

这一步真的太爽了,不需要你手动改 Nginx 配置文件,Certbot 全自动搞定。

bash
sudo certbot --nginx

执行后,它会问你几个问题:

  1. 邮箱:填个真实的,万一证书出问题能收到邮件。
  2. 同意条款:输入 Y 回车。
  3. 选择域名:它会自动读取你的 Nginx 配置,列出 barebear.cnwww.barebear.cn
    • 直接回车(默认全选),或者输入 1,2 回车。

然后,屏幕上会刷一堆代码,最后出现 Congratulations! 的时候,恭喜你,你的网站已经穿上了 HTTPS 的防弹衣!

网站HTTPS

它甚至贴心地帮你把 HTTP 自动跳转到了 HTTPS,再也不用担心用户访问不安全了。


4. 第二个大坑:为什么浏览器还是显示“不安全”?

配置完我兴冲冲地打开 Chrome 访问 https://barebear.cn,结果地址栏还是有个红色的“不安全”?!

我当时心里一凉:难道翻车了?

如果你也遇到这个问题,别慌。这是浏览器缓存在搞鬼。尤其是如果你之前访问过 HTTP 版本,浏览器记住了之前的 301 重定向或者 HSTS 状态。

解决方法

  1. 最简单:打开浏览器的“无痕模式/隐私模式”访问,如果显示绿色小锁,说明配置没问题。
  2. 彻底解决
    • 清除浏览器缓存(Ctrl+Shift+Del)。
    • Chrome 地址栏输入 chrome://net-internals/#hsts,在 Delete domain security policies 下面输入你的域名,点 Delete。

只要看到那个绿色的小锁头,心里就踏实了。


5. 懒人福音:全自动续期

Let's Encrypt 的证书有效期只有 90 天。你可能会问:“那我岂不是每三个月就要折腾一次?”

放心,Certbot 安装的时候就已经给你设好了自动续期任务。它会每隔 12 小时检查一次,快过期的时候自动帮你续上。

你可以跑个命令测试一下这个机制是不是正常工作:

bash
sudo certbot renew --dry-run

只要不报错,以后你就再也不用管它了。这就是真正的“一次配置,终身受益”。


6. 写在最后

折腾这一圈下来,不仅省了几千块钱,还顺手把 HTTPS 的原理搞懂了。其实很多时候,所谓的技术门槛,无非就是信息差。

现在看着浏览器地址栏那个安全的小锁头,是不是觉得特别有成就感?

如果你在操作过程中遇到了其他奇葩问题,或者这篇避坑指南帮到了你,欢迎在评论区留言或者点个赞告诉我! 你的支持是我继续分享“省钱黑科技”的动力!


附:Nginx 配置变更一览

Certbot 改完后的配置大概长这样(不用自己写,看看就行):

nginx
server {
    listen 80;
    server_name barebear.cn www.barebear.cn;
    return 301 https://$host$request_uri;   # HTTP 强转 HTTPS
}

server {
    listen 443 ssl;
    server_name barebear.cn www.barebear.cn;

    ssl_certificate /etc/letsencrypt/live/barebear.cn/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/barebear.cn/privkey.pem;
    
    # ... 其他 SSL 优化参数 ...
}

最后再看一下效果吧

blog

如有转载或 CV 的请标注本站原文地址