HTTPS 详解

这里写目录标题

    • [一、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 握手流程(浏览器 ↔ 你的服务器)

  1. 浏览器访问网站,向服务器发起 HTTPS 请求,告诉服务器自己支持哪些加密套件(并生成随机数 A)。

  2. 服务器返回 SSL 证书(里面带公钥,并生成随机数 B)。

  3. 浏览器校验证书:

    • 检查证书是不是可信 CA 签发、域名是否匹配、有没有过期、有没有被吊销。
    • ❌ 校验失败 → 浏览器直接弹出"不安全"警告。
  4. 浏览器生成一个随机会话密钥 ,用服务器的公钥加密后发给服务器。

  5. 服务器用自己的私钥解密,拿到这个随机会话密钥。

  6. ✅ 握手完成。之后双方所有数据,都用这个对称会话密钥加密通信。

    浏览器 服务器
    | --- 请求 + 随机数A ----------> |
    | <-- 证书(公钥) + 随机数B --------- |
    | 验证证书 ✓ |
    | --- 公钥加密 会话密钥 ----------> | 私钥解出 会话密钥
    | |
    | ==== 用会话密钥对称加密通信 ====> |
    | <=== 用会话密钥对称加密通信 ====== |


三、腾讯云 SSL 证书申请与部署

光懂原理不够,实际项目里要落地。下面以腾讯云为例,从申请到部署到 Nginx,完整走一遍。

1. 前置准备

  • 一个已备案的域名(国内服务器必须备案)。
  • 一台腾讯云服务器(CVM / 轻量应用服务器)。
  • 域名已解析到服务器公网 IP。

2. 申请免费 SSL 证书(DV 证书)

腾讯云提供免费 DV 证书,有效期 1 年,个人项目足够用。

  1. 登录 腾讯云 SSL 证书控制台。
  2. 点击 申请免费证书。
  3. 选择 DV 免费证书 (TrustAsia),填写:
    • 域名:example.com 或 www.example.com
    • 邮箱
  4. 域名验证 :选择"DNS 验证",腾讯云会给你一条 CNAME 记录,添加到云解析里。
    • 也可以用"文件验证",往网站根目录放一个验证文件。
  5. 等待 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 做自动续期,省心。

四、常见踩坑点

  1. 证书与域名不匹配 :申请时填的域名要和 Nginx server_name 完全一致,否则浏览器报"证书域名不匹配"。
  2. 443 端口未放行 :腾讯云安全组里要放行 443 入站,否则外部连不上。
  3. 私钥泄露 :.key 文件权限设为 600(chmod 600 example.com.key),仅 root 可读。
  4. HTTP 没跳 HTTPS :用户直接输 example.com 默认走 80,要么配 80→443 跳转,要么用 HSTS。
  5. 混合内容 :页面里如果还有 http:// 的图片/JS,浏览器会报"混合内容"警告,要全部改成 https:// 或相对协议 //。

相关推荐
mister_guo1 天前
HTTP 和 RPC:从一次干饭说清它们的区别
网络协议·http·rpc
严谨的麻辣烫1 天前
Python HTTP 连接池怎么用?从连接复用到请求异常排查
开发语言·python·http·requests·网络排查
K成长日志1 天前
BLE Host层L2CAP -- 配置参数选项
物联网·网络协议·嵌入式·蓝牙·iot·ble·bluetooth
黑妹天下第一乖1 天前
255 次尝试就能恢复 CA 私钥?这次 TLS 信任链事故,值得每个 AI 开发者警惕
人工智能·python·https·tls·信任链·ca
Lsetea1 天前
curl下载HTTPS文件报23:证书验证成功与本地写入失败分层排查
linux·https·shell·ssl证书·curl
幻智星科技1 天前
纯FPGA网络通信实现微秒级确定性延迟
网络协议·fpga开发·硬件架构
2501_915909061 天前
Ipa Guard 防护上架,混淆、重签名和回归测试怎么做
android·ios·小程序·https·uni-app·iphone·webview
码林鼠1 天前
flutter网络http请求入门教程-dio
网络协议·flutter·http
Lsetea1 天前
curl访问HTTPS返回304却没有正文:条件请求、缓存与证书验收排查
linux·http·https·ssl证书·curl
zxanz11 天前
免费 SSL 证书的隐性成本:续期压力、稳定性与商业风险评估
网络·网络协议·ssl