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

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
.cn 域名,1个 12个月
简介: 分布式(基础)-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 超文本传输协议)协议定义了客户端和服务器端信息传输的标准.
1687 0
|
2月前
|
NoSQL Java Redis
太惨痛: Redis 分布式锁 5个大坑,又大又深, 如何才能 避开 ?
Redis分布式锁在高并发场景下是重要的技术手段,但其实现过程中常遇到五大深坑:**原子性问题**、**连接耗尽问题**、**锁过期问题**、**锁失效问题**以及**锁分段问题**。这些问题不仅影响系统的稳定性和性能,还可能导致数据不一致。尼恩在实际项目中总结了这些坑,并提供了详细的解决方案,包括使用Lua脚本保证原子性、设置合理的锁过期时间和使用看门狗机制、以及通过锁分段提升性能。这些经验和技巧对面试和实际开发都有很大帮助,值得深入学习和实践。
太惨痛: Redis 分布式锁 5个大坑,又大又深, 如何才能 避开 ?
|
4月前
|
NoSQL Redis
基于Redis的高可用分布式锁——RedLock
这篇文章介绍了基于Redis的高可用分布式锁RedLock的概念、工作流程、获取和释放锁的方法,以及RedLock相比单机锁在高可用性上的优势,同时指出了其在某些特殊场景下的不足,并提到了ZooKeeper作为另一种实现分布式锁的方案。
116 2
基于Redis的高可用分布式锁——RedLock
|
4月前
|
缓存 NoSQL Java
SpringBoot整合Redis、以及缓存穿透、缓存雪崩、缓存击穿的理解分布式情况下如何添加分布式锁 【续篇】
这篇文章是关于如何在SpringBoot应用中整合Redis并处理分布式场景下的缓存问题,包括缓存穿透、缓存雪崩和缓存击穿。文章详细讨论了在分布式情况下如何添加分布式锁来解决缓存击穿问题,提供了加锁和解锁的实现过程,并展示了使用JMeter进行压力测试来验证锁机制有效性的方法。
SpringBoot整合Redis、以及缓存穿透、缓存雪崩、缓存击穿的理解分布式情况下如何添加分布式锁 【续篇】
|
19天前
|
NoSQL Redis
Redis分布式锁如何实现 ?
Redis分布式锁通过SETNX指令实现,确保仅在键不存在时设置值。此机制用于控制多个线程对共享资源的访问,避免并发冲突。然而,实际应用中需解决死锁、锁超时、归一化、可重入及阻塞等问题,以确保系统的稳定性和可靠性。解决方案包括设置锁超时、引入Watch Dog机制、使用ThreadLocal绑定加解锁操作、实现计数器支持可重入锁以及采用自旋锁思想处理阻塞请求。
53 16
|
2月前
|
缓存 NoSQL Java
大数据-50 Redis 分布式锁 乐观锁 Watch SETNX Lua Redisson分布式锁 Java实现分布式锁
大数据-50 Redis 分布式锁 乐观锁 Watch SETNX Lua Redisson分布式锁 Java实现分布式锁
64 3
大数据-50 Redis 分布式锁 乐观锁 Watch SETNX Lua Redisson分布式锁 Java实现分布式锁
|
2月前
|
NoSQL Redis 数据库
计数器 分布式锁 redis实现
【10月更文挑战第5天】
51 1
|
2月前
|
NoSQL 算法 关系型数据库
Redis分布式锁
【10月更文挑战第1天】分布式锁用于在多进程环境中保护共享资源,防止并发冲突。通常借助外部系统如Redis或Zookeeper实现。通过`SETNX`命令加锁,并设置过期时间防止死锁。为避免误删他人锁,加锁时附带唯一标识,解锁前验证。面对锁提前过期的问题,可使用守护线程自动续期。在Redis集群中,需考虑主从同步延迟导致的锁丢失问题,Redlock算法可提高锁的可靠性。
80 4
|
2月前
|
存储 缓存 NoSQL
大数据-38 Redis 高并发下的分布式缓存 Redis简介 缓存场景 读写模式 旁路模式 穿透模式 缓存模式 基本概念等
大数据-38 Redis 高并发下的分布式缓存 Redis简介 缓存场景 读写模式 旁路模式 穿透模式 缓存模式 基本概念等
66 4
|
2月前
|
缓存 NoSQL Ubuntu
大数据-39 Redis 高并发分布式缓存 Ubuntu源码编译安装 云服务器 启动并测试 redis-server redis-cli
大数据-39 Redis 高并发分布式缓存 Ubuntu源码编译安装 云服务器 启动并测试 redis-server redis-cli
57 3