这里写目录标题
- 一、HTTPS 是什么
- 二、HTTPS 核心原理
- 1. 证书(SSL 证书)是什么
- 2. 两种加密方式为什么都要用
- 3. TLS 握手流程(浏览器 ↔ 你的服务器)
- 三、腾讯云 SSL 证书申请与部署
- 1. 前置准备
- 2. 申请免费 SSL 证书(DV 证书)
- 3. 下载证书
- 4. 上传证书到服务器
- 5. 配置 Nginx 启用 HTTPS
- 6. 重启 Nginx 并验证
- 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上传到服务器,建议路径:
/etc/nginx/ssl/ ├── example.com.crt └── example.com.key5. 配置 Nginx 启用 HTTPS
编辑 Nginx 配置(如/etc/nginx/conf.d/example.conf):
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 并验证
nginx-t# 检查配置语法nginx-sreload# 平滑重启浏览器访问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://或相对协议//。