HTTPS 原理与 SSL 配置
HTTPS 是保障 Web 安全不可或缺的一部分。本页将介绍其加密原理、使用场景及实战配置方式。
🔐 HTTPS 是什么?
HTTPS(HyperText Transfer Protocol Secure)是 HTTP 协议的安全版本,基于 TLS/SSL 实现通信加密。
作用:
- 数据加密传输,防止中间人攻击
- 防止数据篡改
- 验证服务器身份(通过证书)
🔁 工作原理概览
1. 客户端发起请求(https://...)
2. 服务器返回证书(包含公钥)
3. 客户端验证证书是否合法
4. 客户端生成对称密钥,并用公钥加密发送给服务器
5. 双方使用对称密钥通信(加密传输)
📦 图解理解
HTTPS 使用“非对称加密”交换密钥,再用“对称加密”传输数据。
- 公钥加密、私钥解密 → 用于密钥交换
- 对称密钥 → 用于后续数据加密
✅ 使用场景
场景 | 说明 |
---|---|
网站正式上线 | 加密用户请求、防止浏览器报错 |
API 调用 | 前端/移动端/第三方接入接口时必须使用 |
登录、注册、支付 | 保障密码、交易数据安全 |
OAuth 认证、SSO | 传输 token 等敏感信息 |
🛠️ 开发/部署中的 HTTPS 配置
1️⃣ 本地 HTTPS(Node.js 示例)
const https = require('https');
const fs = require('fs');
const options = {
key: fs.readFileSync('private.key'),
cert: fs.readFileSync('certificate.crt')
};
https.createServer(options, (req, res) => {
res.write("Hello HTTPS");
res.end();
}).listen(443);
生成本地证书:
openssl req -x509 -newkey rsa:2048 -keyout private.key -out certificate.crt -days 365 -nodes
2️⃣ Nginx 配置 HTTPS(生产环境)
server {
listen 443 ssl;
server_name mysite.com;
ssl_certificate /etc/ssl/certs/fullchain.pem;
ssl_certificate_key /etc/ssl/private/privkey.pem;
location / {
proxy_pass http://127.0.0.1:3000;
}
}
使用 Let’s Encrypt 免费申请证书:
sudo apt install certbot
sudo certbot --nginx
🧠 注意事项
避免混合内容
如果页面是 HTTPS,所有资源(API、图片、CSS、JS)也必须是 HTTPS,否则浏览器会拦截。
常见问题排查
- 页面打不开:证书过期或域名未匹配
- 接口无法访问:API 用 HTTP 而不是 HTTPS
- 本地 HTTPS 报错:证书未受信任,可跳过验证测试
🔐 SSL 与 TLS 的关系?
名称 | 说明 |
---|---|
SSL | 较老协议,已不推荐 |
TLS | 当前主流加密协议 |
HTTPS | 使用 TLS 作为加密层的 HTTP 协议 |
虽然大家常说“SSL 证书”,但实际使用的是 TLS。
✅ HTTPS 使用总结
项目 | 是否加密 | 是否安全 | 是否推荐 |
---|---|---|---|
HTTP | ❌ | ❌ | ❌ 仅限开发环境 |
HTTPS | ✅ | ✅ | ✅ 生产必开 |