我们生活在一个互联网时代。在20世纪的最后十年,互联网已经十分普及,并且永久性地改变了我们的生活方式。今天,我们依靠手机和计算机进行通信、购买商品、支付账单、旅行、工作,等等。很多人的口袋里总是装着处于开机状态的设备;我们并不只是连接到互联网,其实就是互联网的一部分。目前手机的数量已经超过了人口的数量。智能手机的数量已经达到数十亿,并且仍保持着快速增长。与此同时,诸多计划正酝酿将各种设备连接到同一网络。显然,这一切才刚刚开始。 所有连接到互联网的设备都有一个共同点,它们依赖安全套接字层(secure socket layer,SSL)和传输层安全(transport layer security,TLS)协议保护传输的信息。 1.1 传输层安全 人们最初设计互联网时,很少考虑到安全。这样的结果是,核心通信协议本质上是不安全的,只能依靠所有参与方的诚信行为。互联网在早期由少数节点(大部分是大学)构成,那时这也许行得通;但现在所有人都可以连接到互联网,这种方式便土崩瓦解。 SSL和TLS都是加密协议,旨在基于不安全的基础设施提供安全通信。这意味着,如果正确部署这些协议,你就可以对互联网上的任意一个服务打开通信信道,并且可以确信你会与正确的服务器通信,安全地交换信息(你的数据不会被他人截取,而且在接收时会保持原样)。这些协议保护着通信链路即传输层,这也是TLS名称的由来。 安全不是TLS的唯一目标。TLS实际上有以下四个主要目标(按优先顺序排列)。 加密安全 这是主要问题:为任意愿意交换信息的双方启用安全通信。 互操作性 独立的编程人员应该能够使用通用的加密参数开发程序和库,使它们可以相互通信。 可扩展性 你很快就会看到,TLS是一种能高效开发和部署加密协议的框架。其重要目标是独立于实际使用的加密基元(例如密码和散列函数),从而不需要创建新的协议,就允许从一个基元迁移到另一个。 效率 最终的目标是在实现上述所有目标的基础上保持性能成本在可接受的范围内。这需要尽量减少昂贵的加密操作的执行次数,并提供一个会话缓存方案,以避免这些加密操作在随后的连接中被执行。