Skip to content

Https的加密方式介绍

HTTPS的加密方式是一种结合了两种加密技术的混合加密机制,它同时利用了“非对称加密”和“对称加密”的优点,以确保数据传输的安全。

整个过程的核心是SSL/TLS握手 (SSL/TLS Handshake)。 SSL是早期的协议,现在基本上都被其继任者TLS (Transport Layer Security) 所取代,但人们习惯上仍会说SSL握手。 这个握手过程的目标主要有三个: 1. 验证服务器的身份,确保你正在与正确的网站通信而不是冒名顶替者。 2. 协商出一套双方都支持的加密算法。 3. 安全地生成并交换用于后续通信的“会话密钥”。

非对称加密 (Asymmetric Encryption)

非对称加密使用一对密钥:一个公钥和一个私钥。 * 公钥 (Public Key):可以公开给任何人。用公钥加密的数据,只有对应的私钥才能解开。 * 私钥 (Private Key):由服务器秘密保管。

它的优点是解决了密钥交换的难题,非常安全,但缺点是计算量大,加密和解密的速度较慢。

对称加密 (Symmetric Encryption)

对称加密使用同一个密钥进行加密和解密。 它的优点是速度快,效率高,适合加密大量数据。 缺点是在不安全的网络中,如何将这个唯一的密钥安全地从一方传输给另一方是一个很大的问题。

HTTPS的混合加密流程 (SSL/TLS 握手)

HTTPS巧妙地结合了上述两种方式的优点:使用非对称加密来安全地协商和交换对称加密所需的密钥,然后使用对称加密来高效地传输实际的网页数据。

  1. 客户端发起请求 (Client Hello)

    • 当你在浏览器输入一个https://开头的网址时,浏览器(客户端)会向服务器发送一个“你好”的消息。
    • 这个消息包含了客户端支持的TLS版本、一个随机数(客户端随机数),以及一个客户端支持的加密算法套件列表(Cipher Suites)。
  2. 服务器响应 (Server Hello)

    • 服务器收到消息后,会回复一个“你好”消息。
    • 此消息会从客户端的列表中选择一个双方都支持的加密算法套件,并附上另一个随机数(服务器随机数)。
    • 最重要的一步是,服务器会将其“SSL证书”发送给客户端。 这个证书里包含了网站的信息和服务器的公钥。该证书由受信任的第三方机构(CA,证书颁发机构)签发,用于证明服务器的身份。
  3. 客户端验证与密钥交换

    • 客户端的浏览器会验证收到的证书是否有效、是否由受信任的CA颁发、是否过期以及域名是否匹配。
    • 验证通过后,客户端会生成另一个随机数,这个随机数被称为“预主密钥”(Pre-Master Secret)。
    • 客户端用从服务器证书中获取的公钥,对这个“预主密钥”进行加密,然后发送给服务器。
  4. 生成会话密钥

    • 服务器收到被公钥加密的“预主密钥”后,用自己的私钥进行解密,从而得到原始的“预主密钥”。
    • 现在,客户端和服务器双方都拥有了三个相同的随机数:客户端随机数、服务器随机数和预主密钥。
    • 双方会使用之前协商好的算法,通过这三个随机数各自独立地计算出本次通信所使用的“会话密钥”(Session Key)。 这个会话密钥是对称加密密钥。
  5. 握手完成,开始加密通信

    • 客户端和服务器各自向对方发送一条“握手结束”的消息,这条消息会用刚刚生成的“会话密钥”进行加密。
    • 对方收到后,用同样的会话密钥解密。如果解密成功,则代表握手过程顺利完成,双方都拥有了正确的会话密钥。
    • 从这一刻起,直到你关闭网页或会话结束,客户端和服务器之间的所有HTTP数据都将使用这个对称的“会话密钥”进行加密和解密。