一、问题的提出
昨天发生了一个跟https有关的生产bug。
事后有的小伙伴表示虽然看了一些网上的资料,但是还是不太理解https通讯的全流程,我就用比较通俗的说法给他整体讲了一遍。
然后小伙伴突然问了一个很有意思的问题:既然使用https发送报文,又非对称加密,又对称加密(会话秘钥)的,反正各种加密,那为什么我按个F12还是能看到明文?这密都加到哪儿去了?
这是一个挺好的问题,说明他真的动脑子在想了。
二、网络七层协议
学习过基础网络知识的软件工程师们,应该都了解这个经典的网络七层协议(OSI模型)。
OSI模型其中的应用层、表示层、会话层有时候会被合并起来统称“应用层”,变成五层协议。
这五层协议的分工,曾经在知乎上面看到过一个非常通俗形象的总结,借用过来:
- 买东西时候要封装打包(应用层)
- 打包后要在包裹上贴快递单(传输层)
- 在快递单上要写源地址目的地址(网络层)
- 让快递小哥来取件(数据链路层)
- 快递小哥骑车送件到收货人(物理层)
(原回答地址 作者ID:后生)
三、问题的答案
所谓的 https ,其实就是 http + SSL/TLS 两种协议的合体。
同时,http协议是应用层协议,而SSL/TLS是传输层协议。
那问题的答案就很清晰了,在你能够在浏览器上面查看网页之前,报文经过了你的传输层,SSL/TLS已经对报文进行了解密处理(快递已经开包)。
之后所以不管是在浏览器上呈现,还是你按F12查看源码,都是http协议的事情(快递里面的东西都已经到你手上了,对你而言不会再有啥秘密)。
四、多说几句
现在转行而来的软件工程师和产品设计师的比重在行业内非常高。
对于这一现象我既有正面的看法,不可避免也有负面看法,在这里暂且不提。
但是对于一些只经过了基础编程训练,而缺乏计算机基础知识(各种算法、原理等等)的软件工程师,我经常会劝他们多补补课。
这些基础知识可能在你工作的99%时间里一点作用也起不到,但是它们可以在潜移默化之间提升你能力的天花板,让你解决问题的思路更为广阔。
网友评论