概述

TLS名为传输层安全协议(Transport Layer Protocol),这个协议是一套加密的通信协议。它的前身是SSL协议(安全套接层协议,Secure Sockets Layer)。这两个协议的工作方式类似,但TLS协议针对SSL协议进行了一些改善。SSL/TLS协议利用加密的方式,在开放的互联网环境中实现了加密通信,让通信的双方可以安心的说悄悄话。

SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS与SSL在传输层对网络连接进行加密。

SSL协议位于TCP/IP协议与各种应用层协议之间,为数据通讯提供安全支持。SSL协议可分为两层: SSL记录协议(SSL Record Protocol):它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。 SSL握手协议(SSL Handshake Protocol):它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。

非对称加密

非对称加密中,给所有人用的锁被称为公钥(public key),总部自己保留的钥匙被称为私钥(private key)。这样一种钥匙和锁分离的加密算法就叫做非对称加密(asymmetric encryption)。

实现了非对称加密的经典算法是RSA算法。

SSL协议

非对称加密从安全性上要强过对称加密。但天下没有免费的午餐。非对称加密的运算成本同样也比较高。为了兼顾效率和安全,SSL协议同时使用了非对称和对称加密。它用对称加密算法来加密信息本身。但对于安全性比较脆弱的对称加密密钥,则采用非对称加密的方式来传输。

SSL协议分为客户端和服务器端。通信的核心步骤很简单:

  • (1)双方利用明文通信的方式确立使用的加密算法。
  • (2)利用非对称算法通信,交换一个密钥。
  • (3)该密钥用于对称加密算法,加密接下来的通信正文。

可以看到,SSL协议的关键是用一个非常安全的方式来交换一个对称密钥。交换的过程会比上面的描述更加复杂一些。

  • (1)客户发起请求时,除了说明自己支持的非对称加密算法,还会附加一个客户端随机数(client random)。
  • (2)服务器回复请求时,会确定非对称加密算法和哈希函数,并附上公钥。此外,服务器端还会在此次通信中附加一个服务器端随机数(server random)。
  • (3)客户端会产生第三个随机数(Premaster secret),然后利用服务器确定的非对称加密算法和公钥来加密这个随机数,再发送给服务器端。
  • (4)客户端用自己的私钥解密第三个随机数。
  • (5)这样,客户端和服务器端都知道了三个随机数。双方各自用商量好的哈希函数从三个随机数获得对称加密的密钥。

即使明文通信的时候,某些信息被窃听,但第三步的非对称加密通信部分可以保证窃听者无法完整的获得三个随机数。这样,窃听者还是不知道对称加密的密钥是什么。这样,对称加密的密钥就在一个安全的环境中获得了。为了进一步安全,服务器的公钥会包含在一个数字证书中发送给客户。这样,客户还可以通过数字证书来验证服务器的身份,以免服务器本身出现问题。

使用越来越广泛的HTTPS协议就是在SSL/TLS协议的基础上进行通信。HTTP协议在通信过程中要经过多重路由,很容易被窃听。经过SSL协议加密的信息就算被窃听,也只能被通信目的地的人解读,从而保证了信息的安全。所以,如果所访问的网站没有使用HTTPS协议,那么在输入银行账号和密码之类的敏感信息时,就要三思而后行了。