我们在生活中,无时无刻都会去搜索一些东西或去浏览一些网站,那么我们在浏览这些网站的时候,浏览器的底层会是怎么样实现我们的需求的呢?让我们看到我们想要看到的网站的呢?又是否会泄露我们的个人信息呢?这些问题都是值得我们去思考的。
首先,我们要知道的是我们现在使用的浏览器大部分都是基于HTTP(超文本传输协议)协议来实现的,当我们在想要浏览一个网页时,我们会在浏览器中输入一段网址或者域名,而HTTP协议的底层又是通过TCP协议实现的,默认端口号是80,我们都知道TCP协议是面向连接的,因此我们一定要与相应的服务器建立连接,而建立连接就一定需要IP地址和端口号,这时,我们输入的域名就需要通过DNS解析翻译成对应的IP地址,以便于我们可以根据IP来与服务器创建基于TCP的连接,当我们通过“三次握手”与服务器建立了基于TCP协议的连接后,浏览器会将我们输入的请求按照HTTP协议规范转化为HTTP格式的请求报文传输给目标服务器,当服务器接收到我们的请求时,会将请求报文中携带的请求信息进行解析并处理,然后会生成HTTP格式的数据包响应给浏览器,浏览器再通过一系列的解析、处理,最终呈现给我们一个网站,最后再通过“四次挥手”释放TCP连接。
配图解析如下:
然而,HTTP协议会存在一些安全问题,例如,它是使用明文来传递信息的,内容可能会被窃听;还有它不会去验证通信方的身份,通信方的身份有可能会遭遇伪装;最后就是它无法证明报文的完整性,报文有可能遭篡改。当我们浏览一些包含自己个人信息的网站,为了避免我们的个人信息泄露,我们会使用HTTPS,HTTPS不是一种新的协议,而是让HTTP先和SSL通信,再由SSL和TCP通信。通过使用SSL,HTTPS具有了加密(防窃听)、认证(防伪装)、和完整性保护(防篡改)的能力。
而我们在使用浏览器通过HTTPS去访问一个网站时,SSL会在HTTP协议的基础上,加上加密、认证等操作,SSL在加密方式上选择的是非对称秘钥加密的方式,这种加密方式更进一步保证了对网站加密的安全性,那么SSL是怎样对网站信息进行加密的呢?接下来,我们通过一幅图来进一步了解HTTPS的工作原理。
首先,当我们向服务器提交了一个https网站的请求时,服务器在收到请求后会选择浏览器支持的加密和hash算法,然后产生一个秘钥对(包含公钥和私钥),同时会返回给浏览器一个CA证书,这个证书里面就会含有服务器所产生的密钥对里面的公钥等信息,浏览器在收到这个证书后,会对证书的内容进行校验,如果有问题,则会有一个提示警告;否则,浏览器会产生一个随机秘钥,然后使用证书中的公钥对这个随机密钥进行非对称加密,将加密后的随机密钥发送给服务器,服务器在收到这个加密的随机密钥之后,会使用原来密钥对里面的秘钥对其进行解密,获取随机秘钥,然后用这个随机秘钥对浏览器所请求的网站内容进行对称加密,返回给浏览器,浏览器在收到网站内容后会使用自己持有的随机秘钥对其解密,最终获得我们需要的网站内容。