Skip to content

HTTPS协议 ​

HTTPS(Hypertext Transfer Protocol Secure)是在 HTTP 的基础上加入 SSL/TLS 协议层,对传输内容进行加密的安全版本。它由 HTTP 协议(应用层)+ SSL/TLS 协议(传输层与应用层之间)+ TCP 协议 组成。

为什么需要 HTTPS ​

HTTP 协议以明文方式传输内容,不提供任何数据加密,存在三大风险:

  • 窃听风险:第三方可以截获通信内容
  • 篡改风险:第三方可以篡改通信内容(如运营商劫持插入广告)
  • 冒充风险:第三方可以冒充他人身份参与通信(中间人攻击)

HTTPS 通过加密、身份认证与完整性校验解决了以上三个问题。

加密方式 ​

  • 对称加密:加密和解密使用同一个密钥,速度快,但密钥分发存在安全隐患(如何安全地把密钥传给对方)。
  • 非对称加密:拥有公钥(public key)和私钥(private key)两个密钥,公钥加密的内容只能用私钥解密。安全性高,但运算速度慢,不适合加密大量数据。

HTTPS 采用的是混合加密方案:利用非对称加密安全地交换对称密钥,再用对称加密来加密实际传输的数据,兼顾了安全性和性能。

数字证书与 CA ​

仅有加密还不能解决冒充问题——如果中间人在密钥交换阶段替换了公钥,仍然可以伪装成服务器。因此需要数字证书来证明公钥的身份:

  1. 网站向证书颁发机构(CA,Certificate Authority)申请证书。
  2. CA 使用自己的私钥对网站的公钥等信息进行签名,生成数字证书。
  3. 浏览器内置了受信任的 CA 根证书列表,收到证书后用 CA 的公钥验证签名,从而确认证书(以及其中的服务器公钥)是可信的,没有被篡改。

TLS 握手过程(简化版) ​

  1. Client Hello:客户端发送支持的 TLS 版本、加密套件列表、一个随机数 client random。
  2. Server Hello:服务器选择 TLS 版本和加密套件,返回一个随机数 server random,并发送数字证书(含公钥)。
  3. 证书校验:客户端校验证书链是否可信、域名是否匹配、是否过期。
  4. 密钥交换:客户端生成 pre-master secret,用服务器公钥加密后发送给服务器;双方分别用 client random + server random + pre-master secret 计算出相同的对称密钥(会话密钥)。
  5. 握手完成:双方切换到对称加密,用会话密钥加密后续所有通信内容。

TLS1.3 进一步简化了握手过程(1-RTT,支持 0-RTT),减少了握手带来的延迟。

HTTP 与 HTTPS 的区别 ​

对比项HTTPHTTPS
安全性明文传输,不安全基于 SSL/TLS 加密传输
端口80443
证书不需要需要向 CA 申请证书
性能无加密开销多一次 TLS 握手,有一定性能损耗(可通过会话复用等方式缓解)
SEO/信任浏览器提示"不安全"浏览器显示锁形图标,更受信任

阅读资料 ​

基于 VitePress 构建 · 欢迎 Star 与 PR