Skip to main content

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✅ 生产必开

📚 推荐资源