网络安全——传输层
网络安全需要保护数据在网络上传输时免受攻击。为了实现这一目标,人们设计了许多实时安全协议。实时网络安全协议有一些流行的标准,例如 S/MIME、SSL/TLS、SSH 和 IPsec。如前所述,这些协议在网络模型的不同层工作。
在上一章中,我们讨论了一些旨在提供应用层安全性的流行协议。在本章中,我们将讨论在传输层实现网络安全的过程以及相关的安全协议。
对于基于 TCP/IP 协议的网络,物理层和数据链路层通常在用户终端和网卡硬件中实现。TCP 和IP 层在操作系统中实现。TCP/IP 之上的任何内容都作为用户进程实现。
对传输层安全的需求
让我们讨论一个典型的基于互联网的商业交易。
鲍勃访问爱丽丝的销售商品的网站。在网站上的表格中,鲍勃输入了所需的商品类型和数量、他的地址和支付卡详细信息。鲍勃单击“提交”并等待货物交付,并从他的帐户中扣除价格金额。这一切听起来不错,但在缺乏网络安全的情况下,鲍勃可能会遇到一些意外。
如果交易不使用保密性(加密),攻击者就可以获得他的支付卡信息。然后,攻击者可以以鲍勃的费用进行购买。
如果不使用数据完整性措施,攻击者可以在商品类型或数量方面修改 Bob 的订单。
最后,如果不使用服务器身份验证,服务器可能会显示 Alice 的著名徽标,但该站点可能是由伪装成 Alice 的攻击者维护的恶意站点。接到鲍勃的命令后,他就可以带着鲍勃的钱逃跑了。或者,他可以通过收集鲍勃的姓名和信用卡详细信息来进行身份盗窃。
传输层安全方案可以通过增强基于 TCP/IP 的网络通信的机密性、数据完整性、服务器身份验证和客户端身份验证来解决这些问题。
这一层的安全性主要用于保护网络上基于 HTTP 的 Web 事务。但是,任何通过 TCP 运行的应用程序都可以使用它。
TLS 设计理念
传输层安全 (TLS) 协议在 TCP 层之上运行。这些协议的设计使用流行的 TCP 应用程序接口 (API),称为“套接字”,用于与 TCP 层连接。
应用程序现在连接到传输安全层,而不是直接连接到 TCP。传输安全层提供了一个带有套接字的简单API,这与TCP的API类似。
在上图中,虽然 TLS 在技术上位于应用程序层和传输层之间,但从通用角度来看,它是一种传输协议,充当通过安全服务增强的 TCP 层。
TLS 被设计为在 TCP(可靠的第 4 层协议)上运行(而不是在 UDP 协议上),从而使 TLS 的设计变得更加简单,因为它不必担心“超时”和“重传丢失的数据”。TCP 层继续照常这样做,以满足 TLS 的需要。
为什么 TLS 很受欢迎?
在传输层使用安全性之所以流行的原因是简单。这一层的安全设计和部署不需要对操作系统中实现的 TCP/IP 协议进行任何更改。只需要设计/修改用户流程和应用程序,复杂性较低。
安全套接字层 (SSL)
在本节中,我们讨论为 TLS 设计的协议系列。该系列包括 SSL 版本 2 和 3 以及 TLS 协议。SSLv2 现已被 SSLv3 取代,因此我们将重点关注 SSL v3 和 TLS。
SSL 简史
1995年,Netscape开发了SSLv2并用于Netscape Navigator 1.1。SSL 版本 1 从未发布和使用。后来,微软对 SSLv2 进行了改进,并推出了另一个类似的协议,名为专用通信技术 (PCT)。
Netscape 在各种安全问题上大幅改进了 SSLv2,并于 1999 年部署了 SSLv3。随后,互联网工程任务组 (IETF) 引入了类似的 TLS(传输层安全)协议作为开放标准。TLS 协议与 SSLv3 不可互操作。
TLS 修改了密钥扩展和身份验证的加密算法。此外,TLS 建议使用开放加密 Diffie-Hellman (DH) 和数字签名标准 (DSS) 来代替 SSL 中使用的专利 RSA 加密。但由于 RSA 专利于 2000 年到期,用户没有充分的理由从广泛部署的 SSLv3 转向 TLS。
SSL 的显着特点
SSL 协议的显着特点如下:
SSL 通过以下方式提供网络连接安全性:
机密性- 信息以加密形式交换。
身份验证- 通信实体通过使用数字证书来相互识别。Web 服务器身份验证是强制性的,而客户端身份验证是可选的。
可靠性- 维护消息完整性检查。
SSL 可用于所有 TCP 应用程序。
几乎所有网络浏览器都支持。
方便与新的在线实体开展业务。
主要为网络电子商务而开发。
SSL的架构
SSL 特定于 TCP,不适用于 UDP。SSL 向应用程序提供应用程序编程接口 (API)。C 和 Java SSL 库/类很容易获得。
SSL 协议旨在实现应用程序层和传输层之间的交互,如下图所示 -
SSL 本身并不是如图所示的单层协议;事实上它是由两个子层组成的。
较低子层由 SSL 协议的一个组件组成,称为 SSL 记录协议。该组件提供完整性和机密性服务。
上子层由三个与SSL相关的协议组件和一个应用协议组成。应用程序组件提供客户端/服务器交互之间的信息传输服务。从技术上讲,它也可以在 SSL 层之上运行。三个 SSL 相关协议组件是 -
- SSL 握手协议
- 更改密码规范协议
- 警报协议。
这三个协议管理所有 SSL 消息交换,将在本节后面讨论。
SSL协议各组件的功能
SSL 协议的四个子组件处理各种任务,以确保客户端计算机和服务器之间的安全通信。
记录协议
记录层格式化上层协议消息。
它将数据分段为可管理的块(最大长度 16 KB)。它可以选择压缩数据。
加密数据。
为每条消息提供一个标头,并在末尾提供一个哈希值(消息验证代码 (MAC))。
将格式化后的块交给TCP层进行传输。
SSL 握手协议
它是 SSL 最复杂的部分。它在传输任何应用程序数据之前调用。它在客户端和服务器之间创建 SSL 会话。
会话的建立涉及服务器身份验证、密钥和算法协商、建立密钥和客户端身份验证(可选)。
会话由一组唯一的加密安全参数来标识。
客户端和服务器之间的多个安全 TCP 连接可以共享同一会话。
握手协议的动作分为四个阶段。这些将在下一节中讨论。
更改CipherSpec协议
SSL 协议最简单的部分。它由两个通信实体(客户端和服务器)之间交换的单个消息组成。
当每个实体发送 ChangeCipherSpec 消息时,它会将其连接端更改为商定的安全状态。
密码参数待定状态被复制到当前状态。
交换此消息表明所有未来的数据交换都已加密并且完整性受到保护。
SSL 警报协议
该协议用于报告错误——例如意外消息、错误记录MAC、安全参数协商失败等。
它还用于其他目的——例如通知 TCP 连接关闭、通知收到错误或未知的证书等。
SSL会话的建立
如上所述,SSL 会话建立有四个阶段。这些主要由SSL握手协议来处理。
第 1 阶段- 建立安全能力。
此阶段包括两条消息的交换 – Client_hello和Server_hello。
client_hello包含客户端支持的加密算法列表,按优先级降序排列。
Server_hello包含选定的密码规范 (CipherSpec) 和新的session_id。
CipherSpec 包含以下字段:
密码算法(DES、3DES、RC2 和 RC4)
MAC算法(基于MD5、SHA-1)
公钥算法 (RSA)
两条消息都有“随机数”来防止重放攻击。
第 2 阶段- 服务器身份验证和密钥交换。
服务器发送证书。客户端软件配置有各种“受信任”组织 (CA) 的公钥来检查证书。
服务器发送选择的密码套件。
服务器可能会请求客户端证书。通常它不会完成。
服务器指示Server_hello的结束。
第 3 阶段- 客户端身份验证和密钥交换。
仅当服务器请求时,客户端才会发送证书。
它还发送使用服务器公钥加密的预主密钥 (PMS)。
如果客户端发送了证书,客户端也会发送Certificate_verify消息来证明他拥有与该证书关联的私钥。基本上,客户端对先前消息的哈希进行签名。
第 4 阶段- 完成。
客户端和服务器相互发送Change_cipher_spec消息,以使待处理的密码状态复制到当前状态。
从现在起,所有数据都将被加密并受到完整性保护。
来自每一端的消息“完成”验证密钥交换和身份验证过程是否成功。
上面讨论的所有四个阶段都发生在 TCP 会话的建立过程中。SSL 会话建立在 TCP SYN/SYNACK 之后开始,在 TCP Fin 之前完成。
恢复断开的会话
如果客户端向服务器发送带有加密session_id信息的hello_request ,则可以恢复断开连接的会话(通过警报消息) 。
然后服务器确定session_id是否有效。如果经过验证,它会与客户端交换 ChangeCipherSpec 和完成消息,并恢复安全通信。
这样就避免了会话密码参数的重新计算,节省了服务器端和客户端的计算量。
SSL 会话密钥
我们已经看到,在 SSL 会话建立的第 3 阶段,客户端将预主密钥发送到使用服务器公钥加密的服务器。主密钥和各种会话密钥的生成方式如下 -
主秘密是使用以下命令生成的(通过伪随机数生成器):
预主秘密。
在 client_hello 和 server_hello 消息中交换两个随机数(RA 和 RB)。
然后从这个主秘密中派生出六个秘密值:
与 MAC 一起使用的密钥(用于服务器发送的数据)
与 MAC 一起使用的密钥(用于客户端发送的数据)
用于加密的密钥和 IV(由服务器)
用于加密的密钥和 IV(由客户端)
传输层安全协议
为了提供 SSL 的开放互联网标准,IETF 于 1999 年 1 月发布了传输层安全 (TLS) 协议。TLS 在 RFC 5246 中被定义为提议的互联网标准。
显着特点
TLS 协议与 SSL 具有相同的目标。
它使客户端/服务器应用程序能够通过身份验证、防止窃听和阻止消息修改以安全的方式进行通信。
TLS 协议位于网络层堆栈中可靠的面向连接的传输 TCP 层之上。
TLS协议的架构与SSLv3协议类似。它有两个子协议:TLS记录协议和TLS握手协议。
尽管 SSLv3 和 TLS 协议具有相似的架构,但在架构和功能上进行了一些更改,特别是握手协议。
TLS 和 SSL 协议的比较
TLS 和 SSLv3 协议之间主要有八个区别。这些如下 -
协议版本- TLS 协议段的标头携带版本号 3.1,以区分 SSL 协议段标头携带的版本号 3。
消息身份验证- TLS 采用密钥哈希消息身份验证代码 (H-MAC)。好处是 H-MAC 可与任何哈希函数一起运行,而不仅仅是 MD5 或 SHA,如 SSL 协议明确规定的那样。
会话密钥生成- TLS 和 SSL 协议在生成密钥材料方面有两个区别。
计算预主密钥和主密钥的方法类似。但在 TLS 协议中,主密钥的计算使用 HMAC 标准和伪随机函数 (PRF) 输出,而不是 ad-hoc MAC。
TLS 协议中计算会话密钥和初始值 (IV) 的算法与 SSL 协议不同。
警报协议消息 -
TLS 协议支持 SSL 警报协议使用的所有消息,但没有冗余的证书警报消息除外。如果不需要客户端身份验证,客户端会发送空证书。
TLS 协议中包含许多针对其他错误情况的附加警报消息,例如record_overflow、decode_error等。
支持的密码套件- SSL 支持 RSA、Diffie-Hellman 和 Fortezza 密码套件。TLS 协议支持除 Fortezza 之外的所有套装。
客户端证书类型- TLS 定义在certificate_request消息中请求的证书类型。SSLv3 支持所有这些。此外,SSL 支持某些其他类型的证书,例如 Fortezza。
证书验证和完成的消息 -
在SSL中, certificate_verify消息使用复杂的消息过程。使用 TLS,经过验证的信息包含在握手消息本身中,从而避免了这一复杂的过程。
完成的消息在 TLS 和 SSLv3 中以不同的方式计算。
数据填充- 在 SSL 协议中,在加密之前添加到用户数据的填充是使总数据大小等于密码块长度的倍数所需的最小量。在 TLS 中,填充量可以是任意数量,只要数据大小是密码块长度的倍数,最多可达 255 字节。
下表总结了 TLS 和 SSLv3 协议之间的上述差异。
安全浏览 - HTTPS
在本节中,我们将讨论使用 SSL/TLS 协议来执行安全的 Web 浏览。
HTTPS 定义
超文本传输协议(HTTP)协议用于网页浏览。HTTPS的功能与HTTP类似。唯一的区别是 HTTPS 提供“安全”的网页浏览。HTTPS 代表基于 SSL 的 HTTP。该协议用于在客户端 Web 浏览器和网站服务器之间提供加密且经过身份验证的连接。
通过 HTTPS 的安全浏览可确保以下内容被加密 -
- 所请求网页的 URL。
- 服务器向用户客户端提供的网页内容。
- 用户填写的表格内容。
- 双向建立 Cookie。
HTTPS 的工作
HTTPS 应用程序协议通常使用两种流行的传输层安全协议之一 - SSL 或 TLS。安全浏览的过程分以下几点描述。
您可以通过在浏览器地址栏中输入 https:// 后跟 URL 来请求与网页的 HTTPS 连接。
Web 浏览器启动与 Web 服务器的连接。使用 https 会调用 SSL 协议的使用。
应用程序(本例中为浏览器)使用系统端口 443,而不是端口 80(在 http 情况下使用)。
SSL 协议通过握手协议来建立安全会话,如前面部分所述。
该网站最初将其 SSL 数字证书发送到您的浏览器。验证证书后,SSL 握手将继续交换会话的共享机密。
当服务器使用受信任的 SSL 数字证书时,用户可以在浏览器地址栏中看到一个挂锁图标。当网站上安装了扩展验证证书时,地址栏会变成绿色。
一旦建立,该会话将由 Web 服务器和浏览器之间的许多安全连接组成。
HTTPS 的使用
HTTPS 的使用为用户提供了机密性、服务器身份验证和消息完整性。它使电子商务能够在互联网上安全地进行。
防止数据窃听并拒绝身份盗用(这是对 HTTP 的常见攻击)。
当今的 Web 浏览器和 Web 服务器都配备了 HTTPS 支持。然而,使用 HTTPS over HTTP 需要客户端和服务器端有更多的计算能力来进行加密和 SSL 握手。
安全外壳协议 (SSH)
SSH 的显着特点如下:
SSH 是一种运行在 TCP/IP 层之上的网络协议。它旨在取代 TELNET,后者提供了不安全的远程登录工具。
SSH 提供安全的客户端/服务器通信,可用于文件传输和电子邮件等任务。
SSH2 是一种流行的协议,与早期版本 SSH1 相比,它提供了更高的网络通信安全性。
SSH 定义
SSH 由三个子协议组成。
传输层协议- SSH 协议的这一部分提供数据机密性、服务器(主机)身份验证和数据完整性。它还可以选择提供数据压缩。
服务器身份验证- 主机密钥与公钥/私钥一样不对称。服务器使用公钥向客户端证明其身份。客户端根据其维护的数据库验证所联系的服务器是否为“已知”主机。一旦服务器通过身份验证,就会生成会话密钥。
会话密钥建立- 身份验证后,服务器和客户端就使用的密码达成一致。会话密钥由客户端和服务器双方生成。会话密钥在用户身份验证之前生成,以便可以加密发送用户名和密码。这些密钥通常在会话期间定期(例如每小时)更换一次,并在使用后立即销毁。
数据完整性- SSH 使用消息身份验证代码 (MAC) 算法进行数据完整性检查。它是对 SSH1 使用的 32 位 CRC 的改进。
用户身份验证协议- SSH 的这一部分向服务器验证用户身份。服务器验证是否仅向预期用户授予访问权限。目前使用了许多身份验证方法,例如键入密码、Kerberos、公钥身份验证等。
连接协议- 这通过单个底层 SSH 连接提供多个逻辑通道。
SSH 服务
SSH 提供了三种主要服务,可以提供许多安全解决方案。这些服务简要描述如下 -
安全命令外壳(远程登录) - 它允许用户编辑文件、查看目录内容以及访问连接设备上的应用程序。系统管理员可以远程启动/查看/停止服务和进程、创建用户帐户以及更改文件/目录权限等。现在可以使用安全远程登录从远程计算机安全地执行在计算机命令提示符下可行的所有任务。
安全文件传输- SSH 文件传输协议 (SFTP) 被设计为 SSH-2 的扩展,用于安全文件传输。本质上,它是一个独立的协议,位于 Secure Shell 协议之上,用于处理文件传输。SFTP 对用户名/密码和正在传输的文件数据进行加密。它使用与 Secure Shell 服务器相同的端口,即系统端口 22。
端口转发(隧道) - 它允许来自不安全的基于 TCP/IP 的应用程序的数据受到保护。设置端口转发后,Secure Shell 会重新路由来自程序(通常是客户端)的流量,并将其通过加密隧道发送到另一端的程序(通常是服务器)。多个应用程序可以通过单个多路复用安全通道传输数据,从而无需在防火墙或路由器上打开许多端口。
优点和局限性
在传输层采用通信安全的好处和局限性如下:
好处
传输层安全对于应用程序是透明的。
服务器已通过身份验证。
应用层标头被隐藏。
它比第 3 层 (IPsec) 的安全机制更细粒度,因为它工作在传输连接级别。
局限性
仅适用于基于 TCP 的应用程序(不适用于 UDP)。
TCP/IP 标头是清晰的。
适合客户端和服务器之间直接通信。不满足使用服务器链的安全应用程序(例如电子邮件)
SSL 不提供不可否认性,因为客户端身份验证是可选的。
如果需要,客户端身份验证需要在 SSL 之上实现。
概括
过去十年,互联网上涌现了大量的Web应用程序。许多电子政务和电子商务门户网站已上线。这些应用程序要求服务器和客户端之间的会话是安全的,以提供会话的机密性、身份验证和完整性。
减轻用户会话期间潜在攻击的一种方法是使用安全通信协议。本章将讨论其中的两种通信协议:安全套接字层 (SSL) 和传输层安全性 (TLS)。这两个协议都在传输层起作用。
另一种传输层协议是 Secure Shell (SSH),旨在取代 TELNET,提供远程登录设施的安全方法。它能够提供各种服务,例如 Secure Command Shell 和 SFTP。
使用传输层安全有很多好处。然而,在这些层设计的安全协议只能与TCP一起使用。它们不为使用 UDP 实现的通信提供安全性。