分布式(基础)-HTTPS的执行过程

简介: 分布式(基础)-HTTPS的执行过程

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,金融界的,支付宝,就有相应的数字证书。


上面的图的步骤如下:

  1. 客户端发起一个https请求
    a)     客户端支持的加密方式
    b)    客户端生成的随机数(第一个随机数)
  2. 服务端收到请求后,拿到随机数,返回
    a)     证书(颁发机构(CA)、证书内容本身的数字签名(使用第三方机构的私钥加密)、证书持有者的公钥、证书签名用到的hash算法)
    b)    生成一个随机数,返回给客户端(第二个随机数)
  3. 客户端拿到证书以后做验证
    a)     根据颁发机构找到本地的证书
    b)    根据CA得到根证书的公钥,通过公钥对数字签名解密,得到证书的内容摘要 A
    c)     用证书提供的算法对证书内容进行摘要,得到摘要 B
    d)    通过A和B的对比,也就是验证数字签名
  4. 验证通过以后,生成一个随机数(第三个随机数),通过证书内的公钥对这个随机数加密,发送给服务器端
  5. (随机数1+2+3)通过对称加密得到一个密钥。(会话密钥)
  6. 通过会话密钥对内容进行对称加密传输
    参照:

  ①:https://www.cnblogs.com/zhangshitong/p/6478721.html

          ②:http://www.360doc.com/content/13/0809/14/1073512_30584814.shtml

相关文章
|
安全 数据安全/隐私保护 Java
分布式系列四: HTTP及HTTPS协议
分布式系列四: HTTP及HTTPS协议 非常全面的一篇HTTP的文章: 关于HTTP协议,一篇就够了 还有一个帮助理解HTTPS的文章: 也许,这样理解HTTPS更容易 本文的一些描述摘自这篇文章 HTTP协议 Http(HyperText Transfer Protocol 超文本传输协议)协议定义了客户端和服务器端信息传输的标准.
1872 0
|
11月前
|
存储 负载均衡 NoSQL
【赵渝强老师】Redis Cluster分布式集群
Redis Cluster是Redis的分布式存储解决方案,通过哈希槽(slot)实现数据分片,支持水平扩展,具备高可用性和负载均衡能力,适用于大规模数据场景。
763 2
|
11月前
|
存储 缓存 NoSQL
【📕分布式锁通关指南 12】源码剖析redisson如何利用Redis数据结构实现Semaphore和CountDownLatch
本文解析 Redisson 如何通过 Redis 实现分布式信号量(RSemaphore)与倒数闩(RCountDownLatch),利用 Lua 脚本与原子操作保障分布式环境下的同步控制,帮助开发者更好地理解其原理与应用。
822 6
|
12月前
|
存储 缓存 NoSQL
Redis核心数据结构与分布式锁实现详解
Redis 是高性能键值数据库,支持多种数据结构,如字符串、列表、集合、哈希、有序集合等,广泛用于缓存、消息队列和实时数据处理。本文详解其核心数据结构及分布式锁实现,帮助开发者提升系统性能与并发控制能力。
|
数据采集 存储 数据可视化
分布式爬虫框架Scrapy-Redis实战指南
本文介绍如何使用Scrapy-Redis构建分布式爬虫系统,采集携程平台上热门城市的酒店价格与评价信息。通过代理IP、Cookie和User-Agent设置规避反爬策略,实现高效数据抓取。结合价格动态趋势分析,助力酒店业优化市场策略、提升服务质量。技术架构涵盖Scrapy-Redis核心调度、代理中间件及数据解析存储,提供完整的技术路线图与代码示例。
1953 0
分布式爬虫框架Scrapy-Redis实战指南
|
10月前
|
NoSQL Java 调度
分布式锁与分布式锁使用 Redis 和 Spring Boot 进行调度锁(不带 ShedLock)
分布式锁是分布式系统中用于同步多节点访问共享资源的机制,防止并发操作带来的冲突。本文介绍了基于Spring Boot和Redis实现分布式锁的技术方案,涵盖锁的获取与释放、Redis配置、服务调度及多实例运行等内容,通过Docker Compose搭建环境,验证了锁的有效性与互斥特性。
873 0
分布式锁与分布式锁使用 Redis 和 Spring Boot 进行调度锁(不带 ShedLock)
|
NoSQL Java 中间件
【📕分布式锁通关指南 02】基于Redis实现的分布式锁
本文介绍了从单机锁到分布式锁的演变,重点探讨了使用Redis实现分布式锁的方法。分布式锁用于控制分布式系统中多个实例对共享资源的同步访问,需满足互斥性、可重入性、锁超时防死锁和锁释放正确防误删等特性。文章通过具体示例展示了如何利用Redis的`setnx`命令实现加锁,并分析了简化版分布式锁存在的问题,如锁超时和误删。为了解决这些问题,文中提出了设置锁过期时间和在解锁前验证持有锁的线程身份的优化方案。最后指出,尽管当前设计已解决部分问题,但仍存在进一步优化的空间,将在后续章节继续探讨。
1699 131
【📕分布式锁通关指南 02】基于Redis实现的分布式锁
|
10月前
|
缓存 NoSQL 关系型数据库
Redis缓存和分布式锁
Redis 是一种高性能的键值存储系统,广泛用于缓存、消息队列和内存数据库。其典型应用包括缓解关系型数据库压力,通过缓存热点数据提高查询效率,支持高并发访问。此外,Redis 还可用于实现分布式锁,解决分布式系统中的资源竞争问题。文章还探讨了缓存的更新策略、缓存穿透与雪崩的解决方案,以及 Redlock 算法等关键技术。
|
数据采集 存储 NoSQL
基于Scrapy-Redis的分布式景点数据爬取与热力图生成
基于Scrapy-Redis的分布式景点数据爬取与热力图生成
1096 67
|
NoSQL Redis
Lua脚本协助Redis分布式锁实现命令的原子性
利用Lua脚本确保Redis操作的原子性是分布式锁安全性的关键所在,可以大幅减少由于网络分区、客户端故障等导致的锁无法正确释放的情况,从而在分布式系统中保证数据操作的安全性和一致性。在将这些概念应用于生产环境前,建议深入理解Redis事务与Lua脚本的工作原理以及分布式锁的可能问题和解决方案。
419 8

热门文章

最新文章