我想设计一个将服务器放置在Internet上的客户端服务器应用程序。我假设我可以使用VPN(使用IPSec?)或使用SSL连接(可能是https)来建立客户端-服务器连接。 VPN / IPsec和SSL / https在通过Internet保护客户端服务器连接上有什么区别?

评论

对目标客户群和应用程序性质的更多了解将帮助您获得更好的答案,并帮助我们避免无关的切线:)

如何选择VPN提供商? security.stackexchange.com/questions/3973/…

要清楚地了解VPN,请观看此视频youtube.com/watch?v=KFODy-dHcU8

#1 楼

VPN的意思是“虚拟专用网”。它是一个通用概念,它指定更大网络的一部分(例如,大型Internet),该部分通过非硬件手段(即“虚拟”手段)在逻辑上与更大网络隔离:不是我们在使用不同的电缆和开关;相反,SSL是通过使用加密来执行隔离的。SSL(现称为TLS)是一种采用双向传输介质并提供安全的双向介质的技术。它要求底层的传输介质“最可靠”(当未被攻击时,数据字节以适当的顺序传输,没有丢失且没有重复)。 SSL提供机密性,完整性(可靠地检测到主动更改)和某些身份验证(通常是服务器身份验证,如果双方都使用证书,则可能是相互的客户端-服务器身份验证)。

因此,VPN和SSL并非来自同一级别。 VPN实现在某些时候需要某种加密。某些VPN实现实际上使用SSL,从而形成了分层系统:VPN通过在SSL连接上对IP数据包进行序列化来传输(虚拟网络的)IP数据包,而SSL连接本身使用TCP作为传输介质,该传输介质基于IP数据包(在IP物理不受保护的网络)。 IPsec是另一种技术,它更深入地集成在数据包中,从而抑制了其中的某些层,因此效率更高(带宽开销更少)。另一方面,必须在操作系统网络代码中对IPsec进行非常深入的管理,而基于SSL的VPN仅需要某种方式来劫持传入和传出的流量。其余的可以在用户级软件中关闭。

据我了解,您有一个应用程序,其中某些计算机必须通过Internet进行通信。您有一些安全要求,并且正在考虑使用SSL(通过IP上的TCP)或可能使用HTTPS(即基于IP的HTTP-基于SSL的TCP / IP)或在客户端和服务器之间建立VPN以及在该专用网络中使用“普通” TCP(VPN的要点是为您提供了一个安全的网络,您无需再担心机密性)。使用SSL,您的连接代码必须了解安全性。从编程的角度看,您不会像“只是一个套接字”那样打开SSL连接。一些库使其变得相对简单,但是仍然必须在应用程序级别管理安全性。另一方面,VPN是在操作系统级别配置的,因此安全性不是在客户端上的应用程序与服务器上的应用程序之间,而是在客户端操作系统和服务器操作系统之间:安全性是不同的模型,尽管在很多情况下差异并不明显。

在实践中,VPN意味着客户端操作系统上需要一些配置步骤。这是非常侵入性的。在同一客户端上使用两个基于VPN的应用程序可能会出现问题(从安全角度考虑,因为客户端随后充当了将两个VPN链接在一起的桥梁,这两个VPN在名义上应该彼此隔离,而且实际上是由于地址冲突空间)。如果客户是客户,让他正确配置VPN看起来像是不可能的任务。但是,VPN意味着应用程序无需了解安全性,因此可以更轻松地在应用程序中集成第三方软件。

评论


除此之外,鉴于许多应用程序没有正确实现SSL库,从而导致严重的安全妥协,因此考虑使用VPN以确保您不依赖于每个应用程序单独的SSL实现,而不是依赖于一个SSL实现可能是明智的。经过了良好的审核(OpenVPN等开源VPN解决方案)。

–deed02392
13年2月22日在17:01

为了明确起见,SSL发生在OSI模型的第7层-每个应用程序都必须具有自己的实现。 (大多数)VPN在网络层(3)上运行,这意味着发生在更高层的所有内容至少都不会裸露在Big Bad Internet上。这并不意味着它们是安全的,这一假设可能很危险。

–quadruplebucky
2014年2月17日的1:30

除非我错了,否则从实践的角度来看,一个人将VPN用作私有网络。在全球/实际情况下,SSL面向公众,VPN则面向私有网络。这当然太简单了。如果是这样,请不要怪,但要解释。

– Strukt
15年8月3日,12:09



@Strukt:您可以通过关闭门来保护自己的家。人们从外面看到关门的表面。

–托马斯·波宁(Thomas Pornin)
15年8月3日,12:15

@Strukt:不。 SSL是门,VPN是房子的内容。你一无所获;他们不应该反对。 SSL是一项确保某些安全属性的技术,这些属性对于各种用途都是很好的构建块,其中之一就是“ VPN”。 (我想当您阅读“ SSL”时,您会认为“带有https://的网站,这可能是术语混淆的根源。)

–托马斯·波宁(Thomas Pornin)
15年8月3日,12:35

#2 楼

如果配置不正确,它们都存在安全问题。但是首先让我们从一些定义开始:

思科对VPN有一个很好的定义:


VPN可以采用多种形式。 VPN可以在两个终端系统之间,也可以在两个或多个网络之间。可以使用隧道或加密(基本上在协议栈的任何层)或同时使用两者来构建VPN,或者使用MPLS或“虚拟路由器”方法之一来构建VPN。 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浏览器提供对网络/系统的访问的手段正变得越来越普遍。这种方法具有很多优点,因为它使用通用的Web浏览器来启用安全连接。这种方法的粒度也是控制对特定应用程序的访问的好方法。

关于安全性问题-

SSL-



弱的安全密码可能会导致对最终用户进行中间人式攻击,从而导致数据的机密性/完整性丧失。


HTTP / HTTPS内容配置不当还会导致数据的机密性/完整性丧失。



IPSEC-


介绍潜在的DoS条件。例如,http://www.cisco.com/en/US/products/products_security_advisory09186a0080b20ee5.shtml
机密性问题的丢失,例如2008 Microsoft问题,可能导致系统忽略IPsec策略并传输网络流量以明文形式。 https://docs.microsoft.com/zh-CN/security-updates/securitybulletins/2008/ms08-047


评论


顺便说一下,@ David并非所有SSL VPN都限于浏览器客户端。有一些提供客户端的SSL VPN产品(名称使我迷惑了),它们可以通过SSL隧道重定向所有TCP / IP数据包,而不仅仅是针对服务器的HTTPS请求。

–AVID♦
2011年1月6日20:00



@AviD-完全同意,例如,OpenVPN做到了您所说的话-“ OpenVPN是功能齐全的SSL VPN,它使用行业标准SSL / TLS协议实现OSI第2层或第3层安全网络扩展。”但是,然后您将返回使用客户端上安装的软件。

– David Stubley
2011年1月7日,9:21

是的,但是设置和分发要简单得多。这仍然可以通过网络传递...

–AVID♦
2011-1-7 14:28

#3 楼

这里有一些很好的答案,我不会重复已经说过的话。
但是,我发现缺乏一点-临时设置SSL容易得多,尤其是如果您不这样做的话IPsec对客户端证书有要求。另一方面,IPsec始终需要客户端证书(假设是正常的典型设置),并且在初始设置和分发中还存在其他困难。

照这样,IPsec通常更适合于受控网络,而在野外未知的Internet中则不太适合。请参见其他问题:“ IPsec(Internet协议安全性)事实”。

因此,回到您的实际问题,在几乎所有将服务器连接到Internet的情况下,您都不希望用户使用VPN进行连接。 (当然,有例外。)
相反,只需在服务器上设置SSL证书,将客户端指向它,就可以了(只要确保您明确验证了证书,具体取决于什么)即可。您正在使用的语言/技术/图书馆...)

#4 楼

您是否正在寻找这些选项来创建安全的VPN? SSL通常更易于部署,并且对于桌面到网络类型的VPN更好地支持,例如在家中的员工正在连接到公司网络时。如果您要进行更复杂的部署,例如网络对网络加密的VPN(例如,在两个不同组织之间),则IPSEC将提供更好的控制和更多的自定义选项。

有Juniper Networks撰写的有关该主题的体面白皮书,尽管它可能会偏向于其产品的优势。

评论


该白皮书说ipsec用于连接两个远程分支。不能让单个远程用户将一台计算机连接到远程分支?为什么在这里没有提到?

–user1184
2011-1-25的2:35

#5 楼

这可能是一个很长的答案,但是我会尝试一个简短的答案。

当您使用https时,您的浏览器(充当SSL客户端)将仅加密与Web服务器的连接。

使用VPN时,需要一个特殊的客户端,并在客户端和服务器之间建立隧道。然后,您可以配置通过隧道的流量。这可以是所有内容,也可以只是您的HTTP流量。

当您只想设置可以与http通信的客户端/服务器应用程序时,最简单的解决方案应该是https流量,加密。设置和维护VPN要复杂得多。

#6 楼

这取决于您的威胁模型,所需的客户端服务器协议的性质以及您的客户。

这是为老练的最终用户设计的吗?然后使用SSL-此时,VPN复杂性将关闭许多潜在用户。

是否要将客户端部署为浏览器应用程序(使用JavaScript的perahps)?然后再次使用https / ssl似乎是一种方法。

服务器是否曾经需要异步通知客户端某些信息?那么HTTPS可能不是您想要的(尽管可以这样做)。

网络钓鱼的风险有多大?如果攻击者很容易将人们引诱为MITM,则SSL可能更好,因为SSL会向客户端验证每个服务器。一旦建立了典型的VPN,就无法帮助用户避免攻击者进入VPN上的其他主机。这可能不是很大的风险,但这又取决于您在做什么。

如果您要在云(客户端和服务器)中部署它,那么您可能会获得VPN几乎是免费的,可以解决一些非常偶然的威胁。

#7 楼

好吧,这种差异有点像圆形和正方形之间的差异(两者都是形状,但差异很大)。他们都保护通信,但是以不同的级别和方式进行通信。 IPSEC是有线加密和授权,而SSL是特定于应用程序的。

IPSEC具有访问控制,而SSL没有访问控制。

您能更具体地说明一下您要尝试的内容吗?出来吗?

评论


在ip级别(ipsec)保护数据是否比在应用程序级别(ssl)保护数据有优势?

–user1184
2011年1月25日,下午2:20

#8 楼

我距离安全专家还很远,但是我认为两者之间最重要的区别不在其他答案上。

通过VPN,通信方式是这样的:

HTTP client <-[raw]-> VPN client
  <-[encrypted]-> 
VPN server <-[raw]-> HTTP server


通过HTTP,它是这样的:

HTTP client
  <-[encrypted]-> 
HTTP server


因此,不受保护的数据可以通过VPN在客户端的本地网络和本地传输服务器网络。如果您不完全信任那些网络,那么使用HTTP是一个明智的主意。请注意,VPN和HTTP客户端-客户端,服务器-服务器对不一定位于同一台计算机上,例如路由器可以配置为VPN服务器或客户端。

由于这些技术在不同的级别上起作用,因此它们并不是互斥的,因此,如果您想要另一层保护并且您不希望这样做,则可以同时使用这两种技术。不必担心随之而来的性能下降,或者您可以只使用其中之一来更好地满足您的需求。据我所知,如果正确配置了这两种技术,它们就会被认为是安全的。