0%

https中SSL协议过程详解

2020年2月2日 上午11:35
详解HTTPS是如何确保安全性的? - 简书

问题汇总:

  1. 简要概述https的设计思路:
    1. 我们的目的是需要对client和server端传输的数据进行交互,这时我们手电想到的是对称加密,因为对称加密速度快,更加方便
    2. 但是如何传递对称加密的秘钥呢?
      1. 这时,我们就想到了非对称加密。
      2. 我们希望使用非对称加密技术来加密对称加密的秘钥,client和server传递给对方
    3. 于是,其中一方希望使用另一方的公钥对 对称加密的秘钥进行加密,然后传递给对方,可这是我从哪里获得对方的公钥呢?我如何保证这个公钥是真的呢?
      1. 这时,我们就需要大家公认的第三方对每个人的公钥进行证明
      2. 证明的原理:
        1. 每个人(也就是每个域名),他需要将自己的域名和公钥写在纸上(数字证书),让第三方进行签名认证
        2. 签名过程:
          1. 证书明文 —> hash运算 –> 摘要算法—> 公认的第三方私钥加密 –> 数字签名
        3. 此时,我们就得到了自己的数字证书
    4. 由于我们通过数字证书确保了获得秘钥的确是对方的(某个域名),那么我么就方向大胆的传递对称加密的秘钥把!
      1. 但是,为了更好体现随机性,我们再加密的时候使用的是三个随机数,其实从功能上来说其实一个随机数就够了

概览:


基础知识:

  1. 对称加密
    • 对称加密(也叫私钥加密)指加密和解密使用相同密钥的加密算法。有时又叫传统密码算法,就是加密密钥能够从解密密钥中推算出来,同时解密密钥也可以从加密密钥中推算出来。而在大多数的对称算法中,加密密钥和解密密钥是相同的,所以也称这种加密算法为秘密密钥算法或单密钥算法。
    • 常见的对称加密有:DES(Data Encryption Standard)、AES(Advanced Encryption Standard)、RC4、IDEA
  2. 非对称加密
    • 与对称加密算法不同,非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatekey);并且加密密钥和解密密钥是成对出现的。非对称加密算法在加密和解密过程使用了不同的密钥,非对称加密也称为公钥加密,在密钥对中,其中一个密钥是对外公开的,所有人都可以获取到,称为公钥,其中一个密钥是不公开的称为私钥。
    • 非对称加密算法对加密内容的长度有限制,不能超过公钥长度。比如现在常用的公钥长度是 2048 位,意味着待加密内容不能超过 256 个字节。
  3. 摘要算法
    • 数字摘要是采用单项Hash函数将需要加密的明文“摘要”成一串固定长度(128位)的密文,这一串密文又称为数字指纹,它有固定的长度,而且不同的明文摘要成密文,其结果总是不同的,而同样的明文其摘要必定一致。::“数字摘要“是https能确保数据完整性和防篡改的根本原因::。
  4. 数字签名
    • 数字签名技术就是对“非对称密钥加解密”和“数字摘要“两项技术的应用,它将摘要信息用发送者的私钥加密,与原文一起传送给接收者。接收者只有用发送者的公钥才能解密被加密的摘要信息,然后用HASH函数对收到的原文产生一个摘要信息,与解密的摘要信息对比。如果相同,则说明收到的信息是完整的,在传输过程中没有被修改,否则说明信息被修改过,因此数字签名能够验证信息的完整性。
    • ::数字签名的过程如下:::
      • 明文 —> hash运算 –> 摘要算法—> 私钥加密 –> 数字签名
    • 数字签名有两种功效
      • 能确定消息确实是由发送方签名并发出来的,因为别人假冒不了发送方的签名
      • 数字签名能确定消息的完整性
      • ::注意:数字签名只能验证数据的完整性,数据本身是否加密不属于数字签名的控制范围::
  5. 数字证书
    • ::为什么要有数字证书?::
      • 对于请求方来说,它怎么能确定它所得到的公钥一定是从目标主机那里发布的,而且没有被篡改过呢?亦或者请求的目标主机本本身就从事窃取用户信息的不正当行为呢?这时候,我们需要有一个权威的值得信赖的第三方机构(一般是由政府审核并授权的机构)来统一对外发放主机机构的公钥,只要请求方这种机构获取公钥,就避免了上述问题的发生。
    • ::数字证书的颁发过程::
      • 用户首先产生自己的密钥对,并将公共密钥及部分个人身份信息传送给认证中心。认证中心在核实身份后,将执行一些必要的步骤,以确信请求确实由用户发送而来,然后,认证中心将发给用户一个数字证书,该证书内包含用户的个人信息和他的公钥信息,同时还附有认证中心的签名信息(根证书私钥签名)。用户就可以使用自己的数字证书进行相关的各种活动。数字证书由独立的证书发行机构发布,数字证书各不相同,每种证书可提供不同级别的可信度。
    • ::证书包含哪些内容::
      • 证书颁发机构的名称
      • 证书本身的数字签名
      • 证书持有者公钥
      • 证书签名用到的Hash算法
  6. SSL (Secure Socket Layer,安全套接字层)
    • SSL为Netscape所研发,用以保障在Internet上数据传输之安全,利用数据加密(Encryption)技术,可确保数据在网络上之传输过程中不会被截取,当前为3。0版本。
    • SSL协议可分为两层: SSL记录协议(SSL Record Protocol):它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。 SSL握手协议(SSL Handshake Protocol):它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。
  7. TLS (Transport Layer Security,传输层安全协议)
    • 用于两个应用程序之间提供保密性和数据完整性。
    • TLS 1.0是IETF(Internet Engineering Task Force,Internet工程任务组)制定的一种新的协议,它建立在SSL 3.0协议规范之上,是SSL 3.0的后续版本,可以理解为SSL 3.1,它是写入了 RFC 的。该协议由两层组成: TLS 记录协议(TLS Record)和 TLS 握手协议(TLS Handshake)。较低的层为 TLS 记录协议,位于某个可靠的传输协议(例如 TCP)上面。
  8. TLS比SSL的优势
    • 对于消息认证使用密钥散列法:TLS 使用“消息认证代码的密钥散列法”(HMAC),当记录在开放的网络(如因特网)上传送时,该代码确保记录不会被变更。SSLv3.0还提供键控消息认证,但HMAC比SSLv3.0使用的(消息认证代码)MAC 功能更安全。
    • 增强的伪随机功能(PRF):PRF生成密钥数据。在TLS中,HMAC定义PRF。PRF使用两种散列算法保证其安全性。如果任一算法暴露了,只要第二种算法未暴露,则数据仍然是安全的。
    • 改进的已完成消息验证:TLS和SSLv3.0都对两个端点提供已完成的消息,该消息认证交换的消息没有被变更。然而,TLS将此已完成消息基于PRF和HMAC值之上,这也比SSLv3.0更安全。
    • 一致证书处理:与SSLv3.0不同,TLS试图指定必须在TLS之间实现交换的证书类型。
    • 特定警报消息:TLS提供更多的特定和附加警报,以指示任一会话端点检测到的问题。TLS还对何时应该发送某些警报进行记录。
  9. ::SSL/TLS协议作用::
    • 认证用户和服务器,确保数据发送到正确的客户机和服务器;
    • 加密数据以防止数据中途被窃取;
    • 维护数据的完整性,确保数据在传输过程中不被改变。
  10. SSL、TLS的握手过程
  11. 值得特别提出的是
    • SSL协议在握手阶段使用的是非对称加密,在传输阶段使用的是对称加密,也就是说在SSL上传送的数据是使用对称密钥加密的!因为非对称加密的速度缓慢,耗费资源。
    • 其实当客户端和主机使用非对称加密方式建立连接后,客户端和主机已经决定好了在传输过程使用的对称加密算法和关键的对称加密密钥,由于这个过程本身是安全可靠的,也即对称加密密钥是不可能被窃取盗用的,因此,保证了在传输过程中对数据进行对称加密也是安全可靠的,因为除了客户端和主机之外,不可能有第三方窃取并解密出对称加密密钥!如果有人窃听通信,他可以知道双方选择的加密方法,以及三个随机数中的两个。整个通话的安全,只取决于第三个随机数(Premaster secret)能不能被破解。