SSL/TLS 及全站 HTTPS(Day47)

主题:SSL/TLS 协议作用、对称加密与非对称加密配合、Hash 摘要与数字签名、数字证书与 CA 中心、SSL 单向/双向认证流程、TLS 协议版本演进、证书类型与申请方式、网站劫持原理与防御、单节点与全站 HTTPS 配置


结构总览

SSL/TLS 概述
  ├─ HTTP 明文三大安全问题:窃听 / 篡改 / 伪装
  ├─ HTTPS = HTTP + SSL/TLS
  └─ 解决方案:加密传输(防窃听)/ Hash+签名(防篡改)/ 证书+CA(防伪装)
加密体系
  ├─ 对称加密(快但密钥分发难)vs 非对称加密(安全但慢)
  └─ SSL 分工:非对称交换密钥 → 对称传输数据
数字签名与证书
  ├─ Hash 摘要(固定长度、不可逆)
  ├─ 数字签名(私钥加密摘要,公钥验证 → 防篡改)
  ├─ 数字证书(CA 对公钥签名 → 防伪装)
  └─ CA 中心(受信任第三方,签发管理证书)
SSL 认证流程
  ├─ 单向认证(验证服务端,HTTPS 默认):握手 9 步
  └─ 双向认证(同时验证客户端,银行/政务):+ 客户端证书
TLS 版本与证书类型
  ├─ SSL 1.0-3.0 / TLS 1.0 已废弃;TLS 1.2 主流;TLS 1.3 最新
  ├─ 验证级别:DV < OV < EV
  ├─ 域名数量:单域名 / 通配符 / 多域名
  └─ 申请:付费 / 免费(Let's Encrypt 90 天自动续期)/ 自签名(仅测试)
网站劫持
  ├─ 原理:DNS / 路由 / 服务器被劫持 → 假冒网站
  └─ 防御:证书绑定域名,假冒者无法持有有效证书,浏览器告警
HTTPS 配置(Nginx)
  ├─ 获取证书:Certbot + Let's Encrypt
  ├─ 单节点:listen 443 ssl http2 + ssl_certificate 等
  ├─ HTTP→HTTPS:return 301 https://$server_name$request_uri
  └─ 全站 HTTPS:LB HTTPS → Web HTTPS → FastCGI 传递 HTTPS 环境变量 → MySQL SSL

关键要点

三大安全问题: HTTP 明文传输存在窃听(数据被截获 → 泄露密码)、篡改(内容被修改 → 植入广告/恶意代码)、伪装(身份无法确认 → 钓鱼网站)三大隐患。HTTPS = HTTP + SSL/TLS,在 HTTP 之上叠加加密层解决全部三个问题。

两种加密方式: 对称加密(同一把密钥加解密,速度快、效率高,适合大规模数据传输,但密钥分发困难、泄露即失效);非对称加密(公钥/私钥一对,公钥可公开,安全但速度慢,适合密钥交换、数字签名、身份认证)。SSL 结合两者:非对称加密安全交换对称密钥,对称加密高效传输实际数据。

数字签名防篡改: Hash 算法将任意数据转为固定长度摘要(同数据同摘要、不可逆)。服务端用私钥加密摘要得到数字签名,随数据发送;客户端用公钥解密签名得摘要1,对收到的数据算 Hash 得摘要2,两者一致则未被篡改。

数字证书防伪装: 数字证书 = CA 中心对服务端公钥签名后得到的文件,包含服务端公钥、身份信息(域名/组织)、CA 信息、有效期、CA 数字签名。客户端用内置 CA 公钥验证证书真伪。CA 是受信任的第三方机构(DigiCert、GlobalSign、Let’s Encrypt、阿里云、腾讯云等)。

单向认证(HTTPS 默认): TCP 三次握手 → Client Hello → Server Hello → 服务端发证书 → 客户端用 CA 公钥验证 → 通过则生成 Pre-Master Secret 用服务端公钥加密发送 → 服务端私钥解密得到对称密钥 → 后续对称加密通信;失败则浏览器显示「连接不安全」。双向认证在此基础上服务端额外请求并验证客户端证书,用于银行/政务等高安全场景。

TLS 版本: SSL 1.0/2.0/3.0 与 TLS 1.0 均已废弃,TLS 1.1/1.2 广泛使用,TLS 1.3 最新(性能更好、安全更强)。「SSL 证书」这一叫法沿用至今,实际大多使用 TLS 协议。

证书类型: 按验证级别:DV(仅验证域名所有权,价格低)< OV(验证域名+组织,显示企业名)< EV(严格验证,地址栏绿色标识)。按域名数量:单域名、通配符(*.example.com 含所有子域名)、多域名。申请方式:付费证书(商业保险,适合生产)、免费证书(Let’s Encrypt 90 天自动续期,适合个人项目)、自签名证书(仅测试,浏览器告警)。

网站劫持: DNS 解析、路由转发或服务器被劫持,用户访问到假冒服务器。HTTPS 能有效防御:证书绑定域名,假冒服务器无法持有对应域名的有效证书,浏览器验证失败即告警阻止访问。

HTTPS 配置三步: ① Certbot 获取证书(certbot --nginx -d example.com,证书在 /etc/letsencrypt/live/example.com/);② Nginx 单节点配置(listen 443 ssl http2、ssl_certificate/ssl_certificate_key、ssl_protocols TLSv1.2 TLSv1.3、HSTS 头);③ HTTP 自动跳转 HTTPS(return 301 https://$server_name$request_uri;)。全站 HTTPS:集群中每一层通信都加密——用户 HTTPS 到七层 LB,LB HTTPS 到 Web 层,Nginx 经 FastCGI 转发 php-fpm 时需 fastcgi_param HTTPS on; 让后端识别请求协议,MySQL 也启用 SSL。负载均衡器转发时用 proxy_set_header X-Forwarded-Proto $scheme; 传递原始协议。

相关页面