写篇文章让自己记住计网——(9)HTTPS和SSL/TLS

433 阅读4分钟

作为博主面试中被问到的答不出来的计网知识,我觉得痛定思痛进行恶补。

HTTPS

使用谷歌浏览器你能看见地址栏左边的图标:

image.png

有锁的意思就是使用了https协议和服务端进行数据交流,如果没用使用https就是:

image.png

因为与服务器之间使用的只有http协议,所以http请求和响应携带的任何信息都是不安全的。

image.png

HTTPS是什么?

HTTPS是协议或则可以说是一种组合方案:HTTPS = HTTP + SSL/TLS

HTTP协议是工作在应用层的协议,是一种明文数据传输规范,被客户端和服务端所实现支持,用于在客户端和服务端之间进行数据通信。

HTTP可以被在同一个网络中的中间人所窃听,基于网络数据抓包的方式。因为http报文本身没用加密所以窃听者可以拿到http中携带的所以明文内容。

SSL/TLS协议工作在传输层,或则说是在应用层和传输层之间的安全层,通过对传输层上传输的数据进行加密来防范窃听,所以应用层上的http请求便可以安全传输。

SSL/TLS

SSL/TLS协议完成的工作并不只是对http报文进行加密,SSL/TLS这种写法也是具有特殊含义。

加密流程

具体的演变和推理我们就不在这里讲解,其实很多文章都在反复讲解,多看多理解慢慢就清除了为什么要这样设计。

  1. 在浏览器内部内置CA机构相关的代码用于识别CA数字证书等信息,而服务器也去得到了CA发布的数字证书。

  2. TCP连接后服务端发送CA数字证书,携带持有者、有效期和公钥,浏览器识别信息无误,用公钥将随机产生的对称加密key进行非对称加密,再返回给服务端。

  3. 服务端拿到用公钥加密过的对称加密key后,使用私钥解密得到key。

  4. 服务器和客户端开始使用key对http请求进行对称加密,从而进行安全的应用层数据通信。因为CA数字证书有时效性,所以一段时间后需要准备新的CA数字证书。

关于窃听

窃听者想要窃听,原则上要抓取服务端发送公钥后替换公钥发给客户端使用以此欺骗客户端和服务端,但是浏览器在CA数字签名上发现问题就会中断连接。如此一来要让客户端和服务端进行正常信息通信,窃听者不能改动CA数字签名(公钥),虽然能够得到CA数字签名中的内容,但是由于没有私钥无法将加密后的对称加密key进行解密,从而无法得知客户端和服务端之间通信时加密的钥匙。这便是窃听者能拿到数据但是却无法解密的效果,SSL/TLS协议想要做到的效果。

关于加密选择

直接对http请求进行安全加密的是对称加密方式,非对称加密用在给对称加密key值的加密上。

其实两次加密都可以用非对称加密,第一次我们选择非对称加密是因为结合CA数字证书我们就可以保证第二次加密的钥匙不被窃听,第二次我们选择对称加密是因为对称加密算法实现上消耗更小。

SSL和TLS区别

作为互联网前端开发的先驱者——网景公司,在过去设计开发了SSL协议(安全套接层:Secure Sockets Layer)用于对http协议进行加密,也就是对应用层中的所有报文信息做对称加密。

SSL协议随着普及和优化,最终被IETF组织完成了升级和规范——成为了TLS协议(传输层安全协议:Transport Layer Security)

所以SSL和TLS就是初中生和大学生的区别,SSL+TLS=TLS,从广义的角度来说SSL和TLS没有区别,SSL和TLS都是指加密步骤,狭义的角度就是安全层协议在两个时间段内的名字。

具体的区别更加复杂,TLS作为规范普及的协议,和原本的网景公司创造的SSL从思维和技术上都是有不同程度的变化。这里建议阅读一篇CSDN文章深入研究:HTTPS、SSL、TLS三者之间的联系和区别

ps 参考学习文章:面试官求你了,别再问我HTTPS