【防火墙技术连载32】强叔侃墙 VPN篇 远程接入IPSec现短板,SSL VPN登上历史舞台

digest [复制链接]
发表于 : 2014-9-15 15:21:09 最新回复:2017-05-02 18:25:49
18918 30
强叔侃墙
强叔侃墙 官方号

强叔耗费长达七篇的笔墨介绍了VPN江湖中大佬地位的IPSec,终于将其事迹介绍完毕,不必再“且听下回分解”。 然,江湖从来不曾风平浪静,又是风起云涌时;江山亦从来代有才人出,各领***数百年。
随着互联网不可预测的高速发展,如今可谓已“无处不网络,随时可接入”,PC、笔记本人人具备但已被嫌弃厚重不便,人人手持智能手机或平板随时随地上网。时代始终不断变迁,科技始终不断进步,不变的是科技以人为本的理念――人们追求的是更便捷、更简单、更安全。

在远程接入、访问内网这一具体应用场景中,传统VPN巨头IPSec也暴露出自身一些短板:
(1)组网不灵活。建立IPSec VPN,如果增加设备或调整用户的IPSec策略,需要调整原有IPSec配置。
(2)需要安装客户端软件,导致在兼容性、部署和维护方面都比较麻烦。
(3) 只能基于五元组数据流建立IPSec,无法明确区分出使用某终端接入IPSec的人是否为指定的授权用户,即管理员无法确知是谁在利用VPN访问内网资源。
所谓车到山前必有路,有问题就会有解决办法,一种新的技术开始登上历史舞台――SSL VPN作为新型的轻量级远程接入方案,有效地解决了上述问题,在实际远程接入方案中应用非常广泛。
(1)SSL VPN工作在传输层和应用层之间,不会改变IP报文头和TCP报文头,不会影响原有网络拓扑。如果网络中部署了防火墙,只需放行传统的HTTPS(443)端口。
(2) SSL VPN基于B/S架构,无需安装客户端,只需要使用普通的浏览器进行访问,方便易用。
(3)更重要的,相对于IPSec网络层的控制,SSL VPN的所有访问控制都是基于应用层,其细分程度可以达到URL或文件级别,可以大大提高企业远程接入的安全级别。

下面强叔就为小伙伴带来详细的SSL VPN技术介绍。
所谓SSL VPN技术,实际是VPN设备厂商创造的名词,指的是远程接入用户利用标准Web浏览器内嵌的SSL(Security Socket Layer)封包处理功能,连接企业内部的SSL VPN服务器,然后SSL VPN服务器可以将报文转向给特定的内部服务器,从而使得远程接入用户在通过验证后,可访问企业内***定的服务器资源。其中,远程接入用户与SSL VPN服务器之间,采用标准的SSL协议对传输的数据包进行加密,这相当于远程接入用户与SSL VPN服务器之间建立起隧道。<注:远程接入用户以下简称用户>
SSL VPN典型应用场景如下图所示:

一般来说,SSL VPN服务器通常部署在企业出口防火墙的内部,而华为USG2000、USG5000和USG6000系列产品可以直接作为SSL VPN服务器,two in one,节省网络建设和管理成本。顺便打个广告,华为亦推出了SVN2000和SVN5000系列专门产品,可以提供支持更多用户数、支持更多应用场景的SSL VPN解决方案。
本篇强叔主要介绍远程接入用户与SSL VPN服务器建立连接、成功登录SSL VPN服务器的过程①。SSL VPN服务器如何将远程接入用户的请求转向给各内部服务器②,将在下篇介绍。

在开始枯燥的原理讲解之前,强叔先给小伙伴演示下登录SSL VPN服务器的步骤,直观感受下SSL VPN的便捷。
作为远程接入用户,访问SSL VPN服务器的典型步骤非常简单:


步骤

具体描述

1

打开浏览器,输入https://SSL VPN服务器的地址:端口https://域名,发起连接。

2

Web页面可能会提示即将访问的网站安全证书有问题,我们选择“继续浏览该网站”。

3

成功刷新出SSL VPN服务器登录界面,界面右侧提示输入用户名/密码。

4

输入预先从企业网络管理员处获得的用户名/密码,成功登录SSL VPN服务器,进入访问内网资源页面。

 


这几个步聚就能保证SSL VPN建立、保证访问安全?为什么有提示“访问的网址安全证书有问题”?小伙伴心中可能飞过了无数问号。带着这些疑问,我们就研究一下在这简短的几个步骤中,远程用户是如何与SSL VPN服务器进行报文交互的。
强叔认为这其中有两个关键之处,亦是SSL VPN技术两个基本安全性的体现:
1、 传输过程安全。
在上文SSL VPN定义中,我们提到,远程接入用户与SSL VPN服务器之间,采用标准的SSL协议对传输的数据包进行加密。那么从用户打开浏览器、访问SSL VPN服务器地址开始,SSL协议就开始运行。为此我们要详细地研究下SSL协议的运行机制。
2、 用户身份安全。
在上文演示登录SSL VPN服务器时,用户访问SSL VPN服务器登录界面,SSL VPN服务器要求输入用户名/密码。这实际是SSL VPN服务器要求对用户身份进行认证。SSL VPN服务器往往支持多种用户认证方式,来保证访问的安全性、合法性。华为USG系列产品支持用户名/密码的本地认证;服务器认证;证书认证;用户名/密码+证书双重因素认证等。

一、 SSL协议的运行机制

SSL(Security Socket Layer,安全套接层)是一种在客户端和服务器之间建立安全通道的协议,是Netscape公司提出的基于web应用的安全协议,它为基于TCP/IP连接的应用程序协议(如HTTP、Telenet和FTP等)提供数据加密、服务器认证、消息完整性以及可选的客户端认证,也就是说,SSL协议具备如下特点:
(1)所有要传输的数据信息都是加密传输,第三方无法***。
(2)具有校验机制,信息一旦被篡改,通信双方会立刻发现。
(3)配备身份证书,防止身份被冒充。
SSL协议自1994年被提出以来一直在不断发展。Netscape公司发布的SSL2.0和SSL3.0版本得到了大规模应用。而后,互联网标准化组织基于SSL3.0版本推出了TLS1.0协议(又称SSL3.1),之后又推出了TLS1.1和TLS1.2版本。当前,主流浏览器大多已实现了对TLS1.2的支持。华为防火墙支持SSL2.0、SSL3.0和TLS1.0版本。
SSL协议结构分为两层,底层为SSL记录协议,上层为SSL握手协议、SSL密码变化协议、SSL警告协议,各协议的作用简介绍下。


可以看到,SSL连接的建立,主要依靠SSL握手协议,下面我们来详细研究SSL握手协议。
简短一句话就可以概括SSL握手协议的基本设计思路:采用公钥加密法进行密文传输。也就是说,服务器端将其公钥告诉客户端,然后客户端用服务器的公钥加密信息,服务器收到密文后,用自己的私钥解密。


这个设计思路有两个问题,需要继续细化解决:
(1)服务器将其公钥告诉客户端时,如何保证该公钥不被篡改?
解决办法:引入数字证书。将服务器公钥放入服务器证书中,由服务器将证书传给客户端。只要证书可信,公钥就可信。
(2)公钥加密法安全性高,但也由于两端各自用私钥解密,导致算法较复杂、加解密计算量大,如何提升效率?
解决办法:引入一个新的“会话密钥”。客户端与服务器采用公钥加密法协商出此“会话密钥”,而后续的数据报文都使用此“会话密钥”进行加密和解密(即对称加密法)。对称加密法运算速度很快,这样就大大提升了加解密运算效率。还得罗嗦一下,密钥实际就是一个服务器和客户端共享的密钥,叫“会话密钥”是因为引入了会话Session的概念,就是基于TCP的SSL每个连接与一个会话相关联,会话由SSL握手协议来创建,为每个连接提供完整的传输加密,即握手过程包含在会话之中。

既然SSL握手协议的设计已经解决了关键问题,下面就要落地具地设计细节了:通过服务器与客户端的四次通信来实现上述设计思路,从而能够保证握手阶段之后能够进行高效、安全的加密报文传输。
SSL握手涉及的四次通信具体内容如下。需要注意的是,此阶段的所有通信都是明文的。



小伙伴们在看完SSL握手协议四次通信的具体内容之后,估计又会产生几个问号,强叔已在此恭候:
(1)上述当随机数pre-master-key出现时,已经是第三个随机数。有了它以后,客户端和服务器就同时有了三个随机数,接着双方就用事先商定的加密方法,各自生成本次会话所用的同一把"会话密钥"。为什么要用三个随机数来生成“会话密钥”呢?
答:对于公钥加密法(RSA密钥交换算法)来说,三个随机数通过一个密钥导出器,最终导出一个对称密钥,显然是为了增强安全性。pre-master-key之所以存在,是因为SSL协议不信任每个主机都能产生“完全随机”的随机数。而如果随机数不随机,就有可能被猜测出来,安全性就存在问题。而三个伪随机数凑在一起就十分接近随机了,每增加一个数,随机性增加的可不是一。
(2)上述SSL握手协议第②次通信:服务器回应(Sever Hello)时发出了自己的证书,而马上客户端会对服务器的证书进行验证,也就是客户端在验证服务器的合法性。这是否与演示登录SSL VPN服务器时,第2步骤中曾遇到了一个警告,即“为什么有提示访问的网址安全证书有问题”相关联?
答:其实从第1步骤客户端(远程用户)发起https访问SSL VPN服务器起,SSL协议已开始运行,第2步骤的提示,恰恰可以与SSL握手协议的第②次通信相对应:此时服务器将自己的本地证书传给了客户端,客户端要对服务器的证书进行认证。提示警告,说明客户端认为该服务器证书不可信。如果平时我们访问网银等界面出现此提示时,要提高警惕,防止误入钓鱼网站。而此时,我们选择强制相信该网站。

至此,强叔将SSL握手协议的运行机制讲解完毕,喘口气,咱们还得一切从实际出发,用实践这个唯一标准来检验真理。
<步骤1>以防火墙作为SSL VPN服务器,在防火墙上完成相关配置。
SSL服务器的功能在防火墙上被称为虚拟网关。虚拟网关的地址/域名即为SSL VPN服务器的地址/域名。
a.配置虚拟网关,启用SSL VPN服务器功能,配置服务器地址等。
b.配置认证授权方式为本地认证、并创建用户包括配置用户名和密码。
c.配置防火墙安全策略,保证网络互通。
<步骤2>按本文开篇演示的客户端登录SSL VPN服务器步骤、刚刚配置好的用户名/密码,登录SSL VPN服务器。
a.客户端10.108.84.93以IE浏览器向防火墙的虚拟网关https://10.174.64.61发起链接请求。如下图所示,No.21-No.29展示了完SSL握手的四次通信过程,至No.29服务器回应Server Finished Message(已被加密,提示为加密的握手消息)后,对应登录到提示安全证书有问题的警告界面。此时客户端与服务器实际并未开始正常通信,而是在SSL握手阶段,客户端验证服务器不合法,在其Web界面提示用户是否继续浏览该网站。

b.强制信任,选择“继续浏览该网站”,从No.103起客户端要求使用新会话,重新发起SSL握手协议。握手完成之后,开始正常的加密通信,直至用户浏览器上成功加载出防火墙虚拟网关的用户登录界面。

c.输入用户名/密码,从No.1561起继续发起SSL握手协议,经过四次通信协商出“会话密钥”,从携带用户名/密码的报文起所有用户与服务器之前的数据被加密(显示为Application Data)发送给服务器。

二、 用户身份认证

为了保证SSL VPN接入用户的合法性、提升系统安全性,SSL VPN服务器往往支持多种认证方式,上文我们一直在以配置并存储在防火墙上的用户名/密码为例,这是最基本最简单的认证方式。实际华为防火墙支持以下认证方式:

  • 用户名/密码的本地认证:即上文各种举例,指将用户名/密码在防火墙上配置并存储,用户输入与之匹配的用户名/密码即可成功登录。
  • 用户名/密码的服务器认证:指将用户名/密码存储在专门的认证服务器上,用户输入用户名/密码后,防火墙将其转至认证服务器认证。当前支持的认证服务器类型包括:RADIUS、HWTACACS、SecurID、AD、LDAP。
  • 证书匿名认证:指用户的客户端配备客户端证书,防火墙通过验证客户端的证书来认证用户身份。
  • 证书挑战认证:指服务器通过用户名/密码+客户端证书双重因素认证用户身份。可以看出,此种方式是最安全的。
    • 单用客户端证书认证,当客户端丢失或被非法使用时就无法保证安全;
    • 单用用户名/密码认证,当使用不同客户端时,客户端本身可能存在安全隐患。双重因素认证方式,保证了指定用户、使用指定客户端登录SSL VPN服务器,进而合法访问内网资源。

用户名/密码的服务器认证和本地认证,即为最为常见的用户认证实现,此处不再赘述。下面强叔介绍下证书认证。
证书挑战认证比证书匿名认证多了一次用户名/密码认证,原理基本一致,可以一并讲解。

防火墙通过验证客户端的证书来认证用户身份,流程如下:
①用户、防火墙分别导入由同一CA机构颁发的客户端证书和客户端CA证书。
②用户(客户端)将自己的证书发给防火墙,防火墙对该证书进行认证。满足以下几个条件,则认证通过:

  • 客户端证书与防火墙上导入的客户端CA证书由同一家CA颁发。按照②所述,正是应为同一家CA机构颁发。
  • 客户端证书在有效期内。
  • 客户端证书中的用户过滤字段是防火墙上已经配置并存储的用户名。例如,客户端证书的用户过滤字段CN=user000019,那么防火墙上已经配置对应的用户名user000019,表明这是颁发给user000019的客户端证书。


③用户通过防火墙的身份认证后,会成功登录资源界面,可以开始访问内网的指定资源。

前面强叔已经展示了以用户名/密码登录防火墙虚拟网关时对SSL握手阶段的抓包,下面我们将认证方式改为证书匿名认证,看一下握手协议后,加密数据传输过程中服务器是如何认证客户端证书的:
在防火墙虚拟网关界面,选择客户端要使用的证书后,按回车确认,正常抓包如下,SSL握手协议后,又有一堆加密的握手信息和数据。这无法分辨到底是什么报文,于是我们导入防火墙(SSL服务器)的私钥、利用抓包工具对抓到的报文进行解密。
如下图所示,左右对比之下,我们可以看到,从No.895开始,显示为Euncrypted Hanashake Message的第一条消息,实际是服务器10.174.64.61对客户端10.108.84.93发出Hello Request,然后客户端回应,随后服务器发出Server Hello,并且从这条之后,服务器对客户端发出认证其证书的请求。从抓包来看,由于某些原因,这次协商没有成功,客户端和服务器的协商会继续进行。
在No.1045开始,服务器再次发现Hello Request,然后继续执行,No.1085服务器要求客户端提供证书,然后No.1088客户端发出其证书给服务器,No.1097服务器对客户端证书进行认证,抓包显示为证书非法,无法通过认证。非法没关系,Alert多么显眼,突出反映了服务器对客户端证书认证的完整过程,请小伙伴左右对比,一揭真相^_^

以上,强叔将远程用户与SSL VPN服务器建立连接、成功登录SSL VPN服务器的过程就全部介绍完了。开篇时强叔提到,后续将继续介绍SSL VPN服务器如何将远程用户的请求转向给各内部服务器。在未来的几篇SSL VPN系列里,强叔将排出兵器谱,从访问控制粒度由小到大,首先对办公应用中的最常见的Web访问(E-mail、电子流等)和文件访问进行介绍,敬请期待。

 

 

上一篇 VPN篇 对等体检测洞察先机,双链路备份有备无患

下一篇 VPN篇 URL地址隐藏改写各千秋,细粒度资源访问控制有方法

汇总贴

本帖被以下专题推荐:

  • x
  • 常规:

点评 回复

跳转到指定楼层
Y_GH
Y_GH   发表于 2014-9-15 15:30:14 已赞(0) 赞(0)

沙发~

强叔新作,先顶后看!

  • x
  • 常规:

点评 回复

安宁庄前街东口
安宁庄前街东口   发表于 2014-9-15 15:41:46 已赞(0) 赞(0)

支持~ 看似简单的SSL协商过程中包括了这么多道道,以前还真的没有注意到,感谢强叔耐心细致的讲解,赞一个!
  • x
  • 常规:

点评 回复

zengh
zengh   发表于 2014-9-15 15:50:53 已赞(0) 赞(0)

不错,学习,学习~
  • x
  • 常规:

点评 回复

kmyd
kmyd  大师 发表于 2014-9-15 15:54:51 已赞(0) 赞(0)

不错,感谢强叔,问下USG是ADSL,能做SSL的VPN吗?
  • x
  • 常规:

点评 回复

shadowboy
shadowboy   发表于 2014-9-16 15:25:05 已赞(0) 赞(0)

不错。。图挂了。。。。。
  • x
  • 常规:

点评 回复

强叔侃墙
强叔侃墙 官方号 发表于 2014-9-16 16:55:06 已赞(0) 赞(0)

引用 6 楼

不错。。图挂了。。。。。
shadowboy 发表于 2014-09-16 15:25

多谢提醒,强叔修改过来了,看看可以了吗。

  • x
  • 常规:

点评 回复

跃秀
跃秀  精英 发表于 2014-9-16 18:04:05 已赞(0) 赞(0)

引用 5 楼

不错,感谢强叔,问下USG是ADSL,能做SSL的VPN吗?
kmyd 发表于 2014-09-15 15:54

对照设备试了下,不支持在dialer口上创建虚拟网关,应该是不能做。

  • x
  • 常规:

点评 回复

shadowboy
shadowboy   发表于 2014-9-16 19:49:08 已赞(0) 赞(0)

回复 7 楼

好了。。图老哎挂。。不知道为什么
  • x
  • 常规:

点评 回复

DoubleDong
DoubleDong   发表于 2014-9-16 20:45:41 已赞(0) 赞(0)

冒雨支持一下!
  • x
  • 常规:

点评 回复

发表回复
您需要登录后才可以回帖 登录 | 注册

警告 内容安全提示:尊敬的用户您好,为了保障您、社区及第三方的合法权益,请勿发布可能给各方带来法律风险的内容,包括但不限于政治敏感内容,涉黄赌毒内容,泄露、侵犯他人商业秘密的内容,侵犯他人商标、版本、专利等知识产权的内容,侵犯个人隐私的内容等。也请勿向他人共享您的账号及密码,通过您的账号执行的所有操作,将视同您本人的行为,由您本人承担操作后果。详情请参看“隐私声明
如果附件按钮无法使用,请将Adobe Flash Player 更新到最新版本!
登录参与交流分享

登录参与交流分享

登录