Skip to content

HTTPS 协议

HTTPS (HyperText Transfer Protocol Secure,安全超文本传输协议) 并不是一个全新的协议,而是 HTTP + SSL/TLS 的组合。 它的核心目的是解决 HTTP 明文传输带来的安全隐患(窃听、篡改、伪装),通过在 HTTP 应用层和 TCP 传输层之间加入一个安全层(SSL/TLS),实现数据的加密传输数据完整性校验身份验证

1. 为什么需要 HTTPS?(HTTP 的三大风险)

在没有 HTTPS 之前,互联网上的数据几乎都是“裸奔”的,这就带来了致命的安全问题:

  1. 窃听风险 (Eavesdropping):黑客可以在数据传输的任何节点(如公共 WiFi、运营商路由器)截获你的账号密码。
  2. 篡改风险 (Tampering):黑客可以修改你收到的数据,比如在网页中插入广告,或者将你转账的账号改成他自己的(中间人攻击)。
  3. 伪装风险 (Pretending):你无法确认你访问的银行网站是不是真的银行,黑客可以搭建一个一模一样的“钓鱼网站”骗取你的信息。

HTTPS 的三大防线 就是专门对付这三个风险的:

  1. 加密 (Encryption) -> 防窃听
  2. 数据签名 (Data Integrity) -> 防篡改
  3. 数字证书 (Digital Certificate) -> 防伪装

2. HTTPS 的核心原理:混合加密机制

HTTPS 为了同时兼顾安全性性能,采用了一种非常巧妙的“混合加密”机制。要理解它,必须先懂两种基础加密方式:

2.1 对称加密 (Symmetric Encryption)

  • 原理:加密和解密使用同一把钥匙(密钥)

Logo

  • 特点:加密速度极快,适合加密大量数据。
  • 致命弱点:如何安全地把这把“钥匙”交给对方?如果黑客在传输钥匙的过程中截获了它,加密就形同虚设了。

Logo

2.2 非对称加密 (Asymmetric Encryption)

  • 原理:拥有两把钥匙:一把公钥(Public Key),一把私钥(Private Key)。
    • 公钥是公开的,任何人都可以获取。
    • 私钥是自己死死捂住的,绝对不外传。
    • 核心法则:用公钥加密的数据,只有对应的私钥才能解密。

Logo

  • 特点:解决了密钥分发的问题,非常安全。
  • 致命弱点:加密/解密速度极慢(比对称加密慢几百倍甚至上千倍),只适合加密非常少量的数据。

Logo

2.3 HTTPS 的混合加密(扬长避短)

HTTPS 完美地结合了这两者:

  • 阶段一(非对称加密用于“交换钥匙”): 客户端和服务器在正式通信前,利用非对称加密(安全但慢),安全地协商并传递一把随机生成的“对称密钥(会话密钥)”
  • 阶段二(对称加密用于“正式通信”): 钥匙交换成功后,双方就用这把“对称密钥”来加密真正要传输的大量数据(速度快)。

简单来说:用非对称加密来加密“对称密钥”,用对称密钥来加密“实际数据”。

3. 防伪装的利器:数字证书与 CA 机构

即使有了混合加密,还面临一个问题:黑客可以冒充服务器,发给你一个假的公钥。当你用这个假公钥加密了数据,黑客用自己的私钥就能解开了。我们假设不存在认证机构,任何人都可以制作证书,这带来的安全风险便是经典的**中间人攻击 (MITM)**问题。

Logo

为了解决“我是我”的问题,HTTPS 引入了 CA 机构(Certificate Authority,证书颁发机构)数字证书

  1. CA 的作用:CA 就像互联网世界的“公安局”。网站站长需要把自己的公钥和身份信息提交给 CA,CA 审核通过后,会用 CA 自己的私钥对这些信息进行数字签名,打包成一个“数字证书”发给网站。
  2. 证书的内容:包含网站域名、网站公钥、证书有效期、签发该证书的 CA 机构名称等。
  3. 浏览器如何验证:世界上权威的 CA 机构的公钥,早就预装在了你的操作系统和浏览器中。当你访问网站时,网站会出示它的证书。你的浏览器会用内置的 CA 公钥去验证这个证书的数字签名。如果验证通过,就证明这个网站的公钥是真实的,不是黑客伪造的。

4. HTTPS 的建立过程(TLS 握手,TLS Handshake)

这发生在 TCP 三次握手之后,真正的 HTTP 数据传输之前。这是一个非常复杂的过程,我们简化来看最核心的步骤(以常见的 RSA 密钥交换为例):

  1. Client Hello (客户端打招呼)
    • 客户端向服务器发送请求,包含:客户端支持的 TLS 版本、支持的加密算法套件(Cipher Suites),以及一个客户端生成的随机数 (Random1)
  2. Server Hello (服务器回应)
    • 服务器从中选择一个自己也支持的加密算法。
    • 生成一个服务器端的随机数 (Random2) 并发送给客户端。
    • 最重要的一步:服务器将自己的**数字证书(包含公钥)**发送给客户端。
  3. Certificate Verification (客户端验证证书)
    • 浏览器验证证书的合法性(是否过期、CA 是否受信任、域名是否匹配)。如果验证失败,浏览器会弹出一个大大的红字警告(“您的连接不是私密连接”)。
  4. Pre-master Secret (生成预主密钥)
    • 如果证书验证通过,客户端会生成第三个随机数 (Pre-master Secret)
    • 客户端用证书里的服务器公钥对这个 Pre-master Secret 进行加密,并发送给服务器。
  5. 生成会话密钥 (Session Key)
    • 服务器收到密文后,用自己的私钥解密,得到 Pre-master Secret。
    • 奇迹发生:现在客户端和服务器手里都有了三个相同的随机数(Random1 + Random2 + Pre-master Secret)。双方利用这三个随机数,通过相同的算法,各自在本地计算出了一把相同的“对称密钥(会话密钥)”
  6. 加密通信开始
    • 钥匙协商完毕,双方互相发送一个 Finished 消息,表示握手结束。
    • 之后所有的 HTTP 请求和响应,都将使用这把协商好的会话密钥进行对称加密传输。

Logo

5. 常见问题 (FAQ) 与面试题

5.1 HTTP 和 HTTPS 的根本区别是什么?

  • 安全性:HTTP 明文传输,不安全;HTTPS 是加密传输,安全。
  • 端口:HTTP 默认使用 80 端口;HTTPS 默认使用 443 端口。
  • 性能/耗时:HTTPS 因为需要进行 TLS 握手和加解密计算,建立连接的过程比 HTTP 慢,对服务器 CPU 资源的消耗也略大。
  • 费用:HTTPS 需要向 CA 机构申请数字证书,高级别的证书通常需要付费。

5.2 为什么 HTTPS 不全程使用非对称加密?

  • 性能极差。非对称加密(如 RSA)的加解密算法极其复杂,非常耗费 CPU 资源,速度极慢。如果网页上的每一张图片、每一段文字都用非对称加密,服务器会崩溃,用户的网页加载速度也会慢到无法忍受。

5.3 如果 CA 机构被黑客攻破了怎么办?

  • 这是一个系统性的灾难(虽然发生概率极低)。如果黑客拿到了 CA 的私钥,他就可以随意签发伪造的合法证书。一旦发现这种情况,操作系统和浏览器厂商会立即将该 CA 从信任列表中吊销(Revoke),所有由该 CA 签发的证书将瞬间失效。历史上有过几次类似事件(如 DigiNotar 事件),导致该 CA 公司直接破产。

5.4 我自己用 OpenSSL 生成一个证书(自签发证书)可以用吗?

  • 可以使用,但不受信任。你可以自己生成公私钥和证书,用来加密数据是没问题的。但是,因为你不是权威的 CA 机构(浏览器不认识你),当用户访问你的网站时,浏览器依然会弹出大红色的安全警告。这种证书通常只用于公司内部的测试环境。

5.5 什么是中间人攻击(MITM),HTTPS 能防住吗?

  • 原理:黑客在你和服务器之间拦截请求,对你伪装成服务器,对服务器伪装成你。
  • HTTPS 可以完美防御。关键在于数字证书的验证机制。如果黑客拦截了请求并给了你一个他自己伪造的公钥(证书),由于这个证书没有经过权威 CA 签名,你的浏览器在验证时就会报错并阻止连接,从而粉碎了攻击。

5.6 SSL 和 TLS 到底是什么关系?

  • SSL (Secure Sockets Layer):是最早由网景公司开发的安全协议,到了 3.0 版本后被标准化。
  • TLS (Transport Layer Security):是 SSL 的继任者和升级版。SSL 3.0 被标准化后,更名为 TLS 1.0。现在互联网上广泛使用的是 TLS 1.2 和 TLS 1.3,早期的 SSL 版本因为存在严重漏洞已经被完全废弃。大家常说的“配置 SSL 证书”,实际上配置的都是 TLS。