当前位置:   article > 正文

Http(s)网络请求流程,https工作原理,单向(双向)加密,网络安全,HTTP1.0/1.1/2.0_http双向加密

http双向加密

CA(证书颁布机构)申请https证书的。免费的阿里云盾证书(https证书)?
   HTTP + 加密 + 认证 + 完整性保护 = HTTPS。一般来说,HTTPS 主要用途有三个:一是通过证书等信息确认网站的真实性;二是建立加密的信息通道;三是数据内容的完整性。 
   HTTPS采用共享秘钥加密 和 公开秘钥加密两者并用的混合加密机制. 若密钥能够实现安全交换, 那么有可能会考虑仅适用公开密钥加密来通信. 但是公开密钥加密和共享密钥加密相比, 其处理速度要慢.
   HTTPS协议的主要作用可以分为两种:一种是建立一个信息安全通道,来保证数据传输的安全;另一种就是确认网站的真实性。

> HTTP协议发展的趋势主要是两个方向:效率和安全
  HTTP协议发展至今已经有二十多年的历史,整个发展的趋势主要是两个方向:效率和安全。效率方面,从HTTP1.0的一次请求一个连接,到HTTP1.1的连接复用,到SPDY/HTTP2的多路复用,到QUIC/HTTP3的基于UDP传输,在效率方面越来越高效。安全方面,从HTTP的明文,到HTTP2强制使用TLSv1.2,到QUIC/HTTP3强制使用TLSv1.3,越来越注重数据传输的安全性。总而言之,HTTP协议的发展对用户是友好的,但是对开发者而言却不那么友善。

-- 关于双向认证的原理:
  首先,双向认证需要Server支持,Client必须内置一套公钥证书 + 私钥。在SSL/TLS握手过程中,Server端会向Client端请求证书,Client端必须将内置的公钥证书发给Server,Server验证公钥证书的真实性。
  注意,这里的内置的公钥证书有区别于前面第5点的公钥证书固定,双向认证内置的公钥证书+私钥是额外的一套,不同于证书固定内置的公钥证书。
  如果一个Client既使用证书固定,又使用双向认证,那么Client端应该内置一套公钥证书 + 一套公钥证书和私钥。第一套与Server端的公钥证书相同,用于Client端系统校验与Server发来的证书是否相同,即证书固定;第二套SSL/TLS握手时公钥证书发给Server端,Server端进行签名校验,即双向认证。
  用于双向认证的公钥证书和私钥代表了Client端身份,所以其是隐秘的,一般都是用.p12或者.bks文件+密钥进行存放。由于是内置在Client中,存储的密钥一般也是写死在Client代码中,有些App为了防反编译会将密钥写到so库中,比如S匿名社交App,但是只要存在于Client端中都是有办法提取出来的。

> 正常一条网络请求需要经过的流程是这样:
1、DNS 解析,请求DNS服务器,获取域名对应的 IP 地址。
2、与服务端建立连接,包括 tcp 三次握手,安全协议同步流程。
3、连接建立完成,发送和接收数据,解码数据。
  DNS (Domain Name System 的缩写)的作用非常简单,就是根据域名查出IP地址。你可以把它想象成一本巨大的电话本。
  其他DNS工具:dig dig math.stackexchange.com, host 命令 host github.com , nslookup 命令  nslookup > facebook.github.io,whois 命令 whois github.com

-- HTTPS 是为了保证安全的,在发送 HTTPS 请求之前,首先要进行 SSL/TLS  握手,握手的大致流程如下:
 客户端发起握手请求,携带随机数、支持算法列表等参数。
 服务端根据请求,选择合适的算法,下发公钥证书和随机数。
 客户端对服务端证书,进行校验,并发送随机数信息,该信息使用公钥加密。
 服务端通过私钥获取随机数信息。
 双方根据以上交互的信息,生成 Session Ticket,用作该连接后续数据传输的加密密钥。

-- Http和Https
 SSL原理及运行过程:
  SSL/TLS协议基本思路是采用公钥加密法(最有名的是RSA加密算法)。大概流程是,客户端向服务器索要公钥,然后用公钥加密信息,服务器收到密文,用自己的私钥解密。
  为了防止公钥被篡改,把公钥放在数字证书中,证书可信则公钥可信。公钥加密计算量很大,为了提高效率,服务端和客户端都生成对话秘钥,用它加密信息,而对话秘钥是对称加密,速度非常快。而公钥用来机密对话秘钥。

 SSL证书是一个二进制文件,里面包含经过认证的网站公钥和一些元数据,需要从经销商购买。
证书有很多类型,按认证级别分类:
 域名认证(DV=Domain Validation):最低级别的认证,可以确认申请人拥有这个域名
 公司认证(OV=Organization Validation):确认域名所有人是哪家公司,证书里面包含公司的信息
 扩展认证(EV=Extended Validation):最高级别认证,浏览器地址栏会显示公司名称。

 Http和Https的区别如下:
  https协议需要到CA申请证书,大多数情况下需要一定费用
  Http是超文本传输协议,信息采用明文传输,Https则是具有安全性SSL加密传输协议
  Http和Https端口号不一样,Http是80端口,Https是443端口
  Http连接是无状态的,而Https采用Http+SSL构建可进行加密传输、身份认证的网络协议,更安全。
  Http协议建立连接的过程比Https协议快。因为Https除了Tcp三次握手,还要经过SSL握手。连接建立之后数据传输速度,二者无明显区别。

> Http1.0,Http1.1,Http2.0的区别,HTTP1.0/1.1/2.0:
 HTTP 1.0需要使用keep-alive参数来告知服务器端要建立一个长连接,而HTTP1.1默认支持长连接。
 HTTP 1.1支持只发送header信息(不带任何body信息),如果服务器认为客户端有权限请求服务器,则返回100,否则返回401。客户端如果接受到100,才开始把请求body发送到服务器。
 HTTP2.0使用了多路复用的技术,做到同一个连接并发处理多个请求,而且并发请求的数量比HTTP1.1大了好几个数量级。HTTP1.1不支持header数据的压缩,HTTP2.0使用HPACK算法对header的数据进行压缩,这样数据体积小了,在网络上传输就会更快。HTTP2.0可以说是SPDY的升级版(其实原本也是基于SPDY设计的)。
 HTTP2.0 支持明文 HTTP 传输,而 SPDY 强制使用 HTTPS;HTTP2.0 消息头的压缩算法采用 HPACK,而非 SPDY 采用的 DEFLATE。HTTP/2 通过让所有数据流共用同一个连接,可以更有效地使用 TCP 连接,让高带宽也能真正的服务于 HTTP 的性能提升。当我们对支持HTTP2.0的web server请求数据的时候,服务器会顺便把一些客户端需要的资源一起推送到客户端,免得客户端再次创建连接发送请求到服务器端获取。这种方式非常合适加载静态资源。
-- Http2.0核心优势
1.采用二进制格式传输数据,而非http1.1文本格式,二进制格式在协议的解析和优化扩展上带来了跟多的优势和可能;
2.对消息头采用Hpack进行压缩传输,能够节省消息头占用的网络流量,http1.1每次请求,都会携带大量冗余的头信息,浪费了很多宽带资源。

3.异步连接多路复用;
4.Server Push,服务器端能够更快的把资源推送到客户端。
5.保持与HTTP 1.1语义的向后兼容性也是该版本的一个关键.

HTTP/1.0/1.1/2.0的区别以及http和https的区别- https://blog.csdn.net/qq_39207948/article/details/80969968
HTTP1.0、HTTP1.1 和 HTTP2.0 的区别- https://www.cnblogs.com/heluan/p/8620312.html

> https的工作原理
-- https是在http的基础上多了一次协议ssl,该协议用来给传输的内容进行加密,https加密流程:
1,客户端将SSL 协议的版本号、加密算法的种类,产生的随机数A等信息传给服务器
2,服务器选择其中的一种组合作为加密方式,同时将自己的证书、公钥、另外一个随机数B一起传给客户端
3,客户端验证客户端返回的信息(包括证书,签名,域名等),验证成功,则生成对称加密密钥S,用公钥加密后返回给服务器
4,服务器用私钥将这段密钥解密。得到对称密钥S,并用此密钥加密一段握手消息返回给客户端
5,客户端收到握手消息,用对称密钥解密,验证成功,则握手成功。

-- HTTPS是如何保证数据的安全呢?(对称加密和非对称加密)
 1.客户端向服务器端发起SSL连接请求;(在此过程中依然存在数据被中间方盗取的可能,下面将会说明如何保证此过程的安全)
 2 服务器把公钥发送给客户端,并且服务器端保存着唯一的私钥;(非对称加密
 3.客户端用公钥对双方通信的对称秘钥进行非对称加密,并发送给服务器端;(对称秘钥分发
 4.服务器利用自己唯一的私钥对客户端发来的对称秘钥进行解密,在此过程中,中间方无法对其解密(即使是客户端也无法解密,因为只有服务器端拥有唯一的私钥),这样保证了对称秘钥在收发过程中的安全,此时,服务器端和客户端拥有了一套完全相同的对称秘钥。(对称秘钥分发
 5.进行数据传输,服务器和客户端双方用公有的相同的对称秘钥对数据进行加密解密,可以保证在数据收发过程中的安全,即是第三方获得数据包,也无法对其进行加密,解密和篡改。
 总结:Https通信过程中握手协议中使用非对称算法对对称秘钥进行分发;然后通过对称算法对通信数据进行加密传输。

-- HTTPS的工作原理:
HTTPS在传输数据之前需要客户端(浏览器)与服务端(网站)之间进行一次握手,在握手过程中将确立双方加密传输数据的密码信息。TLS/SSL协议不仅仅是一套加密传输的协议,更是一件经过艺术家精心设计的艺术品,TLS/SSL中使用了非对称加密,对称加密以及HASH算法。握手过程的简单描述如下:
 1.浏览器将自己支持的一套加密规则发送给网站。
 2.网站从中选出一组加密算法与HASH算法,并将自己的身份信息以证书的形式发回给浏览器。证书里面包含了网站地址,加密公钥,以及证书的颁发机构等信息。
 3.获得网站证书之后浏览器要做以下工作:
  a) 验证证书的合法性(颁发证书的机构是否合法,证书中包含的网站地址是否与正在访问的地址一致等),如果证书受信任,则浏览器栏里面会显示一个小锁头,否则会给出证书不受信的提示。
  b) 如果证书受信任,或者是用户接受了不受信的证书,浏览器会生成一串随机数的密码,并用证书中提供的公钥加密。
  c) 使用约定好的HASH计算握手消息,并使用生成的随机数对消息进行加密,最后将之前生成的所有信息发送给网站。
 4.网站接收浏览器发来的数据之后要做以下的操作:
  a) 使用自己的私钥将信息解密取出密码,使用密码解密浏览器发来的握手消息,并验证HASH是否与浏览器发来的一致。
  b) 使用密码加密一段握手消息,发送给浏览器。
 5.浏览器解密并计算握手消息的HASH,如果与服务端发来的HASH一致,此时握手过程结束,之后所有的通信数据将由之前浏览器生成的随机密码并利用对称加密算法进行加密。
   这里浏览器与网站互相发送加密的握手消息并验证,目的是为了保证双方都获得了一致的密码,并且可以正常的加密解密数据,为后续真正数据的传输做一次测试。另外,HTTPS一般使用的加密与HASH算法如下:
  非对称加密算法:RSA,DSA/DSS;
  对称加密算法:AES,RC4,3DES;
  HASH算法:MD5,SHA1,SHA256;

  其中非对称加密算法用于在握手过程中加密生成的密码,对称加密算法用于对真正传输的数据进行加密,而HASH算法用于验证数据的完整性。由于浏览器生成的密码是整个数据加密的关键,因此在传输的时候使用了非对称加密算法对其加密。非对称加密算法会生成公钥和私钥,公钥只能用于加密数据,因此可以随意传输,而网站的私钥用于对数据进行解密,所以网站都会非常小心的保管自己的私钥,防止泄漏。
  TLS握手过程中如果有任何错误,都会使加密连接断开,从而阻止了隐私信息的传输。正是由于HTTPS非常的安全,攻击者无法从中找到下手的地方,于是更多的是采用了假证书的手法来欺骗客户端,从而获取明文的信息,但是这些手段都可以被识别出来.

> Http/Https单向认证与双向认证
-- 单向加密和双向加密:
 1.单向加密:服务端有一套(两份)证书:含公钥和私钥的jks文件(此文件自己保留),和只含公钥的ser文件,其中ser文件是要给客户端的
 2.双向加密:除了具有单向加密的特性(服务端验证客户端),客户端也有一套(两份)证书来验证服务端消息,对于android来说,分为bks文件(含公钥和私钥,自己保留)、ser文件(含公钥给服务端)
-- Android HTTPS SSL双向验证- http://blog.csdn.net/u012874222/article/details/50339259
  一般客户端验证SSL有两种方式,一种是通过SSLSocketFactory方式创建,需要设置域名及端口号(适应于HttpClient请求方式),一种是通过SSLContext方式创建(适用于HttpsURLConnection请求方式).
  HttpClient,Android官方在Android 2.3以后就不建议用了,并且在Android 5.0以后废弃了HttpClient,在Android 6.0更是删除了HttpClient。
-- Https TLS/SSL中使用了非对称加密,对称加密以及HASH算法。

https工作原理及CA证书部署- http://blog.csdn.net/think_program/article/details/60780843
Android安全开发之正确使用Https(内含OkHttp、HttpUrlConnection配置https方式)- http://blog.csdn.net/u011084603/article/details/73873677
Android中https请求的单向认证和双向认证- http://blog.csdn.net/u011394071/article/details/52880062

> HTTP请求与工作原理
-- HTTP请求格式主要有四部分组成,分别是:请求行、请求头、空行、消息体,每部分内容占一行
一次完整的http请求处理过程:
 1、建立连接:接收或拒绝连接请求
 2、接收请求:接收客户端请求报文中对某资源的一次请求的过程
 3、处理请求:服务器对请求报文进行解析,并获取请求的资源及请求方法等相关信息,根据方法,资源,首部和可选的主体部分对请求进行处理
    元数据:请求报文首部
    <method> <URL> <VERSION>
    HEADERS格式name:value
    <request body>
    示例:
    Host: www.chuyuni.cn   请求的主机名称
    Server: Apache/2.4.7
HTTP常用请求方式,Method GET、POST、HEAD、PUT、DELETE、TRACE、OPTIONS

 4、访问资源:服务器获取请求报文中请求的资源web服务器,即存放了web资源的服务器,负责向请求者提供对方请求的静态资源,或动态运行后生成的资源
        资源放置于本地文件系统特定的路径:DocRoot
        DocRoot → /var/www/html
        /var/www/html/images/logo.jpg
        http://www.magedu.com/images/logo.jpg
    web服务器资源路径映射方式:
    (a) docroot        (b) alias
    (c) 虚拟主机docroot(d) 用户家目录docroot

 5、构建响应报文:一旦Web服务器识别除了资源,就执行请求方法中描述的动作,并返回响应报文。响应报文中包含有响应状态码、响应首部,如果生成了响应主体的话,还包括响应主体
    1)响应实体:如果事务处理产生了响应主体,就将内容放在响应报文中回送过去。响应报文中通常包括:描述了响应主体MIME类型的Content-Type首部描述了响应主体长度的Content-Length实际报文的主体内容
    2)URL重定向:web服务构建的响应并非客户端请求的资源,而是资源另外一个访问路径
    永久重定向:http://www.360buy.com
    临时重定向:http://www.taobao.com
    3)MIME类型:Web服务器要负责确定响应主体的MIME类型。多种配置服务器的方法可将MIME类型与资源管理起来魔法分类:Apache web服务器可以扫描每个资源的内容,并将其与一个已知模式表(被称为魔法文件)进行匹配,以决定每个文件的MIME类型。这样做可能比较慢,但很方便,尤其是文件没有标准扩展名时显式分类:可以对Web服务器进行配置,使其不考虑文件的扩展名或内容,强制特定文件或目录内容拥有某个MIME类型类型协商:有些Web服务器经过配置,可以以多种文档格式来存储资源。在这种情况下,可以配置Web服务器,使其可以通过与用户的协商来决定使用哪种格式(及相关的MIME类型)"最好"

 6、发送响应报文:Web服务器通过连接发送数据时也会面临与接收数据一样的问题。服务器可能有很多条到各个客户端的连接,有些是空闲的,有些在向服务器发送数据,还有一些在向客户端回送响应数据。服务器要记录连接的状态,还要特别注意对持久连接的处理。对非持久连接而言,服务器应该在发送了整条报文之后,关闭自己这一端的连接。对持久连接来说,连接可能仍保持打开状态,在这种情况下,服务器要正确地计算Content-Length首部,不然客户端就无法知道响应什么时候结束了
 7、记录日志:最后,当事务结束时,Web服务器会在日志文件中添加一个条目,来描述已执行的事务

-- Web访问响应模型(Web I/O)
 1.单进程I/O模型:启动一个进程处理用户请求,而且一次只处理一个,多个请求被串行响应
 2.多进程I/O模型:并行启动多个进程,每个进程响应一个连接请求
 3.复用I/O结构:启动一个进程,同时响应N个连接请求实现方法:多线程模型和事件驱动多线程模型:一个进程生成N个线程,每线程响应一个连接请求事件驱动:一个进程处理N个请求
 4.复用的多进程I/O模型:启动M个进程,每个进程响应N个连接请求,同时接收M*N个请求 

-- HTTP通信机制是在一次完整的HTTP通信过程中,Web浏览器与Web服务器之间将完成下列7个步骤: 
  1. 建立TCP连接
在HTTP工作开始之前,Web浏览器首先要通过网络与Web服务器建立连接,该连接是通过TCP来完成的,该协议与IP协议共同构建Internet,即著名的TCP/IP协议族,因此Internet又被称作是TCP/IP网络。HTTP是比TCP更高层次的应用层协议,根据规则,只有低层协议建立之后才能,才能进行更层协议的连接,因此,首先要建立TCP连接,一般TCP连接的端口号是80。
  2. Web浏览器向Web服务器发送请求命令 
一旦建立了TCP连接,Web浏览器就会向Web服务器发送请求命令。例如:GET/sample/hello.jsp HTTP/1.1。
  3. Web浏览器发送请求头信息 
浏览器发送其请求命令之后,还要以头信息的形式向Web服务器发送一些别的信息,之后浏览器发送了一空白行来通知服务器,它已经结束了该头信息的发送。 
  4.Web服务器应答 
客户机向服务器发出请求后,服务器会客户机回送应答, HTTP/1.1 200 OK ,应答的第一部分是协议的版本号和应答状态码。
  5. Web服务器发送应答头信息 
正如客户端会随同请求发送关于自身的信息一样,服务器也会随同应答向用户发送关于它自己的数据及被请求的文档。 
  6. Web服务器向浏览器发送数据 
Web服务器向浏览器发送头信息后,它会发送一个空白行来表示头信息的发送到此为结束,接着,它就以Content-Type应答头信息所描述的格式发送用户所请求的实际数据。
  7. Web服务器关闭TCP连接 
一般情况下,一旦Web服务器向浏览器发送了请求数据,它就要关闭TCP连接,然后如果浏览器或者服务器在其头信息加入了这行代码:Connection:keep-alive 
TCP连接在发送后将仍然保持打开状态,于是,浏览器可以继续通过相同的连接发送请求。保持连接节省了为每个请求建立新连接所需的时间,还节约了网络带宽。
 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/497220
推荐阅读
相关标签
  

闽ICP备14008679号