HTTPS的引出和HTTPS的执行过程
1、HTTP:无状态的超文本传输协议
1.1、http在建立连接的过程中,会进行一些状态码的呈现。
比如访问百度的界面,当访问一个http请求的时候就会有状态码。
1.2、有请求头和响应头,如果有相关的参数的话,还会有queryString。
Https协议的端口只能用443端口。
在上面的基本信息中比较重要的:Remote Address:远程的地址。Referror Policy:代表策略。
1.3、当点击view source的时候会变成下面的样式:它用的是http/1.1的一种协议
1.4、而且当访问http://www.baidu.com的时候:请求的地址是http://www.baidu.com,但是在响应的时候进行了重定向。以前是http的协议来访问百度的,现在全是https协议的方式来访问百度了。
Remote Address:远程的ip地址。https的开发的端口号是443。如果通过这个远程的ip地址访问的话,如下:
不是请求失败了,而是在地址栏上这样通过ip地址访问做了相应的处理的。
2、在响应的头里面:Cache-Control:private,代表私有的缓存控制。
Connection:Keep-Alive,代表连接的状态。Content-Encoding:代表内容的一种加密方式。Content-Type:响应的类型。Date:响应的时间,Expires:过期时间。Server:代表服务器。Set-Cookie:添加的cookie。
百度的顶级域就是baidu.com
比如在百度地图的地址map.baidu.com是二级域名。
www.baidu.com是顶级的域名,其下的是二级域名。提供了这样的一个能够实现cookie跨域的一种域名处理。
比如:百度的话有很多的服务器,使用nginx的方式来允许实现跨域的。因为cookie跨域本来是不安全的。为了使子域名能够访问的话,这里采用domain的顶级域名来操作的。
2.1、Transfer-Encoding:chunked,代表传输的加密
X-Ua-Compatible:浏览器引擎的说明。
Cookie:代表客户端在服务端的一种会话状态:
Host:代表主机名称,www.baidu.com。在nginx中使用代理模式将ip地址和端口号替换成了这样的域名。nginx一般来做代理服务器的,不是用来做web服务器的,如果想做的话,需要配置但是比较麻烦。但是去做udp的和https的还是比较方便的。
User-Agent:代表用户引擎,可以看到内核的信息。
在http请求的过程中,请求头和响应头就称之为报文,和http中的tcp是类似的。
3、看请求是否成功的几个标志:
3.1、请求方式:Request Method
get的请求和post的请求是不一样的
①、只要url能在地址栏上显示的是get请求。
②、post请求只要发送的数据在地址栏上不会出现的话就是post请求,在post请求中有action属性。
③、在get请求中有queryString的参数进行传输,而在post请求中的头信息有form-data的属性。
post的请求:
在form-data里面:
mem_pass:on代表勾选了密码。
rsakey:非对称加密的签名值,做成摘要的签名。
所以说知道password加密之后的密码也没关系。因为要做签名,只要在百度服务器上认证签名通过的话最后才能够真正的把密码给解析出来,进而和数据库做对比。所以说这里做了安全的验证的。
3.2、Status Code:状态码和状态信息。
1XX:提示信息
2XX:成功信息
3XX:重定向问题
4XX:客户端错误信息
5XX:服务端错误信息
4、HTTPS的通信和HTTP的通信是一个道理。
4.1、如果用http的协议去请求的话,密码是明文的,即使用了对称加密算法的话,也是不安全的。因为在传输过程中会被篡改
4.2、那么https的协议如何保证数据传输的安全呢?
举个例子:
第一波通信:比如A端给B端发送一个hello的信息,所有人都会听到,相当于这个就是明文,很不安全
第二波通信:加密内容通信,只有A和B知道加密的内容,但是使用的是同一个密钥A来进行加减密,这种是安全的。
第三波通信(对称加密):B,C,D是三个客户端,A是服务端。A是密钥。通过密钥A来在B,C,D的客户端来解密,但是在网络中传输的话加密就会被截取。就相当于是个公开的密钥了,所以说这种加不加密是没有关系了。在非对称加密算法中,就存在了公钥和私钥的概念,私钥自己握在手里,而公钥是给每一个客户端。但是公钥还是共享的,所以说还是不安全的。私钥用来解密公钥加密后的数据的。公钥是用来进行加密传输内容的。
这里说下钓鱼网站的形成:比如在上面的图中,A发出了一个请求,然后给A返回的时候,然后被截取到了A返回的数据包,并且把A端发送给B端的公钥给得到并保存下来,然后给换一个虚假的公钥为B,然后把公钥B发给客户端B,这时客户端B的公钥就变成了B。客户端B自认为这个公钥B是公钥A然后给这个数据进行加密数据然后发给A的过程中,又被截取到,然后通过公钥来进行解密,解密以后把数据更改以后在通过A的这样的一个公钥进行加密再返回给A。
上面的过程是不管怎么加密,就是内容协商上没有加密,这也就是为什么出现HTTPS协议的原因所在。
5、HTTPS的传输流程:只要是HTTPS访问的前面会带上一把锁
5.1、HTTPS协议的传输:不仅有公钥和私钥了,还有证书的颁发,证书里面是hash和签名来证明证书的合法性的。证书里面包含了,发送到客户端的签名信息。
签名:hash算法加密成一个摘要:数字签名(作用是在传输过程中防止数据被更改)。
参考博客:www.sohu.com/a/198919210_100027651
SSL:安全套字节协议
TLS:安全性传输协议
TLS是SSL的升级
在浏览器中就有相应的证书:比如你要访问一个网站,需要安装相应的证书。
证书里面有相应的信息:
这里的公钥是证书颁发给对端的公钥。
整个证书是安全的。
比如在12306,金融界的,支付宝,就有相应的数字证书。
上面的图的步骤如下:
- 客户端发起一个https请求
a) 客户端支持的加密方式
b) 客户端生成的随机数(第一个随机数) - 服务端收到请求后,拿到随机数,返回
a) 证书(颁发机构(CA)、证书内容本身的数字签名(使用第三方机构的私钥加密)、证书持有者的公钥、证书签名用到的hash算法)
b) 生成一个随机数,返回给客户端(第二个随机数) - 客户端拿到证书以后做验证
a) 根据颁发机构找到本地的证书
b) 根据CA得到根证书的公钥,通过公钥对数字签名解密,得到证书的内容摘要 A
c) 用证书提供的算法对证书内容进行摘要,得到摘要 B
d) 通过A和B的对比,也就是验证数字签名 - 验证通过以后,生成一个随机数(第三个随机数),通过证书内的公钥对这个随机数加密,发送给服务器端
- (随机数1+2+3)通过对称加密得到一个密钥。(会话密钥)
- 通过会话密钥对内容进行对称加密传输
参照:
①:https://www.cnblogs.com/zhangshitong/p/6478721.html
②:http://www.360doc.com/content/13/0809/14/1073512_30584814.shtml