https是在http的基础上添加了SSL/TLS,相比较http来说更加安全可靠。这里详细记录一下https的具体过程。

相关概念

对称加密与非对称

  • 对称加密 指加密解密都使用一个秘钥。 优点是简单,速度快。缺点就是密钥的管理与分配,也就是说,如何把密钥发送到需要解密你的消息的人的手里是一个问题。在发送密钥的过程中,密钥有很大的风险会被黑客们拦截。
  • 非对称加密 指加密使用一个密钥,解密使用另一个密钥。这一对密钥被称为“公钥”和“私钥”。别人用公钥对要发给自己的信息进行加密,然后自己使用私钥进行解密。 非对称加密的优点是只需要把公钥告诉别人,私钥保存在自己这里,就没有了被黑客拦截的风险。而缺点就是解密的运算复杂,时间长。

SSL/TLS

SSL(Secure Socket Layer, 安全套接层)和 TLS(Transport Layer Security, 传输层安全协议)可以理解为同一个协议的不同阶段,都是为了安全传输信息而对信息进行加密。其基本过程是这样的:

1. 客户端向服务器端索要并验证公钥
2. 双方协商生成对话秘钥
3. 双方采用对话秘钥进行加密通信

HTTPS


整个过程如下:

  1. 客户端发起https请求 如果用户直接输入了https:www.baidu.com,就会直接访问服务器的443端口。 如果用户没有输入https,但是服务器设置了使用https协议进行通信,服务器会自动重定向到443端口,从而使用https协议。如果客户端不支持使用https,最终还是会使用http协议来通信。 在这个过程中,客户端会生成一个随机数1,并将其发送给服务器。
  2. 服务器返回数字证书。 服务器接收到随机数1之后,就把他保存下来,并生成一个随机数2。连同数字证书,一同发送回客户端。 这里的数字证书是服务器身份的验证信息,用来表明服务器的身份。证书里面包含了很多东西,其中有一个公钥,也就是用了加密信息的密钥。
  3. 客户端验证数字证书 客户端收到服务器发送的数字证书后,会对证书进行验证。 如果证书有问题,客户端就会显示一个警告,由用户选择是否还要继续通信。 如果证书没有问题,客户端就会从证书中取出服务器的公钥,然后生成一个随机数3,并使用公钥对其加密。
  4. 客户端传送随机数 客户端将使用公钥加密后的随机数3发送给服务器,同时,告诉服务器,接下来的通信就使用约定好的加密方法。
  5. 服务器得到了加密后的随机数3,然后使用自己保存的私钥对其解密,就得到了这个随机数3。 此时,客户端和服务器端都保存了3个随机数。双方会使用这3个随机数,生成一个相同的密钥。 然后,双方就开始使用这个密钥对传输的信息进行加密。

本文首发于我的博客

参考自这里