https协议原理浅析

https原理协议浅析

    • 一.为什么需要https协议?
    • 二.加密方式
      • 1.对称密钥加密(共享密钥加密)
      • 2.非对称密钥加密(公开密钥加密)
        • 非对称加密的用法:私钥签名
      • 3.混合加密(https采取的加密方式)
    • 三.身份认证
      • 1.CA证书的申请过程
      • 2.客户端验证服务端身份的过程
    • 四.数据的完整性保护
      • 五.https的完整流程
        • 1.服务器请求颁发CA证书
        • 2.TLS握手
        • 3.数据加密传输

一.为什么需要https协议?

http是一种明文字符串传输协议,传输的数据在网络中很容易被人抓包,并不安全,所以涉及隐私信息的传输,就不能使用http协议,而需要一种更加安全的数据传输协议,https应运而生。
https协议并不是一个新的协议,而是在http协议的基础上使用SSL/TLS对报文进行了一层加密,目的是实现数据的安全传输;通过CA认证进行身份认证;使用哈希算法实现了数据的完整性保护的一种协议。

https协议解决的关于http的三大问题:

  1. 通信使用明文,可能会被窃听;
  2. 不验证通信方的身份,可能是伪装的中间人;
  3. 无法证明报文的完整性,内容可能遭篡改。

二.加密方式

1.对称密钥加密(共享密钥加密)

加密和解密使用相同的密钥

优点是加解密效率高,缺点是密钥一旦被劫持则加密形同虚设

2.非对称密钥加密(公开密钥加密)

加密和解密使用不同的密钥,公钥加密的数据只能用私钥解密,私钥加密的数据只能用公钥解密

具体流程:
通信过程中,每一端在通信前都生成一对密钥(公钥和私钥)。在通信前,通过广播形式将公钥发送给对端,对端使用收到的公钥进行数据加密然后传输,收到数据后,本端使用私钥进行解密。

主要算法:RSA加密算法

优点是安全度更高;
缺点是加解密复杂度高,效率低下,耗时长;

非对称加密的用法:私钥签名

  • 私钥签名的用处?
    验证数据明文的一致性,检测数据在网络传输过程中是否发生了篡改。

  • 私钥签名的步骤:
    通信两端分别用A、B表示
    第一步:A用自己的私钥对明文的哈希值进行加密生成密文,把明文和密文(签名)一起发送给B;
    第二步:B用A的公钥对密文进行解密,对解密后的密文哈希值和计算得到的明文哈希值进行对比,如果相同,说明数据明文没有发生改变,否则发生修改。

3.混合加密(https采取的加密方式)

对称加密的加解密效率高,非对称加密的安全性高,因此采取用非对称加密保护对称密钥的协商过程,这就是混合加密

具体流程是:
通信的一端将自己的对称密钥用对方的公钥进行加密后传输给对方,对方用私钥解密后就得到了对称密钥,之后的数据传输使用就使用对称密钥。


三.身份认证

1.CA证书的申请过程

服务器将自己的公钥和域名等一系列信息发送给权威机构申请一个CA证书;
权威机构会将服务端的公钥、颁发者、有效期等信息也就是证书内容打包并进行哈希运算,计算出一个哈希值;
权威机构用自己的私钥对这个哈希值进行加密,得到证书签名;
最后将证书签名添加到证书中,形成完整的CA证书并返回给服务器;

2.客户端验证服务端身份的过程

客户端向服务端请求CA证书;
服务端将CA证书发送给客户端;
客户端拿到CA证书后,查看权威机构是否是自己信任的权威机构,如果不是,可以自行选择是否添加信任;
通常浏览器和操作系统都集成了权威机构的公钥,因此可以使用权威机构公钥对CA证书中的证书签名进行解密,得到哈希值H1;
客户端使用CA证书中的签名哈希算法计算得到一个哈希值H2;
比较H1和H2是否相等,如果相等则说明证书是可信的,否则证书不可信,可以自行选择是否添加信任;


四.数据的完整性保护

  • 服务端在发送报文之前做的操作:
    用哈希算法对报文计算哈希值;
    用私钥对哈希值加密,形成数字签名;
    将数字签名附加到报文末尾发送给客户端;

  • 客户端收到报文之后的操作:
    使用服务器的公钥对数字签名进行解密,得到哈希值H1;
    使用CA证书中的哈希算法对报文计算哈希值,得到H2;
    比较H1和H2是否相同,不相同说明数据被篡改过。


五.https的完整流程

1.服务器请求颁发CA证书

服务器将自己的公钥和域名等一系列信息发送给权威机构申请一个CA证书;
权威机构会将服务端的公钥、颁发者、有效期等信息也就是证书内容打包并进行哈希运算,计算出一个哈希值;
权威机构用自己的私钥对这个哈希值进行加密,得到证书签名;
最后将证书签名添加到证书中,形成完整的CA证书并返回给服务器;
服务器将CA证书保存到本地;

2.TLS握手

  • 客户端向服务端打招呼:
    客户端向服务端发送自己支持的TLS版本、加密套件和一个随机数(称为第一随机数);
  • 服务端向客户端打招呼:
    服务端收到客户端的信息后,向客户端发送自己支持的TLS版本、并从客户端发送的加密套件中选择自己支持的一个、一个随机数(称为第二随机数);
    服务端向客户端继续发送自己的CA证书;
  • 服务端向客户端发送Server Hello Done报文,告诉客户端:服务端打招呼结束;
  • 客户端验证服务端身份信息:
    客户端拿到CA证书后,查看权威机构是否是自己信任的权威机构,如果不是,可以自行选择是否添加信任;
    通常浏览器和操作系统都集成了权威机构的公钥,因此可以使用权威机构公钥对CA证书中的证书签名进行解密,得到哈希值H1;
    客户端使用CA证书中的签名哈希算法计算得到一个哈希值H2;
    比较H1和H2是否相等,如果相等则说明证书是可信的,否则证书不可信,可以自行选择是否添加信任;
  • 客户端生成一个随机数(称之为预主密钥),使用服务端的公钥加密,将加密后的数据发送给服务端;
  • 服务端收到数据后使用私钥解密,得到预主密钥,并和第一随机数、第二随机数结合一起生成会话密钥;客户端也采用同样的算法生成会话密钥。往后的数据传输就是用会话密钥进行加密,会话密钥是一种对称密钥。

3.数据加密传输

使用会话密钥加解密数据进行通信。

你可能感兴趣的:(网络,https,安全,http)