用发呆的时间来理清自己的思绪
分类: 网络与安全
2013-12-28 01:09:28
ssl/tls虽然被定义为运行在传输层(TCP)之上,为应用层提供一个安全的端到端的数据传输服务的网络协议中的一个层次。但是它并没有做到很好的分层设计(或者说,是没有很好的融入到已有的TCP/ip协议族中)。
网络协议族分层设计的思想就是,各层所各层的事情,基本不会有太多的干扰。按照这种原则。http这个提供web服务的网络通信协议,是不会因为它的下面层次而发生任何变化。就像http和tcp不会应为ipv4到ipv6的升级而又任何的负担。
主要的原因是,“安全”需要是可选的,也就是说,应用层应该可以选择是使用安全的还是不安全的连接去通信。而这种选择磋商机制在大部分的应用层协议中是没有的。(因为它们的出现几乎都在SSL之前)。
你可以有三种方法你改变这一现象:
1)改变现有应用层协议,让他们在最初连接的时候有一个磋商的过程。这个通常不实际(除非是大型的标准化定义)。
2)服务器通过识别客户端发过来的两种不同的协议(安全与不安全)字节内容的不同来判断使用何种协议响应。这是一种理想化的解决方案,但这依赖与两种协议之间明显的差异性,而这一点很难确定。
3)把他们完全看成两种协议,使用不同的端口进行通信。这是一些现有协议的解决方法(如:http与https)。但是这也是一种非常无奈,有后遗症的方法。为某个协议(http)添加新的功能(安全),只能将它实现成一个独立的版本,并且多占用一个端口。这不能成为升级,只能称为变体。我们怎么回允许这样的变体无尽止的出现呢?