HTTP协议是如何实现“秘密交互”的?

HTTP协议是如何实现“秘密交互”的?

你知道HTTP访问的交互过程吗?

如题,可能有很多并不了解,本文将简单地介绍一下当你访问某网站时你的电脑与网站之间的数据交互过程。

大家都知道去访问网站都是使用浏览器,在地址栏中输入你想访问的链接,按个回车就能打开相应的网站。然后就可以尽情得浏览网页内容了。

那你知道WEB页面如何呈现的吗?

网页内容肯定不会凭空出现,当你在浏览器地址栏中输入URL(链接)时,WEB浏览器会发送相应的WEB请求信息到目标网站(服务器),当目标网站服务器接收到请求时服务器回应相应的内容给你的浏览器(客户端),这样你就看到了网页内容。

不过这只是基本的访问过程。这也是HTTP或HTTPS协议的数据交互的过程,但这个看似非常简单的交互过程中隐藏着很多小交互过程,下面就来一个一个研究一下。

HTTP和HTTPS的区别

首先,先来扫个盲,平常我们在浏览网页的时候可有很少关注这个网站是使用什么协议进行交互的,网页数据交互分为两种方式,一种就叫HTTP,别一种叫HTTPS。这两种方式我们都统称是HTTP协议,但却各有技术上的不同点。

一般情况下,如果你访问的网页不需要你登陆或者并没有登陆入口的这种网站通常情况下都会使用HTTP,但这不是绝对的,有些网站可能并不是这样的。那怎么样的网站才叫使用HTTP协议的呢?看下图:

HTTP协议是如何实现“秘密交互”的?

这是一个典型的HTTP协议交互的网站,看图中标识的位置,在地址栏中的最开始位置,有个“不安全”提示,在URL的最前端也没有任何标识。除了这种HTTP协议交互的网站以外呢就是HTTPS交互的网站的,这一类的网站是比较多的。

一般情况下,当这个网站需要登陆或者有登陆入口的,又或者这个网站提供了用户数据的这一类网站通常都是HTTPS的,这类的网站非常多,比如网银,比如邮箱等,又比如拼客学院官网:

HTTP协议是如何实现“秘密交互”的?

看地址栏当中,明显与HTTP协议交互的网站不一样,地址栏位置没有标识不安全,而且在URL的最前面标识了HTTPS://协议,这就是典型的HTTPS。我刚才说只要有登陆入口或者需要登陆网站基本都是用HTTPS,请注意,这不是绝对,你去看看上面4399小游戏那个网站,也是可以登陆的,这个网站可没有使用HTTPS协议哦。

上面介绍了两个协议,那这两个协议仅仅只是URL不一样这么简单吗?答案肯定不是的,我刚才有提到登陆,有登陆一般是HTTPS,没有则一般是HTTP。既然关系到登陆,那就一定跟用户数据有关系,那就需要有安全的保证,从上图HTTP协议的URL中也看到不安全提示,意思也就是没有安全的保证,用户的数据有可能会被窃取,因此,HTTPS是安全的,HTTP则是不安全的。

它们的安全性主要体现在你的电脑(客户端)与目标网站服务器之间,当你去访问网站时,你的登陆信息,你的个人信息是被加密传送的,如果在传送数据中间,有黑客获取了你的数据也不担心,黑客一般无法破解你的信息,这个过程是安全的。而HTTP则不同了,黑客可以不费任何力气地得到你的信息,看下图:

HTTP协议是如何实现“秘密交互”的?

从上图看,黑客在网络中窃取了用户与Web服务器交互的数据,但拿到的信息只是乱码,并不能正常显示,也没办法破解。因此即使用户发送的是用户名密码这样的重要信息也不怕被窃取。

HTTP协议是如何实现“秘密交互”的?

从上图来看,使用HTTP协议来进行传递用户名密码,黑客在网络中获取了交互信息,可以轻松地查看到用户发送的用户名信息,这是一个非常危险的动作,如果你发送的是银行卡账号密码的话后果将会很严重……

从上面两张图的对比不难得出结论,HTTPS是加密的,而HTTP是没有加密的,因此黑客能够直接查看到用户名密码。在实际生活中我们常用的网站基本都是基于HTTPS协议的,大家也不必感到惊慌,日常使用其实还是很安全的。

关于加密的问题

01 非对称密钥算法

在HTTPS协议中使用RSA加密算法,这种加密算法是一种非对称加密算法,广泛用于网页加密。

非对称密钥算法会产生公钥和私钥两种密钥,一种用于加密,另一种就用于解密,而且两个密钥是完全不一样完全不可相互推导。公钥是发送给所有人的,而私钥是拥有者自己妥善保管的。

它的工作过程是:用户要把重要的东西加密会用接收者的公钥对数据进行加密,然后将加密后的文件发送到接收端,接收者接收到加密的文件后用自己的私钥对其进行解密就能够得到明文。如下图所示:

HTTP协议是如何实现“秘密交互”的?

明文使用接收方的公钥对其加密就得到密文了,这个过程就是加密的过程,密文在互联网中传递时不用担心被窃取的问题。当密文被传递到接收端,接收方再使用自己的私钥对其解密,这个过程就是解密的过程。

这个方法看似很好用,但实际上并不是这样的,因为像这样的非对称密钥算法只有够加密很小小的数据,超过几百KB的文件都无法加密或加密需要非常长的时间,实际的应用中数据传递可不止区区几百KB这么点,因此非对称密钥算法只能加密密钥等数据非常小的东西,没错,你没看错,就是加密密钥。那实际应用中这么大的数据又是怎么加密的?下面就再来讲讲对称密钥算法。

02 对称密钥算法

对称密钥算法常见的有AES,DES,3DES等,对称密钥算法与非对称密钥算法不同的是对数据进行加密和解密时用同一个密码,这个密码是同计算机随机生成的。对称密钥算法的特点是加密速度很快且加密后的密文数据与原始的明文数据大小相差不会很大,比如加密1K的数据,加密后的密文可能只有1.1K,因此这种加密算法比较适合加密比较大的文件。

客户端在发送数据到服务器端的时候会使用AES等对称密钥算法对需要加密的数据进行加密,加密会产生一个对称密钥的密码,然后再将这个密码用RSA非对称密钥来加密密钥。

为什么要用RSA来加密密钥?很显然嘛,我把数据用一把钥匙加密了,对方想要打开数据就必须要用我这把钥匙才能打开,那我该怎么样把这把钥匙安全的送到对方手上?就是通过RSA来传递。

HTTPS是如何完整地并且安全地传递用户数据的

下面就来看看它的加密与解密过程:

1.用户发送请求到服务器,服务器接收到以后回应相应的请求信息(在这个回应信息里面服务器会带上证书和一个服务器的公钥)。

2.客户端拿到证书后会先判断一下这个证书的有效性(其实证书的作用是服务器向你表明身份,让你知道现在回应你WEB信息的正是你要访问的那个服务器)。

3.客户端将要发送的数据先用对称密钥算法对其先加密,产生的密文先放一边。

4.拿刚才加密产生的密文用刚才服务器发送过来的公钥对这个密文加密,产生加密后的密码。

5.把这个加过密的密码与刚才使用对称密钥算法加密后的密文一起打包发给服务器。

6.服务器接收到这些东西以后首先拿出加过密的密码,用自己的私钥对其解密,得出密文,再对这个密文使用对称密钥算法进行解密,这样,服务器就收到了客户端发送的数据了。

过程如下图: