《图解密码技术》笔记14:SSL/TLS-为了更安全的通信

目录

14.2 什么是SSL/TLS

14.2.2 客户端与服务器

14.2.3 用SSL/TLS承载HTTP      

14.2.4 SSL/TLS的工作      

14.2.5 SSL/TLS也可以保护其他的协议

14.2.6 密码套件  

14.2.7 SSL与TLS的区别

14.3 使用SSL/TLS进行通信

14.3.1 层次化的协议

14.3.2 1 TLS记录协议

14.3.3 2-1 握手协议

14.3.4 2-2 密码规格变更协议

14.3.5 2-3 警告协议

14.3.6 2-4 应用数据协议

14.3.7 主密码

14.3.8 TLS中使用的密码技术小结

14.4 对SSL/TLS的攻击

14.5 SSL/TLS用户的注意事项


14.2 什么是SSL/TLS

        SSL/TLS综合运用了前面提到的对称密码、消息认证码、公钥密码、数字签名、伪随机数生成器等密码技术。严格来说SSL(Secure Socket Layer)与TLS(Transport Layer Security)是不同的,TLS相当于是SSL的后续版本。这里介绍的大多是SSL/TLS两者兼具备的,因此,除具体介绍通信协议外,都统一写作SSL/TLS。

14.2.2 客户端与服务器

        之间的通信,如果直接发送请求的话,信用卡号就可能被窃听。

14.2.3 用SSL/TLS承载HTTP      

        可以使用SSL或TLS作为对通信进行加密的协议,然后在此基础上承载HTTP。通过将两种协议进行叠加,我们就可以对HTTP的通信协议进行加密,从而防止窃听。通过SSL/TLS进行通信加密时,URL不是http://开头的,而是以https://开头。

 

14.2.4 SSL/TLS的工作      

        大致了解SSL/TLS之后,我们想要实现的是通过本地的Web浏览器访问网络上的Web服务器,并进行安全的通信。

  • 网络要保证通讯安全,要保障的最主要的点,其实在前面都已经介绍了。就是:机密性、完整性、认证问题
  • 我们把前面能够保证这些要求的技术环列一下:
    • 保证机密性的对称密码,使用伪随机数生成的密钥,保证通讯双方都能安全获取密钥的公钥密码Diffie-Hellman密钥交换
    • 保证完整性的消息认证码,生成此认证码的单向散列函数
    • 解决认证问题的数字签名证书
  • SSL/TLS实际上就是上面多种技术以某种方式组合在一起的组合套餐,以帮助实现通讯安全。
  • HTTP、SMTP/POP3等应用层协议可以承载在SSL/TLS之上
  • SSL和TLS大体是相同的,只有少量微妙的区别。

14.2.5 SSL/TLS也可以保护其他的协议

        我们提到用SSL/TLS承载HTTP通信,这是因为HTTP是一种常用的协议,其实SSL/TLS不仅仅可以承载HTTP,还可以承载其他很多协议。例如,发送邮件时所使用的SMTP协议和接收邮件时使用的POP3协议,都可以用SSL/TLS进行承载。这样就可以对收发邮件进行保护。
        SSL/TLS承载HTTP、SMTP、POP3的结构如图所示。

 

14.2.6 密码套件  

        SSL/TLS提供了一种密码通信的框架,这意味着SSL/TLS中使用的对称密码、公钥密码、数字签名、单向散列函数等技术,都是可以像零件一样进行替换的,也就是说,如果发现现在所使用的某个密码技术存在弱点,那么只要将这一部分今天替换就可以了。
        尽管如此,也不是说所有的组件都可以自由的选择。由于实际进行对话的客户端和服务器端必须使用相同的密码技术才能进行通信,因此如果选择过于自由,就能以保证整体的兼容性。为此,SSL/TLS就像事先搭配好了饭盒一样,规定了一些密码技术的“推荐套餐”,这种推荐套餐成密码套件

14.2.7 SSL与TLS的区别

        SSL(Secure Socket Layer,安全套接字)是1994年由网景(Netscape)公司设计的一种协议,并在该公司的Web浏览器Netscape Navigator中进行了事先。随后,很多Web浏览器都采用了这一协议,使其成为了事实上行业标准。SSL已经于1995年发布了3.0版本,但是在2014年,SSL3.0协议就被发现可能导致POODLEDE安全漏洞(CVE-2014-3566),因此SSL3.0已经不安全了。
        TLS(Transport Layer Security,传输层安全)是IETF在3.0基础上设计的协议。在1999年作为RFC2246
发布的TLS,实际上相当于SSL3.1。
        2006年,TLS1.1以RFC4346的形式发布,这个版本中增加了针对CBC攻击的策略,并加入了AES对称密码算法。TLS1.2中新增了对GCM、CCM认证加密的支持,此外,还新增了HMAC-SHA256,并删除了IDEA和DES,将伪随机数函数改为基于SHA-256来实现。

14.3 使用SSL/TLS进行通信

        

14.3.1 层次化的协议

        TLS协议是由TLS记录协议(TLS record protocol)和TLS握手协议(TLS handshake protocol)这两层协议叠加而成的。位于底层的TLS记录协议负责进行加密,而位于上层的TLS握手协议则负责除了加密以外的其他各种操作。上层的TLS握手协议又可以分为4个子协议。TLS协议层次结构如图。

 TLS协议结构

  • TLS协议分成两层:TLS记录协议(TLS record protocol)、TLS握手协议(TLS handshake protocol)
  • TLS握手协议是负责加密以外的其他事情。握手协议分成4个子协议,分别是:握手协议、密码规格变更协议、警告协议、应用数据协议
    • 握手协议:负责通信双方之间协商决定密码算法和共享密钥
    • 密码规格变更协议:负责向通信对象传达变更密码方式的信号
    • 警告协议:负责在发生错误时将错误传给对方
    • 应用数据协议:是将TLS承载的应用数据传达给通讯对象

14.3.2 1 TLS记录协议

-TLS记录协议是负责消息的压缩、加密以及数据的认证。

  1. TLS记录协议使用到的所有的算法等都是经过握手协议协商确认后的,以保证通讯双方是使用相同的算法。
  2. 首先,消息会被 分割成多份,并用协商好的压缩算法进行压缩
  3. 其次,压缩片段会加上消息认证码以保证完整性,为了防止重放攻击还加上了片段编号。
  4. 再次,压缩后的消息片段会加上消息认证码一起进行加密。加密使用CBC模式,初始向量是通过主密码生成。
  5. 最后,加密后的报文,再加上数据类型、版本号、压缩后的长度组成的报头,就是最终的数据报文。

14.3.3 2-1 握手协议

2.1 握手协议
握手协议是TLS握手协议的一部分,负责在客户端和服务器端之间协商决定密码算法和共享密钥。基于证书的认证操作也在这个协议中完成。是最复杂的一个。

握手协议通信过程

  1. ClientHello(客户端 -> 服务器)

    • 客户端向服务端发送自己的信息:可用的版本号、当前时间、客户端随机数、会话ID、可用的密码套件清单、可用的压缩方式清单
    • 可用的版本号、可用的密码套件清单、可用的压缩方式清单:因为不同的浏览器可能支持的情况不一样,所以需要发送给服务端以方便协商。
    • 当前时间:TLS不使用,但是上层的协议有可能使用
    • 客户端随机数:后面会使用到
    • 会话ID:客户端和服务端需要重新使用之前的连接时,会使用到此信息。
  2. ServerHello(服务器 -> 客户端)

    • 服务端向客户端发送自己的信息:使用的版本号、当前时间、服务器随机数、会话ID、使用的密码套件清单、使用的压缩方式清单
    • 使用的版本号、使用的密码套件清单、使用的压缩方式清单:这里发送的就是协商后的确定结果
    • 当前时间:TLS不使用,但是上层的协议有可能使用
    • 服务器随机数:后面会使用到
  3. Certificate(服务器 -> 客户端)

    • 就是发送服务器的证书
  4. ServerKeyExchange(服务器 -> 客户端)

    • 如果Certificate不足以满足需求时,则会发送ServerKeyExchange消息。具体的内容根据密码套件的不同而有所不同。
    • 这个不是必须的
  5. CertificateRquest(服务器 -> 客户端)

    • 简单的说就是我们平时说的双向认证,即服务器找客户端要其证书用来验证
    • 这个过程中,服务器会向客户端发送这些消息:服务器能够理解的证书类型、服务器能够理解的认证机构名称清单
  6. ServerHelloDone(服务器 -> 客户端)

    • 通知客户端hello时间结束
  7. Certificate(客户端 -> 服务器)

    • 第5步中如果服务器要了客户端的证书,则发送给服务器
  8. ClientKeyExchange(客户端 -> 服务器)

    • 这个就是最关键的一步,交换生成最终密钥的关键素材
    • 如果是使用的RSA,则会将经过服务器公钥加密的预备主密码随着ClientKeyExchange消息一起发送
    • 如果是Diffie-Hellman密钥交换,则随着ClientKeyExchange消息一起发送的是Diffie-Hellman公开值
    • 预备主密码使得服务端和客户端分别计算出相同的主密码
    • 主密码作为关键的密钥素材可以生成:对称密码的密钥、消息认证码的密钥、对称密码的CBC模式中使用的初始化向量
  9. CertificateVerify(客户端 -> 服务器)

    • 只有发送了第5步消息的时候,客户端才会向服务器发送CertificateVerify消息
    • 这个消息是为了向服务器证明,自己确实是真实的客户端,拥有客户端证书的私钥。为了实现这个目的,客户端会计算主密码和握手协议种传送的消息的散列值加上自己的数字签名后发送给服务器。
  10. ChangeCipherSpec(客户端 -> 服务器)

    • 这不是握手协议,而是密码规格变更协议。客户端告诉服务器我要换密码了。
    • 因为已经双方已经交换了密码套件信息,可以开始切换密码进行通信了。
  11. Finished(客户端 -> 服务器)

    • 客户端说我搞定了
  12. ChangeCipherSpec(服务器 -> 客户端)

    • 服务器告诉客户端,我要开始换密码了
  13. Finished(服务器 -> 客户端)

    • 服务器说我搞定了
  14. 切换至应用数据协议

14.3.4 2-2 密码规格变更协议

        密码规格变更协议是TLS握手协议的一部分,负责向同学对象传达变更密码方式的信号。

14.3.5 2-3 警告协议

        警告协议是TLS握手协议的一部分。警告协议负责在发生错误时将错误传达给对方。

14.3.6 2-4 应用数据协议

        应用数据协议是TLS握手协议的一部分。应用数据协议是将TLS上面承载的应用数据传达给通信对象的协议。

14.3.7 主密码

  • 主密码是根据下面信息计算出来的:预备主密码、客户端随机数、服务器随机数
  • 如果是RSA,在握手的时候客户端就会把预备主密码发送给服务器;如果是Diffie-Hellman,则会发送公开值给服务器,然后客户端和服务器根据这个值生成预备主密码
  • 客户端随机数和服务器随机数相当于为了防止攻击者事先计算出来的盐值
  • 使用主密码生成对称密码的密钥、消息认证码的密钥、对称密码的CBC模式中使用的初始化向量

14.3.8 TLS中使用的密码技术小结

        

 

14.4 对SSL/TLS的攻击

  • 对各个密码技术的攻击
  • OpenSSL的心脏出血漏洞

  • SSL3.0的漏洞与POODLE攻击

  • FREAK攻击与密码产品出口管制

  • 对伪随机数生成器的攻击
  • 利用证书的时间差进行攻击

14.5 SSL/TLS用户的注意事项

  • 不要误解证书的含义:就是通过证书认证并不就代表服务器是正确的。很好理解,就是拥有合法身份证的人,不一定是你要转移钱的对象。
  • 密码通信之前的数据是不受保护的
  • 密码通信之后的数据是不受保护的

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值