这里写目录标题
-
- [一、HTTPS 是什么](#一、HTTPS 是什么)
- [二、HTTPS 核心原理](#二、HTTPS 核心原理)
-
- [1. 证书(SSL 证书)是什么](#1. 证书(SSL 证书)是什么)
- [2. 两种加密方式为什么都要用](#2. 两种加密方式为什么都要用)
- [3. TLS 握手流程(浏览器 ↔ 你的服务器)](#3. TLS 握手流程(浏览器 ↔ 你的服务器))
- [三、腾讯云 SSL 证书申请与部署](#三、腾讯云 SSL 证书申请与部署)
-
- [1. 前置准备](#1. 前置准备)
- [2. 申请免费 SSL 证书(DV 证书)](#2. 申请免费 SSL 证书(DV 证书))
- [3. 下载证书](#3. 下载证书)
- [4. 上传证书到服务器](#4. 上传证书到服务器)
- [5. 配置 Nginx 启用 HTTPS](#5. 配置 Nginx 启用 HTTPS)
- [6. 重启 Nginx 并验证](#6. 重启 Nginx 并验证)
- [7. 证书续期](#7. 证书续期)
- 四、常见踩坑点
一、HTTPS 是什么
HTTPS = HTTP + SSL/TLS
- HTTP:明文传输,浏览器和服务器之间的数据"裸奔",中间人可以窃听、篡改内容(比如支付链接、表单密码)。
- SSL/TLS:一套加密协议,给 HTTP 套上一层加密通道。
- HTTPS :加密版本的 HTTP ,默认端口
443;普通 HTTP 是80。
二、HTTPS 核心原理
整个过程分三块:证书身份校验 + 握手协商密钥 + 后续通信加密传输。
1. 证书(SSL 证书)是什么
SSL 证书是由 CA 机构颁发的一张"服务器身份证",里面包含:
- 你的域名
- 证书公钥
- CA 机构签名
- 有效期
重点:公钥加密,私钥解密
- 公钥:放在证书里,公开给所有人。
- 私钥 :必须保存在你的腾讯云服务器上,绝对不能泄露!
2. 两种加密方式为什么都要用
| 加密方式 | 特点 | 在 HTTPS 里的角色 |
|---|---|---|
| 非对称加密(公钥/私钥) | 安全但慢 | 只用来安全交换会话密钥 |
| 对称加密(同一把钥匙) | 快但密钥分发难 | 用来加密后续所有数据 |
两者结合:先用非对称加密解决"密钥怎么安全传过去",再用对称加密解决"数据怎么快速加密传输"。各取所长。
3. TLS 握手流程(浏览器 ↔ 你的服务器)
-
浏览器访问网站,向服务器发起 HTTPS 请求,告诉服务器自己支持哪些加密套件(并生成随机数 A)。
-
服务器返回 SSL 证书(里面带公钥,并生成随机数 B)。
-
浏览器校验证书:
- 检查证书是不是可信 CA 签发、域名是否匹配、有没有过期、有没有被吊销。
- ❌ 校验失败 → 浏览器直接弹出"不安全"警告。
-
浏览器生成一个随机会话密钥 ,用服务器的公钥加密后发给服务器。
-
服务器用自己的私钥解密,拿到这个随机会话密钥。
-
✅ 握手完成。之后双方所有数据,都用这个对称会话密钥加密通信。
浏览器 服务器
| --- 请求 + 随机数A ----------> |
| <-- 证书(公钥) + 随机数B --------- |
| 验证证书 ✓ |
| --- 公钥加密 会话密钥 ----------> | 私钥解出 会话密钥
| |
| ==== 用会话密钥对称加密通信 ====> |
| <=== 用会话密钥对称加密通信 ====== |
三、腾讯云 SSL 证书申请与部署
光懂原理不够,实际项目里要落地。下面以腾讯云为例,从申请到部署到 Nginx,完整走一遍。
1. 前置准备
- 一个已备案的域名(国内服务器必须备案)。
- 一台腾讯云服务器(CVM / 轻量应用服务器)。
- 域名已解析到服务器公网 IP。
2. 申请免费 SSL 证书(DV 证书)
腾讯云提供免费 DV 证书,有效期 1 年,个人项目足够用。
- 登录 腾讯云 SSL 证书控制台。
- 点击 申请免费证书。
- 选择 DV 免费证书 (TrustAsia),填写:
- 域名:
example.com或www.example.com - 邮箱
- 域名:
- 域名验证 :选择"DNS 验证",腾讯云会给你一条 CNAME 记录,添加到云解析里。
- 也可以用"文件验证",往网站根目录放一个验证文件。
- 等待 CA 审核签发,通常几分钟到几小时。
3. 下载证书
签发完成后,在证书列表里点 下载,选择对应服务器类型:
- Nginx → 得到一个压缩包,里面有:
xxx.crt/xxx.pem(证书文件,含公钥)xxx.key(私钥文件)
⚠️
.key私钥文件务必妥善保管,不要传到 GitHub、不要发到群里,泄露了等于钥匙丢了。
4. 上传证书到服务器
把 .crt 和 .key 上传到服务器,建议路径:
bash
/etc/nginx/ssl/
├── example.com.crt
└── example.com.key
5. 配置 Nginx 启用 HTTPS
编辑 Nginx 配置(如 /etc/nginx/conf.d/example.conf):
nginx
server {
listen 443 ssl;
server_name example.com www.example.com;
# 证书路径
ssl_certificate /etc/nginx/ssl/example.com.crt;
ssl_certificate_key /etc/nginx/ssl/example.com.key;
# 推荐的安全配置
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
location / {
proxy_pass http://127.0.0.1:3000; # 你的后端服务
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
# HTTP 强制跳转 HTTPS
server {
listen 80;
server_name example.com www.example.com;
return 301 https://$host$request_uri;
}
6. 重启 Nginx 并验证
bash
nginx -t # 检查配置语法
nginx -s reload # 平滑重启
浏览器访问 https://example.com,地址栏出现 🔒 锁标志,说明 HTTPS 已生效。
7. 证书续期
- 免费证书有效期 1 年,到期前 30 天 控制台会提示,重新申请并替换
.crt/.key即可。 - 也可以用
acme.sh/certbot配合 Let's Encrypt 做自动续期,省心。
四、常见踩坑点
- 证书与域名不匹配 :申请时填的域名要和 Nginx
server_name完全一致,否则浏览器报"证书域名不匹配"。 - 443 端口未放行 :腾讯云安全组里要放行
443入站,否则外部连不上。 - 私钥泄露 :
.key文件权限设为600(chmod 600 example.com.key),仅 root 可读。 - HTTP 没跳 HTTPS :用户直接输
example.com默认走 80,要么配 80→443 跳转,要么用 HSTS。 - 混合内容 :页面里如果还有
http://的图片/JS,浏览器会报"混合内容"警告,要全部改成https://或相对协议//。