HTTPS 已经成了网站的"标配",但商业SSL证书一年要大几百块。其实有一个完全免费、被全球数千万网站使用的方案------Let's Encrypt 。今天用一篇文章讲清楚:HTTPS是什么、免费证书怎么申请、自动续签如何配置。
1、HTTPS到底是什么?解决了什么问题?
数据加密------防止"被偷看"
HTTP协议传输的数据是明文的,你在网站上输入的密码、银行卡号、聊天记录,在路由器、网吧电脑、咖啡厅WiFi这些环节里,任何人都能截获并直接读取。
HTTPS在TCP和应用层之间加了一层TLS(Transport Layer Security),所有数据都会先加密再传输。哪怕被第三方抓包,看到的也是一堆乱码。
实际场景:
- 你在HTTP网站上登录,收到的POST请求明文包含用户名和密码
- 在HTTPS网站上,即使被截获,攻击者拿到的是加密后的密文,无法直接利用
身份认证------防止"被假冒"
你访问的https://www.icbc.com.cn真的是工商银行吗?HTTPS证书里有一项关键信息:证书上绑定的域名,由可信CA机构验证过。浏览器会检查:证书是谁签发的、证书是不是伪造的、证书是否过期。
如果有人用DNS劫持把你引到假冒网站,浏览器会因为"证书不匹配"而报警。
数据完整性------防止"被篡改"
HTTP传输过程中,代理服务器可以随意修改网页内容(注入广告、替换下载链接是常见操作)。TLS加密会为每个数据包生成"消息验证码"(HMAC),接收方校验发现数据被动过手脚会直接丢弃。
HTTP时代三大风险
|--------|-----------------|
| 窃听 | 密码、聊天内容、个人信息被截获 |
| 篡改 | 网页被注入广告、下载链接被替换 |
| 欺诈 | DNS劫持,用户访问到钓鱼网站 |
2、Let's Encrypt免费证书原理
为什么Let's Encrypt能免费?
Let's Encrypt是一个由Mozilla、谷歌、思科、EFF等联合成立的非营利CA机构,目标是推动全网HTTPS化。基础设施成本由赞助商承担,对用户完全免费。
核心支撑技术:ACME协议(Automated Certificate Management Environment)
这是Let's Encrypt实现全自动化的关键。它本质上是一个自动化的"申请-验证-颁发"流程,不需要人工干预。
证书申请三步流程
第一步:发起申请
你的服务器 → "我要为 iaiaiai.cc 申请证书"
Let's Encrypt ← 收到申请请求
第二步:域名验证(二选一)
- HTTP验证 :在域名下的
.well-known/acme-challenge/目录里放一个随机Token文件,Let's Encrypt的服务器尝试访问这个URL,能访问到就通过 - DNS验证:在DNS TXT记录里添加一条随机字符串,Let's Encrypt去查DNS记录来验证
第三步:颁发证书
验证通过后,Let's Encrypt颁发证书,包含:你的公钥、域名、有效期、CA数字签名。证书有效期90天。
为什么证书有效期只有90天?
这是安全设计。有效期越短,密钥泄露后被滥用的窗口越小。90天强制你频繁更新,也间接推动了安全实践。
3、实战:3分钟搞定免费证书 + 自动续签
环境:Ubuntu 20.04 + Nginx
第一步:安装certbot
sudo apt update
sudo apt install certbot python3-certbot-nginx
第二步:申请证书(一行命令)
sudo certbot --nginx -d iaiaiai.cc -d www.iaiaiai.cc
第三步:验证HTTPS生效
curl -sI https://iaiaiai.cc/
# 返回 HTTP/2 200 说明SSL已启用
自动续签:完全不用管
certbot安装时会自动创建systemd定时任务,每12小时运行一次。
续签逻辑:
- 距离过期还有30天以上 → 什么都不做,跳过
- 距离过期30天以内 → 自动重新申请、更新证书文件、重载nginx
证书文件位置:
/etc/letsencrypt/live/iaiaiai.cc/
├── fullchain.pem # 证书链(包含公钥+CA签名)
├── privkey.pem # 私钥(严格保密)
├── cert.pem # 服务器证书
└── chain.pem # CA中间证书
手动测试续签:
sudo certbot renew --dry-run
4、常见问题
Q:免费证书和付费证书有什么区别?
本质上没有区别,都是被浏览器信任的SSL/TLS证书。付费证书的额外价值在于:更贵的验证级别(如EV证书显示企业名)、更长的有效期、技术支持。
Q:一个证书可以绑定多个域名吗?
可以,用-d参数追加即可:
certbot --nginx -d domain1.com -d domain2.com -d subdomain.domain3.com
Q:证书过期了网站会怎样?
浏览器会显示"连接不安全"警告,阻止用户继续访问。配合自动续签,实际上永远不会过期。
HTTPS已经是现代网站的标配,没有它浏览器会报警、SEO会降权。Let's Encrypt让这件事彻底免费了,certbot让这件事完全自动化了。一行命令申请,一天到晚自动续签,省心又安全。