11. 客户端-服务器结构的应用程序的安全

应该使用TLS

适用场景:如果你以为自己理解了前面关于公钥加密的介绍。。。

通常,在你设计了自己的RSA协议之后的1至18个月,你肯定会发现,你犯了某个错误,使你的协议没有任何安全性。 比如Salt Stack,Salt Stack的协议使用了 e=1 的RSA 公钥。。。

听起来,TLS有下面这些黑历史:

  • The Logjam DH negotiation attack

  • The FREAK export cipher attack

  • The POODLE CBC oracle attack

  • The RC4 fiasco

  • The CRIME compression attack

  • The Lucky13 CBC padding oracle timing attack

  • The BEAST CBC chained IV attack

  • Heartbleed

  • Renegotiation

  • Triple Handshakes

  • Compromised CAs

但是,你仍然应该使用TLS做传输协议,因为:

  • 这些漏洞中的大部分,仅仅是针对浏览器的,因为他们依赖受害者执行攻击者控制的JavaScript脚本,这些JavaScript脚本生成重复的明文,或特定的明文。

  • 这些漏洞中的大部分,其影响都可以被减轻,只需要你在代码和配置里面写死 TLS v1.2, ECDHE,和 AES-GCM就行。这听起来很棘手,但是这远远没有你自己设计使用ECDHE和AES-GCM的传输协议棘手。

  • 在一个自定义的传输协议的场景中,你并不需要依赖CA,你可以用一个自签名证书,嵌入到你的客户端里面。

  • 不要自己设计加密传输协议,这是极其困难而易错的工程难题

  • 使用TLS,但是不要使用默认配置

文章导航