http/1.x,http/2,https,SSL,TLS

http协议封装的数据包->tcp/ip->服务器  缺点:数据包中途被窃取或者被篡改。算法

http协议封装的数据包->ssl加密->tcp/ip->服务器:缺点:虽然安全,可是开销变大,传输数据变慢。浏览器

http的链接很简单,是无状态的;https协议是由ssl+http协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。缓存

https如何保证数据的传输加密?

https在传输的过程当中涉及三个密钥:安全

服务器端用的公钥和私钥(公钥加密,私钥解密),用来进行非对称加密。服务器

客户端产生的随机密钥,用来进行对称加密。网络

分为8步:并发

1.客户端向服务器发起HTTPS请求,链接到服务器的443端口。tcp

2.服务器端有一个密钥对,即公钥和私钥,是用来进行非对称加密使用的,服务器端保存着私钥,不能将其泄露,公钥能够发送给任何人。函数

3.服务器将数字证书(公钥,域名)发送给客户端。post

4.客户端对服务端发来的公钥进行检查,验证其合法性,若是发现公钥有问题,https传输就没法继续。而后会生成一个随机值(采用伪随机数生成器生成对称密码的私钥),这个随机值就是客户端密钥,而后用服务器公钥对客户端密钥进行非对称加密,这个客户端密钥就是密文,第一次https请求就结束了。

5.服务端接收到收到客户端的密文,而后用私钥进行非对称解密,解密以后的明文就是客户端密钥,而后用客户端密钥对数据进行加密,这样数据就变成了密文。

6.服务端数据加密后的密文发给客户端。

7.客户端收到服务器发来的密文,用客户端的密钥来进行对称解密,获得服务器端发来的数据,这样第二次http请求就结束了。

 

 

在https请求中还有消息验证码(共享密钥,消息散列值):消息认证码主要用于验证消息的完整性与消息的认证,其中消息的认证指“消息来自正确的发送者”

  1. 发送者与接收者事先共享秘钥
  2. 发送者根据发送消息计算 MAC 值
  3. 发送者发送消息和 MAC 值
  4. 接收者根据接收到的消息计算 MAC 值
  5. 接收者根据本身计算的 MAC 值与收到的 MAC 对比
  6. 若是对比成功,说明消息完整,并来自与正确的发送者

 https中的数字签名(须要公钥,私钥,消息散列值):消息认证码的缺点在于没法防止否定,由于共享秘钥被 client、server 两端拥有,server 能够伪造 client 发送给本身的消息(本身给本身发送消息),为了解决这个问题,咱们须要它们有各自的秘钥不被第二个知晓(这样也解决了共享秘钥的配送问题)

 

 

数字签名和消息认证码都不是为了加密
能够将单向散列函数获取散列值的过程理解为使用 md5 摘要算法获取摘要的过程

使用本身的私钥对本身所承认的消息生成一个该消息专属的签名,这就是数字签名,代表我认可该消息来自本身
注意:私钥用于加签,公钥用于解签,每一个人均可以解签,查看消息的归属人

 用户证书(须要公钥密码中的公钥,数字签名):

    证书:全称公钥证书(Public-Key Certificate, PKC),里面保存着归属者的基本信息,以及证书过时时间、归属者的公钥,并由认证机构(Certification Authority, CA)施加数字签名,代表,某个认证机构认定该公钥的确属于此人(防止你随便去拿一个公钥就来进行通讯)

    服务器B发送给客户端A的用户证书, 是服务器B向CA机构(数字证书认证机构)申请而来的证书。

CA机构(数字证书认证机构)

  1. CA机构有一对根密钥。CA机构会用其私钥加密服务器B的公钥。结果就是:经过CA机构认证的证书(公钥、域名)。
  2. CA机构说白了就是一个受信任的中间人。

什么是根证书

  1. CA机构有一对根密钥。其公钥就是根证书。
  2. 用户的操做系统中,会集成世界范围内全部被信任的CA机构(数字证书认证机构)的根证书。即全部被信任机构的公钥。
  3. iPhone->通用->关于本机->证书信任设置->进一步了解被信任的证书。能够看到iOS中可用的受信任根证书的列表。

关于HTTPS握手过程当中关于对数字证书的细节:

1.服务器B返回的数字证书, 客户端A会进行以下验证:

  1. 遍历计算机和浏览器中保存的根证书, 若其中某个根证书的公钥能够解开服务器返回的数字证书, 得到服务器返回的数字证书中的公钥和域名, 则说明OK。不然握手失败。整个HTTPS通讯的核心就是这个可信的根证书。
  2. 客户端A判断证书中的域名是否和正在访问的域名相同。若不一样,显示证书不可信, 可是握手加密过程依然能够进行。
  3. 客户端产生一个随机的对称密钥。
  4. 使用服务器B返回的数字证书中的公钥来加密此对称密钥。
  5. 将此加密后的对称密钥发送给服务器B。服务器B经过私钥解密得到客户端A随机产生的对称密钥。至此客户端A和服务器B都拥有了对称密钥。
  6. 客户端A经过自身随机产生的对称密钥来加密HTTP通讯内容。服务器B能够经过以前获得的对称密钥解密通讯内容。

2.握手过程当中涉及到两种证书。

  1. 服务器B发送给客户端A的证书-用户证书。
  2. 客户端A所在计算机中本来保存的根证书。

http1.0和http2.0之间的区别?

http1.0:无状态、无链接。

http1.1:持久链接,默认Connection:keep-alive,增长了host字段,增长了缓存处理:cache-control,根据客户端请求的前后顺序来返回相应的结果,以保证客户端可以区分每次请求的响应内容。

http2.0:

1.引入二进制和流的概念,帧对数据进行顺序标识,浏览器接收到数据之后根据序列对数据进行合并,不会出现数据错乱的状况。所以有了序列,服务器能够并行的传输数据

 

2.多路复用:

     一、全部的HTTP2.0通讯都在一个TCP链接上完成,这个链接能够承载任意数量的双向数据流。

     二、每一个数据流以消息的形式发送,而消息由一或多个帧组成。这些帧能够乱序发送,而后再根据每一个帧头部的流标识符(stream id)从新组装。

         举个例子,每一个请求是一个数据流,数据流以消息的方式发送,而消息又分为多个帧,帧头部记录着stream id用来标识所属的数据流,不一样属的帧能够在链接中随机混杂在一块儿。接收方能够根据stream id将帧再归属到各自不一样的请求当中去。

     三、另外,多路复用(链接共享)可能会致使关键请求被阻塞。HTTP2.0里每一个数据流均可以设置优先级和依赖,优先级高的数据流会被服务器优先处理和返回给客户端,数据流还能够依赖其余的子数据流。

     四、可见,HTTP2.0实现了真正的并行传输,它可以在一个TCP上进行任意数量HTTP请求。而这个强大的功能则是基于“二进制分帧”的特性。

 

3.头部压缩

在HTTP1.x中,头部元数据都是以纯文本的形式发送的,一般会给每一个请求增长500~800字节的负荷。

HTTP2.0使用encoder来减小须要传输的header大小,通信双方各自cache一份header fields表,既避免了重复header的传输,又减少了须要传输的大小。高效的压缩算法能够很大的压缩header,减小发送包的数量从而下降延迟。

 

4.服务器推送:

服务器除了对最初请求的响应外,服务器还能够额外的向客户端推送资源,而无需客户端明确的请求。

 GET,POST请求的区别:

基本:

1.get是从服务器上获取数据,post是向服务器传送数据。
2. POST比GET安全,由于数据在地址栏上不可见。
3.get方式提交的数据最多只能有1024字节,而post则没有此限制。
4.GET使用URL或Cookie传参。而POST将数据放在BODY中。

深刻:

1.GET产生一个TCP数据包;POST产生两个TCP数据包。

对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);

而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)

 

2.缓存回退:GET在浏览器回退时是无害的,而POST会再次提交请求,由于,Get请求浏览器有缓存,回退时读取的是缓存中的数据. 可是Post没有浏览器缓存会再次发送请求,消耗服务器性能。

SSL,TLS区别:

SSL(Secure Sockect Layer 安全套接字协议)的过程就是上面的那个,它所提供的服务:认证用户和服务器,确保数据发送到正确的客户机和服务器;加密数据以防止数据中途被窃取;维护数据的完整性,确保数据在传输过程当中不被改变。

TLS(Transport Layer Security 安全传输层协议)它在会话层

TLS的主要目标是使SSL更安全,并使协议的规范更精确和完善。TLS 在SSL v3.0 的基础上,主要有如下加强内容:

1)TLS 使用“消息认证代码的密钥散列法”(HMAC)更安全的MAC算法。

2)TLS提供更多的特定和附加警报,还对什么时候应该发送某些警报进行记录。

3)加强的伪随机功能,TLS对于安全性的改进。

 

HTTPS 降级攻击

    攻击者可利用 SSL 3.0 漏洞获取安全链接当中某些是SSL3.0加密后的明文内容。由于兼容性问题,当浏览器进行 HTTPS 链接失败的时候,将会尝试使用旧的协议版本,因而,加密协议由更加安全的协议,好比 TLS 1.2降级成 SSL 3.0。

    若是服务器提供有漏洞的 SSL 3.0 协议的支持,同时,攻击者又能做为中间人控制被攻击者的浏览器发起漏洞版本的 HTTPS 请求,那虽然攻击者监听到的也是加密过的数据,但由于加密协议有漏洞,能够解密这些数据。攻击者能够利用此漏洞,截获用户的隐私数据,好比 Cookie,这样攻击者就能够拿到这些隐私数据,进行更深层次的攻击,进而形成了用户隐私的泄漏。

解决:

惟一解决问题的方法是禁用 SSL 3.0 加密协议,防止TLS 1.2 或者 TLS 1.1 或者 TLS 1.0降级到 SSL 3.0 加密协议。

参考:http://www.javashuo.com/article/p-pmkibrtb-ds.html

 

SSH帐号密码登陆:

(1)远程主机收到用户的登陆请求,把本身的公钥发给用户。

(2)用户使用这个公钥,将登陆密码加密后,发送回来。

(3)远程主机用本身的私钥,解密登陆密码,若是密码正确,就赞成用户登陆。

会发生中间人攻击,截获登陆请求,伪造服务器,从而获取密码。

因此咱们在首次登陆的时候须要咱们肯定”公钥指纹”指纹是否是相同的。

SSH免登录原理:

相关文章
相关标签/搜索