HTML/JavaScript

2017年9月6日星期三

【Cisco】【安全】【CCNA】SSL VPN简介

SSL VPN简介

SSL VPN简介

介绍

IPsec VPN和SSLVPN是互补的技术,可以同时使用也可以单独使用!通过浏览器天生拥有的SSL加密技术实现灵活,是低成本的互联网远程访问解决方案,SSL VPN通常情况下不需要预先安装任何客户端软件。

SSL VPN也被称为WebVPN,主要用于远程访问连接。远程访问通过安全套接层(Secure Socket Layer、SSL)来提供SSL VPN网关。

SSL VPN网关允许远程用户使用Web浏览器建立安全的虚拟专用网(VPN)隧道,SSL是一个运用程序加密技术,它提供了网页游览器,邮件,即时聊天和其它数据流安全的Internet通讯。
SSL最开始是由Netscape开发,并且在1996年改版,后来成为了IETF标准TLS的基础。虽然SSL和TLS在有些方面不同而且不能互相兼容,但是协议的架构基本是相同的。
两个协议主要的目标是提供数据的私密性和完整性,提供了运用程序安全的通讯,默认SSL工作端口TCP/443,SSL VPN功能允许从任意位置连接到公司,提供远程访问支持,从而安全的将企业网络访问权限扩展到任何授权的用户上。

SSLVPN的特性

  1. 不需要预先安装客户端软件
  2. 使用标准的网页游览器建立远程VPN连接
  3. 使用游览器拥有的SSL加密技术提供数据私密性
  4. 提供细致的访问控制
  5. 客户端运用程序可以通过多种方式动态的下载,例如:连接时在线下载,通过java,activex或者exe文件分发。
  6. 提供连接互联网的系统灵活的建立VPN连接,不管这个系统是否被公司管理
  7. 在任何地点都能轻松的穿越防火墙和网络
  8. 支持透明的无线漫游
  9. 可以使用集成的IOS防火墙提供增强的安全性

SSL VPN三种接入方式

SSL VPN应用程序的可访问性相对于IPsec VPN有一定的限制 SSL VPN的优势来自任意的互联网访问,提供无障碍的连接功能,几乎无需安装其他的桌面软件。

SSL VPN提供三种SSL VPN接入方式:无客户端(clientless),简单客户端(thin-client)和完整隧道客户端(full-tunnel client)支持。

enter image description here

无客户端模式(Clientless)

无客户端模式提供web只有的安全访问和访问基于web的的内容。无客户端模式提供对私有Web资源的安全访问(无客户端模式仅限于基于Web的内容),并提供对Web内容的访问。远程用户使用客户机上的Web浏览器访问内部或公司网络。
无客户端模式下支持以下应用程序:

· WEB浏览(HTTP、HTTPS)运行远程用户浏览网页。
· 文件共享(通过CIFS实现)在WEB页面提供文件服务器链接表项,运行用户进行相关操作浏览、创建、删除、下载、重命名等..
· 基于WEB的电子邮件,例如Microsoft Outlook Web Access

简单客户端模式(Thin-Client Mode)

简单客户端模式(也称为端口转发),简单客户端模式提供远程访问基于TCP的服务,如POP3,SMTP,IMAP,Telnet和SSH应用程序。 简单客户端模式通过Java小程序进行代理转发,该小程序在会话建立时从SSL VPN设备动态下载。 此模式扩展了Web浏览器的加密功能的功能

隧道模式(Tunnel mode)

厚客户端模式(第3层)(也称为隧道模式或全隧道客户端):隧道模式可远程访问广泛的应用程序支持,并通过下载SSL VPN Client(SVC)软件或Cisco AnyConnect 来自VPN服务器设备的VPN客户端软件。 此模式提供轻量级的集中配置且易于支持的SSL VPN隧道客户端,可为几乎任何应用程序提供完整的网络层(第3层)访问。

SSL Protocol

SSL是一个层次化的协议,每个层都有不同的功能。SSL protocol可以分为Record Layer(记录层)、Handshake Protocol(握手协议)、Application Data Protocol(应用数据协议)。它们的关系如下图所示,具体细节后面介绍。

+--------------------------------------------------------------------------------------------+
|                                     Application Layer                                      |
+------------------------------------------------------------------------------+-------------+
                                                                               |             
                                                                               |             
+----------------------+------------------------+------------------+-----------V-------------+————>
|SSL Handshake Protocol|SSL Cipher Spec Protocol|SSL Alert Protocol|Application Data Protocol|        |
+----------------------+------------------------+------------------+-------------------------+        |
                                                                                                     SSL Protocol Stack
+--------------------------------------------------------------------------------------------+        |
|                                     SSL Record Protocol                                    |        |
+--------------------------------------------------------------------------------------------+————>   

+--------------------------------------------------------------------------------------------+
|                                      Transport layer                                       |
+--------------------------------------------------------------------------------------------+

+--------------------------------------------------------------------------------------------+
|                                       Network layer                                        |
+--------------------------------------------------------------------------------------------+

SSL记录协议(SSL Record Protocol)

SSL Record Protocol 为SSL提供两种服务,保密性,加密应用层数据;消息完整性,通过使用消息验证码(MAC,message authentication code)
SSL Record Protocol 是为上层使用的基础协议。其中之一就是握手协议。用于交换加密和认证的密钥。
如下描述了SSL记录协议的完成操作。记录协议将应用层的消息镜像分段,压缩数据,应用消息验证码(MAC),加密,添加报文头部,并将数据发送到TCP段中。收到的数据执行反向过程,被解密,被验证,解压缩,重新组合然后传输到应用程序。

                            +----------------------------+
Application Data            |||||||||||||||||||||||||||||| | 【原始应用数据】
                            +----------------------------+ V
                                                           |
                            +--------++--------++--------+ V
Fragment                    |||||||||||||||||||||||||||||| | 【拆分数据段】
                            +--------++--------++--------+ V
                                                           |
                            +--------+                     V
Compress                    |--------|                     | 【对数据段进行无损压缩】
                            +--------+                     V
                                                           |
                            +--------+-+                   V
Add MAC                     |--------|*|                   | 【添加消息验证码】
                            +--------+-+                   V
                                                           |
                            +----------+                   V
Encrypt                     |XXXXXXXXXX|                   | 【数据进行加密】
                            +----------+                   V
                                                           |
                          +-+----------+                   V
Append SSL Record Header  |+|XXXXXXXXXX|                   | 【添加SSL Record Header】
                          +-+----------+                   V
  1. 第一步 分段(Fragmentation)将应用层的数据拆分成SSL 可接受的段大小。

  2. 第二步 压缩(Compress)可选,默认的压缩算法为空,可以指定压缩的算法。

  3. 第三步 添加消息验证码(Message Authentication Code),添加MAC的目的是进行完整性校验,防止数据在传输的过程中被篡改。

  4. 第四步 加密(Encrypted )使用加密算法来对消息进行加密。

  5. 第五步 添加头部(SSL Record Header),头部信息由如下部分组成。
    Content Type (8 bits):提交更高层的协议来处理enclosed fragment.
    Major Version (8 bits):标识SSL使用的主要版本
    Minor Version (8 bits):标识SSL使用的次要版本,对于SSLv3,值为0。
    Compressed Length (16 bits):纯文本片段的长度

密码变更协议(Change CipherSpec Protocol )

Change CipherSpec Protocol由单个消息组成,单个字节,值为1。这个消息的目的是将待处理状态(pending state)复制到当前状态(current state),这个消息,服务器要发送到客户端,客户端也要发送到服务器,当双方都收到之后,后续所有的交互报文将被加密。

告警协议(SSL Alert Protocol)

告警协议用于向对等实体传递与SSL相关的警报。协议中的每个消息由两个字节组成。 第一个字节取值“warning”(1)或“fatal”(2)来传达消息的严重性。 如果级别是致命的,SSL立即终止连接。第二个字节包含一个指示特定警报的代码。

握手协议(Handshake Protocol )

SSL是复杂的握手协议。这个协议允许服务器端和客户端之间彼此认证,并协商加密算法,MAC算法,以及用于SSL业务数据的加密密钥。在发送业务数据之前,必须先使用握手协议进行SSL协商,协商成功之后加密业务数据,进行传输。
下图描述了SSL 建立交换的过程,总共有4个阶段。

Created with Raphaël 2.1.2ClinetClinetServerServer--------------------------------------Handshake Protocol Action------------------------------------ClientHelloServerHello(Certificate*,ServerKeyExchange*,CertificateRequest*)ServerHelloDoneCertificate*,ClientKeyExchange, CertificateVerify*,[ChangeCipherSpec],Finished[ChangeCipherSpec],FinishedApplication DataApplication Data

阶段1 , 用于启动建立连接。客户端发送Client Hello消息。Client Hello消息包含如下内容:
· Version: 客户端最高支持的SSL版本。
· Random: 客户端生成,32位时间戳和28位字节组成,由安全随机数生成器生成。这些值,这个随机值用于在密钥交换期间防止防重放攻击。
· Session ID:可变长度会话标识符。值为0标识客户端希望在新的会话上建立连接。非0值标识希望使用现有的连接参数上创建新的连接。
· CipherSuite:客户端支持加密算法的列表,按照优先级进行降序排列。
· Compression Method:客户端支持的压缩算法的列表。

发送Client Hello消息之后,客户端等待收到Server Hello消息,对于Server Hello消息遵循如下规范。

  1. 版本字段包含服务器所支持的最高版本
  2. 随机字段有服务器生成,与客户端的随机字段没有关联性。
  3. 如果客户端的SessionID字段为非零服务器使用相同的SessionID值。反之SessionID字段使用新的会话值。
  4. CipherSuite字段包含客户端提出的加密算法,服务器在加密算法中选其一。
  5. Compression 字段包含客户端提出的压缩算法,服务器在压缩算法中选其一。

CipherSuite用于指定密钥交换算法。密钥算法列表支持如下:
· RSA:密钥有接收方的RSA公钥加密。
· Fixed Diffie-Hellman: 这个是DH密钥交换(Diffie-Hellman key exchange),其中服务器证书包含证书颁发机构(CA)签名的DH公共参数(Diffie-Hellman public parameters)即,公共密钥证书包含DH公钥参数。客户端在证书中提供其Diffie-Hellman公钥参数,如果客户端需要认证或者在密钥交换消息中。基于固定DH(Fixed Diffie-Hellman)计算方法,来参数两个对等体之间的固定密钥。
· Ephemeral Diffie-Hellman:此技术用于创建临时(一次性)的密钥。在这种情况下DH公钥交换,并使用发送者特有的RSA或DSS 进行签名。接收方,可以使用相应的公钥来验证签名,用于认证公钥。这个选项是其他三个DH中最安全的,因为他会生成临时的认证密钥。
· Anonymous Diffie-Hellman:匿名DH,使用基本的DH算法,没有认证,不安全,容易被中间人攻击。

密钥交换算法在CipherSpec中定义,标识加密算法的相关参数。

阶段2,服务器通过发送其证书开始Phase 2,如果需要认证, 该消息包含一个或多个X.509证书,除了anonymous Diffie-Hellman之外,任何商定密钥交换方法都需要证书信息,如果使用的是 Fixed Diffie-Hellman,证书消息(Certificate Message)将用于密钥交换消息(Key Exchange Message),在此消息中包括服务器的公共的DH参数(Public Diffie-Hellman Parameters),接下来,如果需要,可能会发送一个server_key_exchange消息。
如下两种情况不包括在内
1. 服务器发送了具有固定Diffie-Hellman参数的证书
2. 使用RSA密钥交换。
接下来,非匿名服务器(不使用匿名Diffie-Hellman的服务器)可以从客户端请求证书。ertificate_request消息包括两个参数:ertificate_type 和 certificate_ authorities. (证书类型和证书颁发机构)证书类型表示公钥算法的类型在certificate_request消息中的第二个参数可以信任的CA列表。
第二阶段最后消息需要server_done message 消息它由服务器发送,用于结束hello和相关消息。

阶段3,发送此消息后,服务器等待客户机响应。在收到server_done message消息之后,客户端校验服务器提供的证书,并检查hello参数是否可以接受,如果都可以接受,并服务器请求了客户端证书,那么客户端将发送证书给服务器,开始第三阶段。如果没有适合的证书使用,客户端将发送no_certificate alert 告警信息。

接下来客户端需要发送client_key_exchange消息,消息的内容取决于密钥交换的类型。最后,在这个阶段上,客户端发送一个certificate_verify消息 ,用于客户端准确验证(explicit verification)该消息仅除包含fixed Diffie-Hellman参数的所有证书之外才发送。

阶段4,完成安全连接的设置。 客户端发送一个change_cipher_spec消息,并将待处理的CipherSpec复制到当前的CipherSpec中。然后,客户端立即按照新的算法,密钥和秘密发送完成的消息。 完成的消息验证密钥交换和认证过程是否成功。响应这两个消息,服务器发送自己的change_cipher_spec消息,将待处理传送到当前CipherSpec,并发送其完成的消息。 此时握手完成,客户端和服务器可以开始交换应用层数据。

SSL握手交互过程如下图所示,取自这里,更多报文字段相关细节,请参见RFC 6101和SSL Handshake With Two Way Authentication with Certificates
enter image description here

参考文献

  1. RFC 6101
  2. SSL Handshake With Two Way Authentication with Certificates
  3. 浅析数字证书
  4. Secure Socket Layer
  5. SSL: Foundation for Web Security - The Internet Protocol Journal - Volume 1, No. 1
  6. Keyless SSL: The Nitty Gritty Technical Details
  7. Cisco ASA设备使用指南 第20章 基于客户端的远程访问
  8. Network Security Technologies and Solutions –Chapter 18 Secure Sockets Layer VPN (SSL VPN)