HTTPS和HTTP

HTTP使用的是tcp还是udp

虽然HTTP最初被设计成无状态的协议,似乎更加适合UDP,但是下面一些原因使TCP成为首选:HTTP使用TCP,因为当从远程服务器获得文件,网页不应该在中途丢弃,而应该按照HTTP客户端的顺序交付。

HTTP也可以使用UDP,但通常不会,如果包括网页第一部分的UDP数据包丢失了,那么它就不会被重传。当我们使用UDP协议时,需要在应用层编写一些代码来处理丢失数据包的重传。但我们并不想让web浏览器应用层来承担这项工作,让它只承担实际的渲染页面工作,这也符合解耦的设计。所以我们使用TCP。


HTTP 协议为什么要设计成无状态?

HTTP是一种无状态协议,每个请求都是独立执行,请求/响应。这样设计的重要原因是,降低架构设计复杂度,毕竟服务器一旦带上了状态,扩容、缩容、路由都会受到制约。无状态协议不要求服务器在多个请求期间保留每个用户的信息。

但,你可能会问,如果有登录要求的业务怎么办?HTTP协议提供扩展机制,Header中增加了Cookie,存储在客户端,每次请求时自动携带,采用空间换时间机制,满足上下请求关联。虽然浪费了些网络带宽,但是减少了复杂度。当然为了减轻网络负担,浏览器会限制Cookie的大小,不同浏览器的限制标准略有差异,如:Chrome 10,限制最多 180个,每个Cookie大小不能超过 4096 bytes


一次完整的HTTP请求过程

域名解析 --> 发起TCP的3次握手 --> 建立TCP连接后发起http请求 --> 服务器响应http请求,浏览器得到html代码 --> 浏览器解析html代码,并请求html代码中的资源(如js、css、图片等) --> 浏览器对页面进行渲染呈现给用户


HTTP与HTTPS有什么不同

1、HTTPS 协议需要到CA(Certficate Authority,证书颁发机构)申请证书,一般免费证书较少,因而需要一定费用。(以前的网易官网是http,而网易邮箱是https

2、HTTP是超文本传输协议,信息是明文传输,HTTPS则是具有安全性的 SSL加密传输协议

3、HTTP和HTTPS使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443

4、HTTP的连接很简单,是无状态的。HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比HTTP协议安全。(无状态的意思是其数据包的发送、传输和接收都是相互独立的。无连接的意思是指通信双方都不长久的维持对方的任何信息


https验证流程

1)客户端发起一个http请求,告诉服务器自己支持哪些hash算法。

2)服务端把自己的信息以数字证书的形式返回给客户端(证书内容有密钥公钥,网站地址,证书颁发机构,失效日期等)。证书中有一个公钥来加密信息,私钥由服务器持有。

3)验证证书的合法性
客户端收到服务器的响应后会先验证证书的合法性(证书中包含的地址与正在访问的地址是否一致,证书是否过期)。

4)生成随机密码(RSA签名)
如果验证通过,或用户接受了不受信任的证书,浏览器就会生成一个随机的对称密钥(sessionkey)并用公钥加密,让服务端用私钥解密,解密后就用这个对称密钥进行传输了,并且能够说明服务端确实是私钥的持有者。

5)生成对称加密算法
验证完服务端身份后,客户端生成一个对称加密的算法和对应密钥,以公钥加密之后发送给服务端。此时被黑客截获也没用,因为只有服务端的私钥才可以对其进行解密。之后客户端与服务端可以用这个对称加密算法来加密和解密通信内容了。


tls握手是几次?

HTTPS是先进行TCP三次握手,再进行TLSv1.2四次握手

HTTPS 中的TLS握手过程可以同时进行三次握手,这个场景是可能存在到,但是在没有说任何前提条件,而说这句话就等于耍流氓。
需要下面这两个条件同时满足才可以:
1.客户端和服务端都开启了TCP Fast Open 功能,且TLS版本是1.3;
2.客户端和服务端已经完成过一次通信;


tls四次握手过程:

一、 客户端发出请求(ClientHello)
首先,客户端(通常是浏览器)先向服务器发出加密通信的请求,这被叫做 ClientHello 请求。
在这一步,客户端主要向服务器提供以下信息:
支持的协议版本,比如 TLS 1.0 版
一个客户端生成的随机数(Client random),稍后用于生成 “对话密钥”(Session Key)
支持的加密方法,比如 RSA 公钥加密
支持的压缩方法

二、服务器回应
服务器收到客户端请求后,向客户端发出回应,这叫做 SeverHello
这一步服务器主要干三件事:
确认使用的加密通信协议版本,比如 TLS 1.0 版本。如果浏览器与服务器支持的版本不一致,服务器关闭加密通信
确认使用的加密方法(客户端所支持的),比如 RSA 公钥加密
将服务器证书、加密公钥、以及一个随机数(Server random)发送给客户端浏览器

三、客户端回应
客户端收到服务器回应以后,首先验证服务器证书,验证手段就是执行如下三种检查:

检查证书是否已经过期
检查证书中的域名与实际域名是否一致
检查证书是否是可信机构颁布的
如果,上述过程中有任何一个环节发现问题,那么浏览器就会向访问者显示一个警告,由其选择是否还要继续通信。如果证书受信任,或者是用户接受了不受信的证书,浏览器会生成一串新的随机数(Premaster secret ),并用证书中提供的公钥加密。

此时,浏览器会根据前三次握手中的三个随机数:
Client random
Server random
Premaster secret
通过一定的算法来生成 “会话密钥” (Session Key),这个会话密钥就是接下来双方进行对称加密解密使用的密钥!

四、服务器的最后回应
服务器收到客户端的第三个随机数( Premaster secret) 之后,使用同样的算法计算出 “会话密钥” (Session Key)。
至此,整个握手阶段全部结束。接下来,客户端与服务器进入加密通信,就完全是使用普通的 HTTP 协议,只不过用 “会话密钥” 加密内容。(非对称加密解密将不再使用,接下来完全由对称加密接手了,因为密钥已经安全的传送给了通信的双方)


什么时候用对称加密,什么时候非对称加密?
对称加密:
在这里插入图片描述

非对称加密

在这里插入图片描述

对称与非对称加密混合使用过程

服务器用明文的方式给客户端发送自己的公钥,客户端收到公钥之后,会生成一把密钥(对称加密用的),然后用服务器的公钥对这把密钥进行加密,之后再把密钥传输给服务器,服务器收到之后进行解密,最后服务器就可以安全着得到这把密钥了,而客户端也有同样一把密钥,他们就可以进行对称加密了。

为什么混合使用?

单纯的非对称加密太慢了加速


https四次握手在tcp握手之前还是之后?

HTTPS是先进行TCP三次握手,再进行TLS四次握手


HTTPS会慢吗?( https怎么提速 )
提示:tls几次握手

HTTPS太慢?
第一次建立连接会慢大约10%,一旦有效的HTTPS连接建立起来,两种协议几乎没有区别。

HTTPS比HTTP可能更快一些?
这会发生在一些大公司的内部局域网,因为通常情况下,公司的网关会截取并分析所有的网络通信。但是,当它遇到HTTPS连接时,它就只能直接放行,因为HTTPS无法被解读。正是因为少了这个解读的过程,所以HTTPS变得比较快。

TLS加速
TLS加速(以前称为SSL加速)是一种将用于传输层安全性(TLS)及其前身安全套接字层(SSL)的处理器密集型公钥加密卸载到硬件加速器的方法。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值