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端口。

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

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

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所在计算机中原本保存的根证书。

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 加密协议。

参考:https://juejin.im/post/58501c8f2f301e00573e7197

 

SSH账号密码登录:

(1)远程主机收到用户的登录请求,把自己的公钥发给用户。

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

(3)远程主机用自己的私钥,解密登录密码,如果密码正确,就同意用户登录。

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

所以我们在首次登录的时候需要我们确定”公钥指纹”指纹是不是相同的。

SSH免登陆原理:

 

posted @ 2019-03-17 14:45  LeeJuly  阅读(820)  评论(0)    收藏  举报