网络传输协议、HTTP的发展、HTTPS加密、CA证书

网络的发展

互联网传输主要这样展开: IPv4 进行路由, TCP 进行连接层面的流量控制, SSL/TLS 协议实现传输安全, DNS 进行域名解析, HTTP 进行应用数据的传输。
这几个协议的发展和改进:TCP 主要是拥塞控制算法的改进,SSL/TLS 密码套件的升级,IPv4 到 IPv6,DNS 增加了一个安全的 DNSSEC

HTTP 1.0 短连接

CS间只保持短连接:C的每次请求都需要与S建立一个TCP连接,S完成请求处理后立即断开TCP连接,不跟踪每个客户也不记录过去的请求。

这造成了一些性能上的缺陷,例如,一个包含有图像、JavaScript文件,CSS文件等内容的网页文件中并没有包含真正的图像、js、css数据内容,而只是指明了他们的URL地址。那么访问一个包含有许多图像的网页文件的整个过程包含了多次请求和响应,每次请求和响应都需要建立一个单独的连接,严重影响客户机和服务器的性能。

HTTP/1.1 串行

新增keepalive 来让HTTP重用TCP链接,实现长连接,服务器必须按照客户端请求的先后顺序依次回送相应的结果,以保证客户端能够区分出每次请求的响应内容。通过Content-Length字段来判断当前请求的数据是否已经全部接收。不允许同时存在两个并行的响应。head of line blocking:请求是串行的,导致健康的请求会被不健康的请求影响。

HTTP的Keep-Alive是HTTP1.1中默认开启的功能。通过headers设置"Connection: close "关闭
在HTTP1.0中是默认关闭的,可以通过headers设置"Connection: Keep-Alive"开启
Keep-Alive属性保持连接的时间长短是由服务端决定的,通常配置都是在几十秒左右。

此外协议头注还增加了 Language、Encoding、Type、 HOST(请求的网站域名,而不是被DNS转换过的IP信息,用来支持使用WEB服务器在同一个IP地址和端口号上配置多个虚拟WEB站点)。还有一系列与身份认证、状态管理相关的头部

新增 OPTIONS 方法,其主要用于 CORS – Cross Origin Resource Sharing 应用

缓存更完善
强制缓存 :expires Cache-Control,克服expires的限制 如果expires与max-age同时出现,则max-age有更高优先级
协商缓存:新增Etag
HTTP强缓存与协商缓存

开始支持文件断点续传。HTTP/1.0每次传送文件都是从文件头开始,即0字节处开始。

< code>RANGE:bytes=XXXX</ code>表示要求服务器从文件XXXX字节处开始传送。

HTTP 2 并行

二进制分帧
HTTP/2在 应用层(HTTP/2)和传输层(TCP or UDP)之间增加一个二进制分帧层。帧对数据进行顺序标识,收到数据之后,就可以按照序列对数据进行合并。因为有了序列,服务器就可以并行的传输数据。
多路复用 (Multiplexing):允许同时通过单一的 HTTP/2共享TCP链接的基础上并行(同时)的多重的请求-响应消息。
在 HTTP/1.1 协议中浏览器客户端在同一时间,针对同一域名下的请求有一定数量限制。超过限制数目的请求会被阻塞。(曾经解决方式是站点包含多个静态资源 CDN 域名)
而 HTTP/2 的多路复用(Multiplexing) 则允许同时通过单一的 HTTP/2 连接发起多重的请求-响应消息。
服务端推送(Server Push)
在客户端请求之前发送数据的机制。在 HTTP/2 中,服务器可以对客户端的一个请求发送多个响应
发起一个主页请求,S响应主页内容后再响应logo 以及样式表,因为它知道客户端会用到这些东西。
首部压缩(Header Compression)
HTTP/1.1并不支持 HTTP 首部压缩,为此 SPDY 和 HTTP/2 应运而生, SPDY 使用的是通用的DEFLATE 算法,而 HTTP/2 则使用了专门为首部压缩而设计的 HPACK 算法。
数据传输方式
兼容HTTP1.1的语义,数据传输方式由文本变为二进制格式编码进一步减少了网络延迟。

QUIC

quick udp internet connection“快速 UDP 互联网连接”
由 google 提出的使用 udp 进行多路并发传输的协议。

相比现在广泛应用的 http2+tcp+tls 协议有如下优势
减少了 TCP 三次握手及 TLS 握手时间。
改进的拥塞控制。(相比TCP,直接在应用程序层面实现不同的拥塞控制算法,不需要操作系统、内核支持。)
避免队头阻塞的多路复用。(TCP 协议的可靠性机制导致)
连接迁移。
前向冗余纠错。

TCP/UDP

连接
TCP面向连接(如打电话要先拨号建立连接)。
UDP是无连接的,即发送数据之前不需要建立连接。
安全
TCP提供可靠的服务,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达。
UDP尽最大努力交付,即不保证可靠交付。
传输效率
TCP传输效率相对较低。
UDP传输效率高,适用于对高速传输和实时性有较高的通信或广播通信。
连接对象数量
TCP连接只能是点到点、一对一的。
UDP支持一对一,一对多,多对一和多对多的交互通信。

HTTP与HTTPS

在网络请求中有很多服务器路由器的转发,其中的节点都可能篡改信息,而如果使用HTTPS,密钥在终点才有。而HTTP采用明文传输,不加密、不验证通信双方身份,可能遭到伪装、无法验证报文完整性

HTTPS=HTTP+加密处理+认证+完整性保护

对称加密算法又称传统加密算法:加密和解密使用同一个密钥。
非对称加密算法又称现代加密算法:如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,只有用对应的公开密钥才能解密。

鉴于HTTPS非对称加密在加密时速度特别慢,HTTPS一般采用非对称加密(传输对称加密密钥)+对称加密(传输消息)。

HTTPS相比HTTP引入了SSL协议。
SSL协议位于TCP/IP协议与各种应用层协议之间,为数据通讯提供安全支持。可分为两层:

  1. SSL记录协议(SSL Record Protocol):它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。
  2. SSL握手协议(SSL Handshake Protocol):它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。

服务器认证阶段(握手协议)

  1. C向S发送一个开始信息,开始一个新的会话连接
  2. S根据信息确定是否需要生成新的主密钥(新用户),如需要则S在响应C的“Hello”信息时将包含生成主密钥所需的信息
  3. C根据收到的S响应信息,产生一个主密钥,并用S的公开密钥加密后传给S

S的公开密钥即SSL 证书就是遵守 SSL协议,由受信任的数字证书颁发机构CA,在验证服务器身份后颁发,具有服务器身份验证和数据传输加密功能。
采用HTTPS协议的服务器必须有一套数字证书

  1. S回复该主密钥,并返回给C一个用主密钥认证的信息(cookie),以此让C认证S。

CA

原理

CA是证书的签发机构,是公钥基础设施(Public Key Infrastructure,PKI),负责签发证书、认证证书、管理已颁发证书。

证书的内容包括:电子签证机关的信息、公钥用户信息、公钥、权威机构的签字和有效期等等,通过验证识别信息的真伪实现对证书持有者身份的认证。

CA自己本身拥有一个证书(内含公钥和私钥)。任何人都可以得到 CA 的证书(含公钥),用以验证它所签发的证书。如果一个用户想鉴别另一个证书的真伪,他就用 CA 的公钥对那个证书上的签字进行验证,一旦验证通过,该证书就被认为是有效的。证书实际是由证书签证机关(CA)签发的对用户的公钥的认证。

用户想得到一份属于自己的证书,应先向 CA 提出申请。在 CA 判明申请者的身份后,便为他分配一个公钥,并且 CA 将该公钥与申请者的身份信息绑在一起,并为之签字后,便形成证书发给申请者。

应用

数字证书为实现双方安全通信提供了电子认证。在因特网、公司内部网或外部网中,使用数字证书实现身份识别和电子信息加密。数字证书中含有密钥对(公钥和私钥)所有者的识别信息,通过验证识别信息的真伪实现对证书持有者身份的认证。

在很多情况下,安装CA证书并不是必要的。大多数操作系统的CA证书是默认安装的。这些默认的CA证书由GoDaddy或VeriSign等知名的商业证书颁发机构颁发。因此,如果设备需要信任不知名的或本土的证书颁发机构,只需要安装CA证书

信件,发送者要用收件人的公钥加密信件,同时用自己的私钥对信件进行签名。收件人先使用发送者的公钥对签名进行验证,以确认发送者的身份,用自己的私钥解密信件。

SSL证书服务是和国际CA机构合作,采用独有的Https加密协议通信,防止网站数据被窃取、篡改

Node实现一个http服务器

// 1.引入http模块
let http = require('http');
搭建服务器
// 2.搭建服务器
// req-request请求 res-response响应
http.createServer((req,res)=>{
    // 1)在终端显示的语句
    console.log("已经启动服务器了!!");
    // 2)在页面响应结束之后,页面显示的语句
    // 设置页面语句的响应头,保证输出语句为utf-8的格式,防止乱码
    res.setHeader("Content-Type", "text/plain; charset=utf-8");
    res.write("服务器已经搭建成功!!"); //响应内容,类似于通话内容
    res.end(); //结束响应,类似于挂断电话,需要有这样一个过程
    // 也可以直接通过res.end("服务器已经搭建成功!!")作为结束语句
}).listen(8000);
/*
    可以将listen(8000)之前作为一个文本,比如let app = [listen(8000)之前内容],
    之后通过app.listen(端口)也可以实现。
*/

node是怎样支持https、tls
使用openssl生成公钥、私钥
服务器或客户端使用HTTPS替代HTTP
服务器或客户端加载公钥、私钥证书

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值