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:// 或相对协议 //。

相关推荐
wdfk_prog2 小时前
Wi-Fi Direct 源码分析(11):P2P-GROUP-STARTED 之后——Group Interface、IP 配置与真实数据通路
运维·服务器·网络协议·tcp/ip·asp.net·p2p·wifi-direct
wechatbot8882 小时前
企业微信HTTP协议接口完整接入教程|全量消息收发 API 实战
网络协议·http·微信·企业微信·ai编程
网络小江2 小时前
上网第三十七课:HTTPS——地址栏那把小锁,到底保护了什么
网络协议
车载中间件通信2 小时前
[TC8测试]TCP_CALL_ABORT_03_03
网络·网络协议·tcp/ip·tc8
web打印社区2 小时前
Lodop 提示未安装或请升级:Chrome 里先分清该装哪套
开发语言·前端·javascript·chrome·websocket·http
pt10433 小时前
CML网络仿真入门-1:Cisco Modeling Labs概述
运维·网络协议
网络小江3 小时前
上网第三十六课:HTTP——浏览器背后的协议
网络协议
傲世仙尊4 小时前
UDP底层与守护进程化-报头结构体skbuff指针移动与自成会话
驱动开发·网络协议·udp
吴声子夜歌13 小时前
Nginx应用与运维——Nginx HTTP模块详解(数据处理功能模块)
运维·nginx·http