网络安全 – 传输层
网络安全 – 传输层
网络安全需要保护数据在网络上传输时免受攻击。为了实现这一目标,人们设计了许多实时安全协议。有一些流行的实时网络安全协议标准,例如 S/MIME、SSL/TLS、SSH 和 IPsec。如前所述,这些协议在网络模型的不同层工作。
在上一章中,我们讨论了一些旨在提供应用层安全性的流行协议。在本章中,我们将讨论在传输层和相关安全协议上实现网络安全的过程。
对于基于 TCP/IP 协议的网络,物理和数据链路层通常在用户终端和网卡硬件中实现。TCP 和 IP 层在操作系统中实现。TCP/IP 之上的任何内容都作为用户进程实现。
需要传输层安全
让我们讨论一个典型的基于 Internet 的业务交易。
Bob 访问 Alice 的网站以销售商品。在网站上的表格中,Bob 输入商品类型和所需数量、他的地址和支付卡详细信息。Bob 单击提交并等待货物交付,并从他的帐户中扣除价格金额。所有这些听起来都不错,但是在没有网络安全的情况下,Bob 可能会遇到一些惊喜。
-
如果交易没有使用机密性(加密),攻击者就可以获得他的支付卡信息。然后攻击者可以以 Bob 的费用进行购买。
-
如果不使用数据完整性措施,攻击者可以根据货物的类型或数量修改 Bob 的订单。
-
最后,如果不使用服务器身份验证,服务器可能会显示 Alice 的著名标志,但该站点可能是由伪装成 Alice 的攻击者维护的恶意站点。接到鲍勃的命令后,他可以拿鲍勃的钱逃跑。或者他可以通过收集 Bob 的姓名和信用卡详细信息来进行身份盗用。
传输层安全方案可以通过增强基于 TCP/IP 的网络通信的机密性、数据完整性、服务器身份验证和客户端身份验证来解决这些问题。
该层的安全性主要用于保护网络上基于 HTTP 的 Web 事务。但是,它可以被在 TCP 上运行的任何应用程序使用。
TLS 设计理念
传输层安全 (TLS) 协议在 TCP 层之上运行。这些协议的设计使用流行的应用程序接口 (API) 到 TCP,称为“套接字”,用于与 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 version1 从未发布和使用过。后来,微软对 SSLv2 进行了改进,并引入了另一个类似的协议,称为私有通信技术 (PCT)。
Netscape 在各种安全问题上大幅改进了 SSLv2,并于 1999 年部署了 SSLv3。随后,互联网工程任务组 (IETF) 引入了类似的 TLS(传输层安全)协议作为开放标准。TLS 协议不可与 SSLv3 互操作。
TLS 修改了用于密钥扩展和身份验证的加密算法。此外,TLS 建议使用开放加密 Diffie-Hellman (DH) 和数字签名标准 (DSS) 代替 SSL 中使用的专利 RSA 加密。但由于 2000 年 RSA 专利到期,用户没有充分理由从广泛部署的 SSLv3 转向 TLS。
SSL的显着特点
SSL协议的显着特点如下 –
-
SSL通过以下方式提供网络连接安全 –
-
机密性– 信息以加密形式交换。
-
身份验证– 通信实体通过使用数字证书相互识别。Web 服务器身份验证是强制性的,而客户端身份验证是可选的。
-
可靠性– 维护消息完整性检查。
-
-
SSL 可用于所有 TCP 应用程序。
-
几乎所有的网络浏览器都支持。
-
为与新的在线实体开展业务提供便利。
-
主要为 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 连接可以共享同一个会话。
-
握手协议操作分为四个阶段。这些将在下一节中讨论。
-
-
更改密码规范协议
-
SSL 协议中最简单的部分。它由在两个通信实体(客户端和服务器)之间交换的单个消息组成。
-
当每个实体发送 ChangeCipherSpec 消息时,它会按照约定将其连接端更改为安全状态。
-
密码参数挂起状态被复制到当前状态。
-
此消息的交换表明所有未来的数据交换都已加密且完整性受到保护。
-
-
SSL 警报协议
-
该协议用于报告错误——如意外消息、MAC 记录错误、安全参数协商失败等。
-
它还用于其他目的——例如通知关闭 TCP 连接、通知收到错误或未知证书等。
-
SSL Session的建立
如上所述,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 表示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 和完成的消息,并恢复安全通信。
-
这样可以避免重新计算会话密码参数,节省服务器端和客户端的计算量。
SSL 会话密钥
我们已经看到,在 SSL 会话建立的第 3 阶段,客户端将使用服务器的公钥加密的预主密钥发送到服务器。主密钥和各种会话密钥生成如下 –
-
主密钥是使用以下方法生成的(通过伪随机数生成器) –
-
前大师的秘密。
-
在 client_hello 和 server_hello 消息中交换了两个 nonce(RA 和 RB)。
-
-
然后从这个主秘密派生六个秘密值作为 –
-
与 MAC 一起使用的密钥(用于服务器发送的数据)
-
与 MAC 一起使用的密钥(用于客户端发送的数据)
-
用于加密的密钥和 IV(由服务器)
-
用于加密的密钥和 IV(由客户端)
-
TLS 协议
为了提供 SSL 的开放互联网标准,IETF 于 1999 年 1 月发布了传输层安全 (TLS) 协议。 TLS 在 RFC 5246 中被定义为提议的互联网标准。
显着特点
-
TLS 协议与 SSL 具有相同的目标。
-
它使客户端/服务器应用程序能够通过身份验证、防止窃听和抵制消息修改以安全的方式进行通信。
-
TLS 协议位于网络层堆栈中可靠的面向连接的传输 TCP 层之上。
-
TLS 协议的架构类似于 SSLv3 协议。它有两个子协议:TLS Record 协议和 TLS Handshake 协议。
-
尽管 SSLv3 和 TLS 协议具有相似的体系结构,但在体系结构和功能方面进行了一些更改,特别是对于握手协议。
TLS 和 SSL 协议的比较
TLS 和 SSLv3 协议之间有八个主要区别。这些如下 –
-
协议版本– TLS 协议段的标头携带版本号 3.1,以区分 SSL 协议段标头携带的数字 3。
-
消息身份验证– TLS 采用密钥散列消息身份验证代码(H-MAC)。好处是 H-MAC 可以使用任何散列函数运行,而不仅仅是 MD5 或 SHA,正如 SSL 协议明确规定的那样。
-
会话密钥生成– TLS 和 SSL 协议在生成密钥材料方面有两个区别。
-
计算 pre-master 和 master secret 的方法类似。但在 TLS 协议中,主密钥的计算使用 HMAC 标准和伪随机函数 (PRF) 输出而不是 ad-hoc MAC。
-
TLS 中用于计算会话密钥和初始值 (IV) 的算法与 SSL 协议不同。
-
-
警报协议消息 –
-
TLS 协议支持 SSL 的 Alert 协议使用的所有消息,除了没有冗余的证书警报消息。如果不需要客户端身份验证,客户端会发送空证书。
-
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 协议来执行安全的 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 的使用为用户提供机密性、服务器身份验证和消息完整性。它可以在 Internet 上安全地进行电子商务。
-
防止数据窃听并拒绝身份盗用,这是对 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 提供三种主要服务,可以提供许多安全解决方案。这些服务简要描述如下 –
-
Secure Command-Shell (Remote Logon) – 它允许用户编辑文件、查看目录内容以及访问连接设备上的应用程序。系统管理员可以远程启动/查看/停止服务和进程、创建用户帐户、更改文件/目录权限等。现在可以使用安全远程登录从远程机器安全地执行在机器命令提示符下可行的所有任务。
-
安全文件传输– SSH 文件传输协议 (SFTP) 被设计为 SSH-2 的扩展,用于安全文件传输。从本质上讲,它是一个独立的协议,位于 Secure Shell 协议之上,用于处理文件传输。SFTP 对用户名/密码和正在传输的文件数据进行加密。它使用与 Secure Shell 服务器相同的端口,即系统端口号 22。
-
端口转发(隧道) – 它允许保护来自不安全的基于 TCP/IP 的应用程序的数据。设置端口转发后,Secure Shell 重新路由来自程序(通常是客户端)的流量,并通过加密隧道将其发送到另一端(通常是服务器)的程序。多个应用程序可以通过单个多路复用安全通道传输数据,无需在防火墙或路由器上打开许多端口。
优点和限制
在传输层采用通信安全的好处和局限性如下 –
-
好处
-
传输层安全对应用程序是透明的。
-
服务器已通过身份验证。
-
应用层标题是隐藏的。
-
它比第 3 层 (IPsec) 的安全机制更细粒度,因为它在传输连接级别工作。
-
-
限制
-
仅适用于基于 TCP 的应用程序(不适用于 UDP)。
-
TCP/IP 标头是清晰的。
-
适用于客户端和服务器之间的直接通信。不适合使用服务器链(例如电子邮件)的安全应用程序
-
SSL 不提供不可否认性,因为客户端身份验证是可选的。
-
如果需要,需要在 SSL 之上实现客户端身份验证。
-
概括
在过去的十年中,Internet 上出现了大量的 Web 应用程序。许多电子政务和电子商务门户网站已经上线。这些应用程序要求服务器和客户端之间的会话是安全的,提供会话的机密性、身份验证和完整性。
在用户会话期间减轻潜在攻击的一种方法是使用安全通信协议。本章讨论了两个这样的通信协议,即安全套接字层 (SSL) 和传输层安全 (TLS)。这两个协议都在传输层起作用。
另一种传输层协议,安全外壳 (SSH),旨在取代 TELNET,提供远程登录设施的安全手段。它能够提供各种服务,例如 Secure Command Shell 和 SFTP。
使用传输层安全有很多好处。但是,在这些层设计的安全协议只能与 TCP 一起使用。它们不为使用 UDP 实现的通信提供安全性。