我想设计一个客户端-服务器应用程序,服务器放置在 Internet 上。我假设我可以使用 VPN(是否使用 IPSec?)或使用 SSL 连接(可能是 https)来设置客户端-服务器连接。VPN/IPsec 和 SSL/https 在通过 Internet 保护客户端服务器连接方面有什么区别?
VPN 连接和 SSL 连接之间的安全性有何区别?
VPN 的意思是“虚拟专用网络”。这是一个通用概念,它指定更大网络的一部分(例如整个互联网),通过非硬件手段(这就是“虚拟”的意思)在逻辑上与更大的网络隔离开来:这并不是我们使用不同的电缆和开关;相反,隔离是通过使用密码学来执行的。
SSL(现在称为 TLS)是一种采用双向传输介质并提供安全双向介质的技术。它要求底层传输介质“最可靠”(在不受攻击时,数据字节按适当顺序传输,不丢失也不重复)。SSL 提供机密性、完整性(可靠地检测到主动更改)和一些身份验证(通常是服务器身份验证,如果在双方都使用证书,则可能是相互的客户端-服务器身份验证)。
所以 VPN 和 SSL 不是一个级别的。VPN实施在某些时候需要一些密码学。一些 VPN 实现实际上使用 SSL,从而形成了一个分层系统:VPN 通过在 SSL 连接上序列化 IP 数据包(虚拟网络的)来传输它们,该连接本身使用 TCP 作为传输介质,它建立在 IP 数据包之上(在物理未受保护的网络)。IPsec 是另一种更深入地集成在数据包中的技术,它抑制了其中的一些层,因此效率更高(带宽开销更少)。另一方面,IPsec 必须在操作系统网络代码中进行相当深入的管理,而基于 SSL 的 VPN 只需要某种方式来劫持传入和传出的流量;其余的可以在用户级软件中关闭。
据我了解您的问题,您有一个应用程序,其中一些机器必须通过 Internet 进行通信。您有一些安全要求,并且正在考虑使用 SSL(通过 IP 上的 TCP)或可能的 HTTPS(即 HTTP-over-SSL-over-TCP-over-IP),或者在客户端和服务器之间设置 VPN在该专用网络中使用“普通” TCP(VPN 的重点是为您提供一个安全的网络,您无需再担心机密性)。使用 SSL,您的连接代码必须注意安全性;从编程的角度来看,您不会像“只是一个套接字”一样打开 SSL 连接。一些库使它相对简单,但您仍然必须在应用程序级别管理安全性。另一方面,VPN 是在操作系统级别配置的,
实际上,VPN 意味着客户端操作系统上需要一些配置步骤。这是相当有侵略性的。在同一个客户端上使用两个基于 VPN 的应用程序可能会出现问题(安全方面,因为客户端充当桥接器,将名义上应该相互隔离的两个 VPN 链接在一起,实际上,由于地址冲突空间)。如果客户是客户,让他正确配置 VPN 似乎是一项不可能完成的任务。但是,VPN 意味着应用程序不需要了解安全性,因此这使得在您的应用程序中集成第三方软件变得更加容易。
如果配置不正确,两者都会出现安全问题。但首先让我们从一些定义开始:
思科对 VPN 有一个很好的定义:
VPN 可以采取多种形式。VPN 可以位于两个终端系统之间,也可以位于两个或多个网络之间。VPN 可以使用隧道或加密(基本上在协议栈的任何层)构建,或两者兼而有之,或者使用 MPLS 或“虚拟路由器”方法之一构建。VPN 可以由通过租用线路、帧中继或 ATM 连接到服务提供商网络的网络组成,或者 VPN 可以由连接到集中式服务或其他拨号用户的拨号用户组成。https://www.cisco.com/c/en_in/products/security/vpn-endpoint-security-clients/what-is-vpn.html
至于 SSL:
SSL(安全套接字层),也称为 TLS(传输层安全性),是一种允许两个程序以安全方式相互通信的协议。与 TCP/IP 一样,SSL 允许程序创建“套接字”,即通信端点,并在这些套接字之间建立连接。但是建立在 TCP 之上的 SSL 增加了额外的加密功能。http://www.boutell.com/newfaq/definitions/ssl.html
关于您的问题,主要区别在于 SSL 通常使用浏览器对最终用户和服务器之间的数据进行加密,并且通常用于需要保护数据机密性和完整性的网站领域。
VPN/IPSEC 需要特定的 VPN 客户端软件,通常用于提供对系统或网络的远程访问。也可以选择使用 L2TP 或 L2F 而不是 IPSEC。
然而,作为通过网络浏览器提供对网络/系统的访问的一种方式,SSL VPN 正变得越来越普遍。这种方法有很多好处,因为它使用通用 Web 浏览器来启用安全连接。这种方法的粒度也是控制对特定应用程序的访问的好方法。
至于安全问题——
SSL -
弱安全密码可能导致对最终用户进行中间人攻击的能力,从而导致数据的机密性/完整性丢失。
- 配置不当的 HTTP / HTTPS 内容组合也可能导致数据的机密性/完整性丢失。
IPSEC -
引入潜在的 DoS 条件。例如http://www.cisco.com/en/US/products/products_security_advisory09186a0080b20ee5.shtml
机密性丢失问题,例如 2008 Microsoft 问题,可能导致系统忽略 IPsec 策略并以明文形式传输网络流量。https://docs.microsoft.com/en-us/security-updates/securitybulletins/2008/ms08-047
这里有一些非常好的答案,我不会重复已经说过的内容。
但是,我发现缺少一点 - SSL 更容易在 ad-hoc 基础上设置,特别是如果您不需要客户端证书。
另一方面,IPsec 始终需要客户端证书(假设是正常的典型设置),并且在初始设置和分发中也存在其他困难。
因此,IPsec 通常更适合受控网络,而在狂野未知的 Internet 上则不太适合。请参阅其他问题的更多信息:“ IPsec(互联网协议安全)事实”。
因此,回到您的实际问题,在几乎所有将服务器放在 Internet 上的情况下,您不会期望您的用户使用 VPN 进行连接。(当然存在例外。)
相反,只需在您的服务器上设置 SSL 证书,将您的客户端指向它,您就可以开始了(只要确保您明确验证证书,具体取决于语言/技术/您正在使用的库...)
您是否正在寻找这些选项来创建安全的 VPN?SSL 通常更易于部署,并且对于桌面到网络类型的 VPN 得到更好的支持,例如当员工在家连接到公司网络时。如果您正在进行更复杂的部署,例如网络到网络加密 VPN(例如,在两个不同组织之间),那么 IPSEC 将提供更好的控制和更多的自定义选项。
Juniper Networks有一篇关于该主题的不错的白皮书,尽管它可能偏向于他们产品的优势。