Featured image of post 网络安全协议

网络安全协议

常见基础的网络安全协议

TLS

在某一时刻,您只需要一个数据包捕获工具来读取网络上用户的所有聊天、电子邮件和密码。攻击者将其网卡设置为混杂模式的情况并不少见,即捕获所有数据包,包括那些不是发往它的数据包。他们稍后会检查所有数据包捕获并获取毫无戒心的受害者的登录凭据。用户无法采取任何措施来阻止其登录密码以明文形式发送。如今,以明文形式发送登录凭据的服务已经很少见。

在 1990 年代初期,Netscape Communications 认识到在万维网上进行安全通信的必要性。他们最终开发了 SSL(安全套接字层),并于 1995 年发布了 SSL 2.0 作为第一个公共版本。1999 年,Internet 工程任务组 (IETF) 开发了 TLS(传输层安全性)。虽然非常相似,但 TLS 1.0 是 SSL 3.0 的升级版,并提供了各种改进的安全措施。2018 年,TLS 对其协议进行了重大改革,并发布了 TLS 1.3。目的不是记住确切的日期,而是实现开发当前版本的 TLS(即 TLS 1.3)所投入的工作量和时间。二十多年来,每个版本都有很多东西需要学习和改进。

与其前身 SSL 一样,TLS 是一种在 OSI 模型的传输层运行的加密协议。它允许客户端和服务器之间通过不安全的网络进行安全通信。我们所说的安全是指机密性和完整性;TLS 确保没有人可以读取或修改交换的数据。请花点时间想一想,如果在网上购物、网上银行,甚至在线消息和电子邮件,而无法保证网络数据包的机密性和完整性,那会是什么样子。如果没有 TLS,我们将无法使用 Internet 来处理许多应用程序,这些应用程序现在已成为我们日常生活的一部分。

如今,数十种协议已经通过简单地添加 TLS 进行了安全升级。示例包括 HTTP、DNS、MQTT 和 SIP,它们已成为 HTTPS、DoT(DNS over TLS)、MQTTS 和 SIPS,其中附加的“S”由于使用了 SSL/TLS,代表安全。在以下任务中,我们将访问 HTTPS、SMTPS、POP3S 和 IMAPS。

技术背景

我们不会讨论 TLS 握手;但是,如果您好奇,可以查看网络安全协议室。我们将简要介绍如何设置和使用 TLS。

对于每个需要标识自身的服务器(或客户端),第一步是获取签名的 TLS 证书。通常,服务器管理员会创建证书签名请求 (CSR) 并将其提交给证书颁发机构 (CA);CA 验证 CSR 并颁发数字证书。收到(签名的)证书后,可以使用它向其他人识别服务器(或客户端),这些人可以确认签名的有效性。为了让主机确认签名证书的有效性,需要在主机上安装签名机构的证书。在非数字世界中,这类似于识别各种权威机构的邮票。下面的屏幕截图显示了 Web 浏览器中安装的受信任颁发机构。

image-20250408021405300

一般来说,签署证书需要支付年费。但是,Let’s Encrypt 允许您免费签署您的证书。

最后,我们应该提到一些用户选择创建自签名证书。自签名证书无法证明服务器的真实性,因为没有第三方确认它。

HTTPS协议

正如我们在 Networking Core Protocols 房间里所研究的那样,HTTP 依赖于 TCP,并默认使用端口 80。我们还看到了所有 HTTP 流量如何以明文形式发送,供任何人拦截和监控。下面的屏幕截图来自上一个房间,它清楚地说明了对手如何轻松读取客户端和服务器之间交换的所有流量。

让我们花点时间回顾一下 Web 浏览器可以通过 HTTP 请求页面之前的最常见步骤。将域名解析为 IP 地址后,客户端将执行以下两个步骤:

  • 与目标服务器建立 TCP 三次握手
  • 使用 HTTP 协议进行通信;例如,发出 HTTP 请求,例如 GET / HTTP/1.1

上述两个步骤显示在下面的窗口中。TCP 握手的三个数据包(标有 1)位于第一个包含 GET 的 HTTP 数据包之前。HTTP 通信标有 2。最后显示的三个数据包用于 TCP 连接终止,并标有 3。

image-20250408021637270

HTTP Over TLS

HTTPS 代表安全超文本传输协议。它基本上是 HTTP over TLS。因此,通过 HTTPS 请求页面需要以下三个步骤(解析域名后):

  1. 与目标服务器建立 TCP 三次握手
  2. 建立 TLS 会话
  3. 使用 HTTP 协议进行通信;例如,发出 HTTP 请求,例如 GET / HTTP/1.1

下面的屏幕截图显示,在前三个数据包中建立了 TCP 会话,标记为 1。然后,交换多个数据包以协商 TLS 协议,标有 212 是进行 TLS 协商和建立的地方 。

最后,在交换 HTTP 应用层数据时(图中标记为 3 的部分),Wireshark 截图中显示为 “Application Data”(应用数据),而非具体的协议名称(如 HTTP)。这是因为数据通过 443 端口(默认 HTTPS 端口)传输且经过 TLS/SSL 加密,Wireshark 无法直接解析加密后的内容,因此无法确认它是否为 HTTP 或其他协议(如 FTP over TLS)。image-20250408021811071

正如预期的那样,如果尝试跟踪数据包流并组合其所有内容,他们只会得到乱码,如下面的屏幕截图所示。交换的流量是加密的;红色由客户端发送,蓝色由服务器发送。如果不获取加密密钥,就无法知道内容。

获取加密密钥

将 TLS 添加到 HTTP 会导致所有数据包都被加密。除非我们获得私钥的访问权限,否则我们无法再看到交换数据包的内容。尽管我们不太可能访问 TLS 会话中用于加密的密钥,但在向 Wireshark 提供解密密钥后,我们重复了上述屏幕截图。TCP 和 TLS 握手不会更改;主要区别从标记为 3 的 HTTP 协议开始。例如,我们可以看到客户端何时发出 GET

image-20250408021935959

如果您想看到交换的数据,现在是您的机会!它仍然是隐藏在窥探者的常规 HTTP 流量。

image-20250408021955413

核心结论:TLS(传输层安全协议)为HTTP提供了安全保障,且无需对底层(如TCP/IP)或上层协议(如HTTP)进行任何修改。具体而言:

  1. TCP/IP协议栈保持原状:传输层(TCP)和网络层(IP)的运作机制未改变。
  2. HTTP的传输方式升级:原本通过TCP明文传输的HTTP数据,现改为通过TLS加密信道传输,但HTTP协议本身的结构和语法无需调整

SMTPS,POP3S和IMAPS

将 TLS 添加到 SMTP、POP3 和 IMAP 与将 TLS 添加到 HTTP 没有什么不同。与 HTTP 获取附加的 S 表示安全并变为 HTTPS、SMTP、POP3 和 IMAP 分别变为 SMTPS、POP3S 和 IMAPS 类似。通过 TLS 使用这些协议与使用 HTTP over TLS 没有什么不同;因此,HTTPS 讨论中的几乎所有要点都适用于这些协议。

不安全版本使用下表中所示的默认 TCP 端口号:

协议 默认端口号
HTTP 80
SMTP 25
POP3 110
IMAP 143

默认情况下,安全版本(即通过 TLS)使用以下 TCP 端口号:

协议 默认端口号
HTTPS 443
SMTPS 465 和 587
POP3S 995
IMAPS 993

TLS 可以添加到许多其他协议中;理由和优势是相似的。

SSH

我们在 Networking Concepts 会议室中使用了 TELNET 协议。尽管登录和管理远程系统非常方便,但当所有流量都以明文形式发送时,风险很大。使用 telnet 后,任何监控网络流量的人都很容易获得您的登录凭据。这个问题需要一个解决方案。Tatu Ylönen 开发了安全外壳 (SSH) 协议,并于 1995 年作为免费软件发布了 SSH-1。(有趣的是,Netscape Communications 在同一年发布了 SSL 2.0 协议。1996 年定义了一个更安全的版本 SSH-2。1999 年,OpenBSD 开发人员发布了 OpenSSH,这是 SSH 的开源实现。如今,当您使用 SSH 客户端时,它很可能基于 OpenSSH 库和源代码。

OpenSSH 有几个好处。我们将列出几个关键点:

  • 安全身份验证 :除了基于密码的身份验证外,SSH 还支持公钥和双因素身份验证。
  • 机密性 :OpenSSH 提供端到端加密,防止窃听。此外,它还会通知您新的服务器密钥,以防止中间人攻击。
  • 完整性 :除了保护交换数据的机密性外,加密技术还保护流量的完整性。
  • 隧道 :SSH 可以创建一个安全的“隧道”,通过 SSH 路由其他协议。此设置会导致类似 VPN 的连接。
  • X11 转发 :如果您连接到具有图形用户界面的类 Unix 系统,SSH 允许您通过网络使用图形应用程序。

您可以发出命令 ssh username@hostname 以连接到 SSH 服务器。如果用户名与您登录的用户名相同,则只需要 ssh hostname 。然后,系统会要求您输入密码;但是,如果使用公钥身份验证,您将立即登录。

下面的屏幕截图显示了在远程 Kali Linux 系统上运行 Wireshark 的示例。需要参数 -X 来支持正在运行的图形界面,例如 ssh 192.168.124.148 -X。(本地系统需要安装合适的图形系统。

image-20250408022949700

当 TELNET 服务器侦听端口 23 时,SSH 服务器侦听端口 22。

SFTP和FTPS

SFTP 代表 SSH 文件传输协议,允许安全的文件传输。它是 SSH 协议套件的一部分,共享相同的端口号 22。如果在 OpenSSH 服务器配置中启用,则可以使用 sftp username@hostname 等命令进行连接。登录后,您可以发出 get filenameput filename 等命令来分别下载和上传文件。一般来说,SFTP 命令类似于 Unix,可能与 FTP 命令不同。

SFTP 不应与 FTPS 混淆。您认为 FTPS 代表 File Transfer Protocol Secure 是正确的。FTPS 如何得到保护?是的,您正确地估计它是使用 TLS 保护的,就像 HTTPS 一样。FTP 使用端口 21,而 FTPS 通常使用端口 990。它需要证书设置,并且允许通过严格的防火墙可能很棘手,因为它使用单独的连接进行控制和数据传输。

设置 SFTP 服务器就像在 OpenSSH 服务器中启用一个选项一样简单。与 HTTPS、SMTPS、POP3S、IMAPS 和其他依赖 TLS 确保安全性的协议一样,FTPS 需要适当的 TLS 证书才能安全运行。

VPN

考虑一家在不同地理位置设有办事处的公司。该公司能否将其所有办公室和站点连接到主分支机构,以便任何设备都可以访问共享资源,就像实际位于主分支机构一样?答案是肯定的;此外,最经济的解决方案是使用 Internet 基础设施设置虚拟专用网络 (VPN)。此处的重点是 VPN 中 V 表示虚拟。

在设计 Internet 时,TCP/IP 协议套件专注于传输数据包。例如,如果路由器停止服务,路由协议可以适应并选择不同的路由来发送其数据包。如果数据包未被确认,TCP 具有内置机制来检测这种情况并重新发送。但是,没有任何机制可以确保所有离开或进入计算机的数据都受到保护,不会泄露和更改。一种流行的解决方案是设置 VPN 连接。这里的重点是 VPN 中 Private 的 P。

几乎所有公司都要求在其虚拟网络中进行“私有”信息交换。因此,VPN 提供了一种非常方便且相对便宜的解决方案。主要要求是 Internet 连接以及 VPN 服务器和客户端。

下面的网络图显示了一个公司示例,其中有两个远程分支机构连接到 main 分支机构。远程分支中的 VPN 客户端应连接到主分支中的 VPN 服务器。在这种情况下,VPN 客户端将加密流量,并通过已建立的 VPN 隧道(以蓝色显示)将其传递到主分支。VPN 流量仅限于蓝线;绿线将承载解密的 VPN 流量。

image-20250408023521571

在下面的网络图中,我们看到两个远程用户使用 VPN 客户端连接到主分支中的 VPN 服务器。在这种情况下,VPN 客户端连接单个设备。

image-20250408023613003

一旦建立了 VPN 隧道,我们所有的 Internet 流量通常都将通过 VPN 连接路由,即通过 VPN 隧道。因此,当我们尝试访问 Internet 服务或 Web 应用程序时,他们不会看到我们的公共 IP 地址,而是 VPN 服务器的地址。这就是为什么一些 Internet 用户通过 VPN 连接以规避地理限制的原因。此外,本地 ISP 只会看到加密流量,这限制了其审查 Internet 访问的能力。

换句话说,如果用户连接到日本的 VPN 服务器,他们访问的服务器将看起来就像位于日本一样。这些服务器将相应地定制他们的体验,例如将他们重定向到该服务的日本版本。下面的屏幕截图显示了连接到日本的 VPN 服务器后的 Google 搜索页面。

image-20250408023651114

最后,尽管在许多情况下,人们会建立 VPN 连接以通过 VPN 隧道路由所有流量,但某些 VPN 连接不会这样做。VPN 服务器可能配置为允许您访问私有网络,但不路由您的流量。此外,一些 VPN 服务器会泄露您的实际 IP 地址,尽管它们应该通过 VPN 路由您的所有流量。根据您使用 VPN 连接的原因,您可能需要运行更多测试,例如 DNS 泄漏测试。

最后,一些国家认为使用 VPN 是非法的,甚至会受到惩罚。在使用 VPN 之前,尤其是在旅行时,请查看当地的法律法规。

使用 Hugo 构建
主题 StackJimmy 设计