Shyno
Don't be shy,no problem!

当DNS工作完之后得到了一个网址

https//192.168.1.255/index.html

 这个并不符合标准的请求路径.接下来就是https的功能了.讲https前先讲讲它的前身http协议

 

HTTP协议

http协议是超文本传输协议,是一个基于请求与响应,无状态的,应用层的协议,常基于TCP/IP协议传输数据,互联网上应用最为广泛的一种网络协议,所有的WWW文件都必须遵守这个标准。设计HTTP的初衷是为了提供一种发布和接收HTML页面的方法。

说得通俗一点就是,请求和响应的规范.和其他的协议和规范一样,其目的都是为了统一规范,方便处理.

 

协议内容

1.规定了url规范,默认端口:80.

   也就是http的请求将会默认给加上一个80端口,最终我们得到如下网址

https//192.168.1.255:80/index.html

  这就是一个完整合规的请求路径了

 

2.规定了请求报文格式和响应报文格式

  以火狐浏览器请求这个页面为例,因为现在浏览基本都把请求和响应美化了,所以我们要选中边上的原始去查看原始内容

 

 1): 请求报文

包含起始行,请求头和请求主体

起始行

    请求方式:GET,

    请求url:/api/msg,

    协议类型及版本:HTTP/2

请求方式通常是8种,其中GET和POST是最常用的.而其中POST有请求主体,包含了需要传递的参数内容,而GET则没有,

请求头

   请求头是一系列的键值对,具体的内容通常也可以在网上查的.这里不讨论.

请求体

   根据需求各有不同,可在浏览器中查看

 

2):响应报文

响应报文跟请求报文的总体结构是相似的,只是在细节上不太一样

 起始行

     协议类型及版本

     状态码

     状态码描述

响应头

    对响应的描述,主要是一些键值对.

响应体

    响应的主要内容,在浏览器中可直接看到.前端需要的数据主要就放在这里.

3.交互过程

   请求->响应

通过http协议,我们能完成完整的前后端交互,并且在大家都遵守相关协议的情况下.我们可以在任何平台和宿主环境中完成前后端交互.

 

 

 

HTTPS协议

上面在描述http的时候,我特意说了"可以在浏览器看到这一点".也就是说http协议传输是明文的,所以一下敏感数据就不太适合用http协议,于是https就应运而生.它主要是http协议+ssl加密协议.所以简称https.

它继承了http的大体框架,唯一不同的就是多了个s(不是).而这个s就决定它让交互过程多了加密通话的过程.也就是说原来是直接给,现在多了些验证过程.同时,它的默认端口号也不是80,而是443.

我们一步步去了解加密

1.密钥和密文

     密文是一段加密过的文字,而密钥可以是加密也可以是解密的工具.

2.公钥和私钥

    公钥是公共密钥,也就是大家都用这同一个密钥.私钥是私有的密钥,也就是说每个人都可以有自己的私钥,只有自己知道.

3.对称加密和非对称加密

    对称加密是大家都用公钥,加密和解密都用相同的.这样只有统一一下便可以比较方便地实现加密和解密.

    非对称加密是加密用公钥,而解密用私钥.也就是说,我给大家一个公钥,你要加密好给我,我再用私钥去解密.因为公钥和私钥是可以相互加解密的.

4.混合加密

   就是结合对称加密和非对称加密两种方案的.

5.风险

    在讨论SSL加密方式之前,我们先讨论一下以上普通加密的风险.

    风险主要源自公钥,比如服务器的公钥a,和私钥a.正常情况下是服务器把公钥a传给客户端,客户端用公钥a加密,然后传给服务器,就是别人拿到密文,因为没有私钥a解密,也解析不出来东西.但是,假如.有个第三者,有公钥b,私钥b.在服务器把公钥a传给客户端是,它把公钥a给拦截了,然后传给了客户端公钥b,客户端用公钥b去加密,然后再发给服务器,如果这时候密文被第三者拦截后,他就可以用私钥b去解析了.成功获得内容.

6.认证

   所以,我们需要对服务器和浏览器进行认证.这个时候"自证"就不如"权威机构"靠谱.就需要引入第三方认证机构,由它来认证.认证通过了,客户端和服务器就可以放心得去交流了.

7.SSL

    SSL加密过程包含三方,客户端,服务器,认证机构.其中,服务端和认证机构的公钥和密钥都是需要参与其中的.还有一个特殊的,客户端的密钥.他是在这过程中生成,从过程来看,它参与了.从结果来看,它没完全参与.

1).认证机构自己的公钥A内置到客户端里,其实这一步就是认证客户端的过程.因为没有公钥A就不是合规的客户端,SSL验证也就进行不下去.

2).服务端先把自己的公钥B给认证机构,认证机构认证完确认是合规的服务器,接着需要把自己的认证结果传递给客户端.它会用自己的私钥a,去加密一个认证数字签名,然后
把公钥B和数字签名放在一个证书里给客户端. 3).客户端拿到了证书,用内置的公钥A去解密数字签名(防止伪造签名),发现签名合规,确定了公钥B是服务端给的.就会生成一个对称密钥C,这个密钥是后面数据交流的时候,
客户端和服务端统一的密钥. 4).客户端用公钥B把密钥C加密之后传给服务端, 5).服务端拿到密钥C的密文之后用私钥b去解密,获得密钥C. 6).服务端用密钥C加密数据传给客户端. 7).客户端用密钥C去解析加密数据.

 

 

通常情况下http请求是直接进行TCP连接的,而https则是需要先SSL,然后再TCP.这其实就是http和https的最大区别,其他比如它们的端口号不一样,需要ca认证,http无状态和https有状态啥的,都是它的延伸.

 

posted on 2021-09-18 17:07  Shyno  阅读(273)  评论(0编辑  收藏  举报