网络安全 – 传输层
网络安全需要确保数据在网络上传输时免受攻击。为了实现这一目标,已经设计了许多实时安全协议。实时网络安全协议有流行的标准,如 S/MIME、SSL/TLS、SSH 和 IPsec。如前所述,这些协议在网络模型的不同层上工作。
在上一章中,我们讨论了一些旨在提供应用层安全性的流行协议。在本章中,我们将讨论在传输层实现网络安全的过程和相关的安全协议。
对于基于 TCP/IP 协议的网络,物理层和数据链路层通常在用户终端和网卡硬件中实现。TCP 和 IP 层在操作系统中实现。 TCP/IP 之上的任何东西都作为用户进程实现。
需要传输层安全性
让我们讨论一下典型的基于互联网的商业交易。
Bob 访问 Alice 的网站以出售商品。在网站上的表单中,Bob 输入了商品类型和所需数量、他的地址和支付卡详细信息。Bob 单击"提交"并等待商品交付并从他的账户中扣除价格金额。所有这些听起来都不错,但在缺乏网络安全的情况下,Bob 可能会遇到一些意外情况。
如果交易未使用保密性(加密),攻击者可能会获取他的支付卡信息。然后,攻击者可以以 Bob 的名义进行购买。
如果没有使用数据完整性措施,攻击者可以修改 Bob 的订单中的商品类型或数量。
最后,如果没有使用服务器身份验证,服务器可以显示 Alice 的著名徽标,但该网站可能是攻击者维护的恶意网站,攻击者冒充 Alice。收到 Bob 的订单后,他可以拿走 Bob 的钱然后逃跑。或者,他可以通过收集 Bob 的姓名和信用卡详细信息来进行身份盗窃。
传输层安全方案可以通过增强基于 TCP/IP 的网络通信的机密性、数据完整性、服务器身份验证和客户端身份验证来解决这些问题。
此层的安全性主要用于保护网络上基于 HTTP 的 Web 交易。但是,任何通过 TCP 运行的应用程序都可以使用它。
TLS 设计理念
传输层安全性 (TLS) 协议在 TCP 层之上运行。这些协议的设计使用流行的应用程序编程接口 (API) 到 TCP,称为"套接字",用于与 TCP 层交互。
应用程序现在与传输安全层交互,而不是直接与 TCP 交互。传输安全层提供了一个带有套接字的简单 API,它与 TCP 的 API 类似且相似。
在上图中,虽然 TLS 在技术上位于应用程序和传输层之间,但从常见角度来看,它是一种传输协议,充当具有安全服务的 TCP 层。
TLS 旨在通过可靠的第 4 层协议 TCP(而不是 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 应用程序。
几乎所有 Web 浏览器都支持。
为与新的在线实体开展业务提供便利。
主要为 Web 电子商务而开发。
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 连接可以共享同一个会话。
握手协议通过四个阶段进行操作。这些将在下一节中讨论。
ChangeCipherSpec 协议
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)
两条消息都具有"nonce"以防止重放攻击。
第 2 阶段 − 服务器身份验证和密钥交换。
服务器发送证书。客户端软件配置了各种"受信任"组织 (CA) 的公钥以检查证书。
服务器发送选定的密码套件。
服务器可能会请求客户端证书。通常不会这样做。
服务器指示 Server_hello 的结束。
阶段 3 − 客户端身份验证和密钥交换。
仅当服务器请求时,客户端才会发送证书。
它还会发送使用服务器公钥加密的预主密钥 (PMS)。
如果客户端发送了证书,客户端还会发送 Certificate_verify 消息,以证明他拥有与此证书关联的私钥。基本上,客户端会对先前的消息进行哈希签名。
第 4 阶段 −完成。
客户端和服务器相互发送 Change_cipher_spec 消息,以将待定密码状态复制到当前状态。
从现在开始,所有数据都已加密且完整性受到保护。
来自两端的"完成"消息验证密钥交换和身份验证过程是否成功。
上面讨论的所有四个阶段都发生在 TCP 会话的建立过程中。 SSL 会话建立在 TCP SYN/SYNACK 之后开始,在 TCP Fin 之前完成。
恢复断开的会话
如果客户端使用加密的 session_id 信息向服务器发送 hello_request,则可以恢复断开的会话(通过 Alert 消息)。
然后服务器确定 session_id 是否有效。如果验证通过,它会与客户端交换 ChangeCipherSpec 和 finished 消息并恢复安全通信。
这避免了重新计算会话密码参数,并节省了服务器和客户端的计算。
SSL 会话密钥
我们已经看到,在 SSL 会话建立的第 3 阶段,客户端使用服务器的公钥加密预主密钥并将其发送到服务器。主密钥和各种会话密钥的生成方式如下 −
主密钥的生成方式(通过伪随机数生成器)是使用 −
预主密钥。
在 client_hello 和 server_hello 消息中交换两个随机数(RA 和 RB)。
然后从此主密钥中派生出六个密钥值,如下所示 −
与 MAC 一起使用的密钥(用于服务器发送的数据)
与 MAC 一起使用的密钥(用于客户端发送的数据)
用于加密的密钥和 IV(由服务器提供)
用于加密的密钥和 IV(由客户端提供)
TLS 协议
为了提供 SSL 的开放 Internet 标准,IETF 于 1999 年 1 月发布了传输层安全性 (TLS) 协议。TLS 在 RFC 5246 中被定义为拟议的 Internet 标准。
突出特点
TLS 协议与 SSL 具有相同的目标。
它通过身份验证、防止窃听和抵制消息,使客户端/服务器应用程序能够以安全的方式进行通信修改。
TLS 协议位于网络层堆栈中的可靠面向连接的传输 TCP 层之上。
TLS 协议的架构类似于 SSLv3 协议。它有两个子协议:TLS 记录协议和 TLS 握手协议。
尽管 SSLv3 和 TLS 协议具有相似的架构,但在架构和功能上进行了一些更改,特别是针对握手协议。
TLS 和 SSL 协议的比较
TLS 和 SSLv3 协议之间有八个主要区别。这些区别如下 −
协议版本 − TLS 协议段的报头带有版本号 3.1,以区别于 SSL 协议段报头带有的版本号 3。
消息认证 − TLS 采用密钥哈希消息认证码 (H-MAC)。好处是 H-MAC 可以与任何哈希函数配合使用,而不仅仅是 SSL 协议明确规定的 MD5 或 SHA。
会话密钥生成 − 在密钥材料的生成方面,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。
CertificateVerify 和完成消息 −
在 SSL 中,certificate_verify 消息使用复杂的消息过程。使用 TLS,经过验证的信息包含在握手消息本身中,从而避免了这个复杂的过程。
在 TLS 和 SSLv3 中,完成的消息以不同的方式计算。
数据填充 − 在 SSL 协议中,加密前添加到用户数据的填充是使总数据大小等于密码块长度的倍数所需的最小量。在 TLS 中,填充可以是任意数量,只要数据大小是密码块长度的倍数,最大为 255 字节。
下表总结了 TLS 和 SSLv3 协议之间的上述差异。
安全浏览 - HTTPS
在本节中,我们将讨论使用 SSL/TLS 协议进行安全网页浏览。
HTTPS 定义
超文本传输协议 (HTTP) 协议用于网页浏览。HTTPS 的功能类似于 HTTP。唯一的区别是 HTTPS 提供"安全"的网页浏览。HTTPS 代表 HTTP over SSL。该协议用于在客户端 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 提供三种主要服务,可提供许多安全解决方案。这些服务简要描述如下 −
安全命令 Shell(远程登录) − 它允许用户编辑文件、查看目录内容以及访问连接设备上的应用程序。系统管理员可以远程启动/查看/停止服务和进程、创建用户帐户以及更改文件/目录权限等。现在,可以使用安全远程登录从远程计算机安全地执行在计算机命令提示符下可执行的所有任务。
安全文件传输 − SSH 文件传输协议 (SFTP) 旨在作为 SSH-2 的扩展,用于安全文件传输。本质上,它是安全 Shell 协议上的单独协议,用于处理文件传输。SFTP 加密用户名/密码和正在传输的文件数据。它使用与安全 Shell 服务器相同的端口,即系统端口号 22。
端口转发(隧道) − 它允许保护来自不安全的基于 TCP/IP 的应用程序的数据。设置端口转发后,安全 Shell 会重新路由来自程序(通常是客户端)的流量,并通过加密隧道将其发送到另一端的程序(通常是服务器)。多个应用程序可以通过单个多路复用安全通道传输数据,无需在防火墙或路由器上打开多个端口。
优点和局限性
在传输层采用通信安全性的优点和局限性如下 −
优点
传输层安全性对应用程序是透明的。
服务器经过身份验证。
应用程序层标头是隐藏的。
它比第 3 层 (IPsec) 的安全机制更细粒度,因为它在传输连接级别工作。
限制
仅适用于基于 TCP 的应用程序(不是 UDP)。
TCP/IP 标头是明文的。
适用于客户端和服务器之间的直接通信。不适用于使用服务器链的安全应用程序(例如电子邮件)
SSL 不提供不可否认性,因为客户端身份验证是可选的。
如果需要,需要在 SSL 之上实现客户端身份验证。
摘要
过去十年,互联网上出现了大量 Web 应用程序。许多电子政务和电子商务门户网站已经上线。这些应用程序要求服务器和客户端之间的会话是安全的,以提供会话的机密性、身份验证和完整性。
减轻用户会话期间潜在攻击的一种方法是使用安全通信协议。本章讨论了其中两种通信协议,即安全套接字层 (SSL) 和传输层安全性 (TLS)。这两种协议都在传输层起作用。
另一种传输层协议是安全外壳 (SSH),旨在取代 TELNET,提供安全的远程登录功能。它能够提供各种服务,例如安全命令外壳和 SFTP。
使用传输层安全性有很多好处。但是,在这些层设计的安全协议只能与 TCP 一起使用。它们不为使用 UDP 实现的通信提供安全性。