HTTPS协议

定义

超文本传输安全协议(Hypertext Transfer Protocol Secure,简称:HTTPS)是一种通过计算机网络进行安全通信的传输协议。HTTPS经由HTTP进行通信,利用SSL/TLS来加密数据包。HTTPS的主要目的是提供对网站服务器的身份认证,保护交换数据的隐私与完整性。

image-20220416194334841

HTTP协议采用明文传输信息,存在信息窃听信息篡改信息劫持的风险,而协议TLS/SSL具有身份验证信息加密完整性校验的功能,可以避免此类问题发生。

安全层的主要职责就是对发起的HTTP请求的数据进行加密操作对接收到的HTTP的内容进行解密操作

对称加密

通信双方使用同样的加密和解密规则。

image-20220416170650130

缺点:因为秘钥还是会通过网络传输的,如果有第三方知道加密的规则以后,会很容易被破解。 这就要用到非对称加密的方法。

非对称加密

也叫公钥加密。通信双方使用两个密匙来进行加密和解密。

  • 一个是私钥:仅仅是持有方才有的密钥,一般来说都放在服务器中,数据经过公钥加密就只能被私钥解密,数据经过私钥加密就只能被公钥解密
  • 一个是公钥:是通信双方都拥有的密钥

image-20220416171102143

应用到客户端和服务端的话:服务端拥有成对的私钥和公钥,然后公布自己的公钥让服务端知道,客户端用公钥把自己的数据加密,加密后用公钥反而无法解密这段数据,一定要用服务端的私钥才能解密,这样就是非对称加密。

image-20220416171806083

虽然我们现在可以对数据进行加密,但是现在的方法也不一定是安全的,因为没有办法确定得到的公钥就一定是安全的公钥。如果存在中间人,截取了对方发给我们的公钥,然后将他的公钥发送给我们,这样的话我们的信息就会被窃取了,然而我们还不知道,为了解决这样的问题,我们可以使用证书。

证书

服务端需要申请SSL证书,表明自己的身份。

  • SSL证书就是保存在源服务器的数据文件,要让SSL证书生效就需要向CA申请。
  • 这个证书除了表明域名是属于谁的,日期等等信息以外,还包括了特定的公钥

有了证书以后,用户就可以通过HTTPS来访问服务器了。

浏览器也会把HTTP的默认端口80改为HTTPS的默认端口443

TLS握手过程

那么现在浏览器通过HTTPS访问服务器具体会有哪些变化呢?

image-20220416174543786

可以看到:

  1. 首先浏览器会向服务器打招呼,并且把自己支持的TLS版本,加密套件发给服务端,同时还生成了一个随机数给服务端,也就是随机数1。

  2. 接着服务端打招呼,确认支持的TLS版本以及选择加密套件,并且也生成一个随机数发送给客户端,也就是随机数2

  3. 服务端会接着把证书和公钥都发送给客户端,都发送完毕后告诉客户端。

  4. 然后客户端生成随机数3,也叫预主密匙,用刚刚收到的公钥进行加密后再发送出去

  5. 服务端收到预主密钥后,用自己的私钥进行解密,这样服务器也知道预主密钥了,而且只有客户端和服务端知道这个预主密钥,除非私钥泄露,否则没人知道这个预主密钥是什么

  6. 最后客户端和服务端用预主密钥、随机数1、随机数2分别计算出会话密钥,当然这个会话密钥是相同的

    这前面的步骤都是非对称加密,为了得到会话密钥

  7. 在得到会话密钥后,双方都只使用会话密钥进行加密

也就是说后面使用的是对称加密。

那为什么不继续使用非对称加密呢?会话密钥不会泄露吗?

原因如上可见,非对称加密消耗资源非常大。而且双方锁使用的会话密钥是本地计算出来的,不会彼此传输,所以不会泄露

如果与其他服务器沟通就是去建立新的会话,会话密钥也不相同,会话密钥只应用在当前会话,更加提高了安全性。

优缺点:

优点:

  • 认证用户和服务器,保证了数据可以发送到正确的客户端和服务器。

  • 加密传输、身份认证,使通信更加安全,防止数据在传输过程中被窃取、修改,确保数据安全性。

  • 他是现行框架下最安全的解决方案,虽然不绝对,但大幅增加了中间人攻击的成本。

缺点:

  • 服务器和客户端双方的加密和解密处理,耗费更多的服务器资源,过程复杂。
  • 握手阶段比较费时,增加页面的加载时间。
  • SSL证书收费,功能越强,费用越高。
  • SSL证书需要绑定IP,不能在一个IP上绑定多个域名
  • 连接服务器端资源占用高很多,支持访客稍多的网站需要投入更大的成本。