如何理解HTTPS

超文本传输安全协议(英语:Hypertext Transfer Protocol Secure,缩写:HTTPS,常称为HTTP over TLS,HTTP over SSL或HTTP Secure)是一种通过计算机网络进行安全通信的传输协议。HTTPS经由HTTP进行通信,但利用SSL/TLS来加密数据包。HTTPS开发的主要目的,是提供对网站服务器的身份认证,保护交换数据的隐私与完整性。这个协议由网景公司(Netscape)在1994年首次提出,随后扩展到互联网上。

先放结论1:HTTPS要使客户端与服务器端的通信过程得到安全保证,必须使用的对称加密算法,但是协商对称加密算法的过程,需要使用非对称加密算法来保证安全,然而直接使用非对称加密的过程本身也不安全,会有中间人篡改公钥的可能性,所以客户端与服务器不直接使用公钥,而是使用数字证书签发机构颁发的证书来保证非对称加密过程本身的安全。这样通过这些机制协商出一个对称加密算法,就此双方使用该算法进行加密解密。从而解决了客户端与服务器端之间的通信安全问题。

我们先从一个聊天软件说起,我们要实现A能发一个hello消息给B。要实现A发给B的hello消息包,即使被中间人拦截到了,也无法得知消息的内容。

  • 对称加密算法。只要这个密钥S不公开给第三者,同时密钥S足够安全,我们就解决了我们一开始所定问题域了。如果服务器端对所有的客户端通信都使用同样的对称加密算法,无异于没有加密。那怎么办呢?答案是:Web服务器与每个客户端使用不同的对称加密算法。
  • 我们的服务器端通过协商告诉客户端该使用哪种对称加密算法。但是,你协商的过程是没有加密的,还是会被中间人拦截。
  • 非对称加密。密码学领域中,有一种称为“非对称加密”的加密算法,特点是私钥加密后的密文,只要是公钥,都可以解密,但是公钥加密后的密文,只有私钥可以解密。私钥只有一个人有,而公钥可以发给所有的人。我们使用非对称加密算法进行对称加密算法协商过程。
  • 要达到Web服务器针对每个客户端使用不同的对称加密算法,同时,我们也不能让第三者知道这个对称加密算法是什么,怎么办?就是使用随机数来生成对称加密算法。这样就可以做到服务器和客户端每次交互都是新的加密算法、只有在交互的那一该才确定加密算法。
  • 如果使用非对称加密算法,我们的客户端A,B需要一开始就持有公钥。

    • 方案1. 服务器端将公钥发送给每一个客户端。如果服务器端发送公钥给客户端时,被中间人调包了,怎么办?
    • 方案2. 服务器端将公钥放到一个远程服务器。多了一次请求,还要另外处理公钥的放置问题。
    • 所以,我们不能直接将服务器的公钥传递给客户端,而是第三方机构使用它的私钥对我们的公钥进行加密后,再传给客户端。客户端再使用第三方机构的公钥进行解密。
  • 数字签名,解决同一机构颁发的不同证书被篡改问题。客户端在拿到证书后,自己就有能力分辨证书是否被篡改了。客户端拿到证书后根据证书上的方法自己生成一个证书编号,如果生成的证书编号与证书上的证书编号相同,那么说明这个证书是真实的。
  • 第三方机构的公钥怎么跑到了客户端的机器中呢?现实中,浏览器和操作系统都会维护一个权威的第三方机构列表(包括它们的公钥)。因为客户端接收到的证书中会写有颁发机构,客户端就根据这个颁发机构的值在本地找相应的公钥。