HTTPS 协议原理

最近学习了 HTTPS 协议的基础知识,把自己的粗浅的理解通过大白话写一下。不涉及技术细节。

1. 背景

  • HTTP 协议是基于 TCP/IP 协议进行传输的。

  • HTTP 传输的数据完全透明,也就是说,如果有中间人对流量截取分析,所有的信息都将泄露。

  • HTTPS 协议是对 HTTP 协议的基础上做了一层加密操作 (SSL 层)。所以,其英文全称是 Hypertext Transfer Protocol over Secure Socket Layer。

2. 对称加密

  • 沟通的双方使用相同的密钥。

  • 客户端用密钥 Q 加密信息,发送到服务端。服务端用同样的密钥 Q 解密。

  • 缺点:如何保证密钥 Q 的安全? 如何将密钥安全地告诉对方?

3. 非对称加密

  • 沟通双方使用不同的密钥。

  • 加密,使用公钥 P

  • 解密,需要同时使用公钥 P 和私钥 Q

  • 加密是不可逆的。加密者自己也无法破解,因为没有私钥。

  • 服务器把公钥 P 公开发布,私钥 Q 自己秘密保存好。

  • 客户使用公钥 P 加密信息,除了拥有私钥 Q 的服务器,其他人都无法解密,包括客户自己

  • 数学原理

    • 两个素数 mn, 其乘积为 zz 做分解因子运算,只能有分解为 m * n 这一种情况。

    • 比如,3 * 7 = 21,将 21 分解因子,只能分解为 3 * 7,没有其他的情况了。

    • 两个大素数 mn,从他们的积 z 反向推导分解因子,分解出 mn。这是一个公认的数学难题。

    • 公钥就是大素数的积 z,私钥就是两个大素数 mn

    • 用户(或其他人)拿到公钥 z,是无法算出私钥 mn 的。也就无法进行解密。

4. HTTPS 工作流程

对称加密性能好,但无法保证双方安全地同步密钥。

非对称加密性能差,但安全。

HTTPS 的流程是,将对称加密的密钥,通过非对称加密传输。双方安全地获得对称加密密钥后,使用对称加密密钥进行加密沟通。在保证安全的情况下,获取最好的性能。

  • 服务器从 CA 厂商处申请或购买证书(包含公钥、私钥)

  • 服务器保存证书的私钥

  • 客户端(浏览器)申请 HTTPS 连接到服务器

  • 服务器返回证书(公钥)给客户端(浏览器)

  • 客户端(浏览器)通过公共服务验证证书(公钥)是合法的 CA 厂商发行的

    • 防止伪造证书的中间人攻击

    • 有些测试环境会放弃证书验证,默认信认证书

    • 在实际项目中,代码所实现的客户端,证书是内部且可信的,则不做验证。

  • 客户端(浏览器)生成一个随机 对称加密的密钥

  • 客户端(浏览器)使用证书(公钥)加密刚刚生成的密钥

  • 客户端(浏览器)将加密的密钥发送给服务端 (中间人截取也将无法破解)

  • 服务端使用证书的私钥解密,获取对称加密的密钥

  • 双方都安全的同步了对称加密的密钥,后面的交流通过对称加密密钥进行加密。

最近更新: 8/3/2019, 12:26:46 PM