在前文中提到思科Viptela SD-WAN建立在Zero-Trust模型之上,处于解决方案中的各个组件之间彼此需要认证才能建立信任关系,其实这个信任关系建立的过程也是控制层面通道的构建过程,有了控制层面的通道才能传递控制信息。那这个通道怎么建立?或者说通过什么样的方式来建立这个信任关系?为了便于读者更深入的理解这个模型,为此先做一些相关知识点的介绍。
互联网早期,为了保障互联网数据的传输安全,Netscape开发了SSL(安全套接字层,Secure Socket Layer),它用于Web浏览器与服务器之间的身份认证和数据加密,此后由SSL派生出了TLS及DTLS等安全协议。思科Viptela SD-WAN正是运用了DTLS/TLS这两种协议来建立控制层面的通道,为Overlay网络控制平面奠定了坚实的基础。
TLS(传输层安全,Transport Layer Security)协议是IETF标准,可以简单的认为它是SSL 3.0的后续版本,在传输层和应用层之间构建了一个端到端的安全通道,对传输数据加密。SSL/TLS协议都针对于TCP提供安全性,并不能用于UDP,而UDP也有安全传输的需求,DTLS(数据报传输层安全,Datagram Transport Layer Security)协议的产生解决了这个问题,它给UDP提供了端到端的安全通道,就像SSL/TLS对TCP的作用一样,它对TLS协议进行了扩展。UDP协议不是面向连接的,是不可靠的协议,不能保证通信双方消息传输过程中的乱序,丢包等问题,因此DTLS必须自身处理可能的乱序和丢包。所以DTLS协议在UDP之上实现了Client与Server之间双方的握手连接,并且在握手过程中通过使用PSK或ECC实现了加密,利用Cookie验证机制和证书实现了通信双方的身份认证,并且在报文头部加上序号实现了可靠传输。
当思科Viptela SD-WAN设备加入网络时,它们之间会使用DTLS/TLS创建临时或永久的安全通道。在每个vSmart Controller和vEdge Router上都有一个 vdaemon进程在运行,由这个进程创建和维护设备间的DTLS/TLS连接。连接建立后,像OMP、SNMP、Netconf等协议就可以在其之上建立会话交换信息。此时可以无需关注任何与安全相关的问题,因为DTLS/TLS协议已经自动构建完成了安全可靠的控制平面。
在思科Viptela SD-WAN中缺省使用DTLS来构建安全的控制平面,当然也可以通过命令行修改为TLS,但需要注意的是,到vBond Orchestrator的控制平面通道始终使用DTLS,因为这些连接必须由UDP处理。在DTLS整个握手交互中,思科使用了证书的方式来进行双向的安全认证,所以无论是控制器还是广域网边界设备都需要先安装签名证书和根证书才能在Overlay网络中运行,并且建立起DTLS/TLS的连接。
首先,对思科Viptela SD-WAN中所涉猎的证书做以介绍。证书整体分为两类,一类为设备证书,也就是被CA签名后的证书,还有一类为根证书链。本文为了便于读者理解,假设只有一级CA,也就是只使用到了根证书。如图9- 8左侧部分所示vSmart Controller、vBond Orchestrator、vManage NMS共需4张证书,第一张为赛门铁克根证书,它内置于控制器的软件镜像中,用于控制器之间彼此进行认证,如果企业有自己的CA服务器,那么此证书也可以被企业CA根证书所替代。第二张证书为Avnet根证书,它也内置于控制器软件镜像中,用于控制器验证vEdge Router的合法性。第三张证书为Viptela根证书,由vManage NMS提供,用于控制器验证vEdge Cloud Router的合法性。第四张证书是被赛门铁克签名的设备证书,控制器之间进行认证时需要彼此交换此证书给对方,再通过赛门铁克根证书来验证设备证书的合法性,以达到验证对方的目的。
如图9- 8中间部分所示vEdge Router(硬件路由器)需要两张证书。第一张为赛门铁克根证书(也可以用企业CA的根证书),用于验证vSmart Controller、vBond Orchestrator、vManage NMS的合法性。第二张证书为vEdge Router的设备证书,它存储于vEdge Router的TPM(Tamper Proof Module)芯片中,并且已经被Avnet根CA签名,通过DTLS/TLS的握手交互过程传递给vSmart Controller、vBond Orchestrator、vManage NMS,由这些控制器来验证vEdge Router的合法性。
如图9- 8右侧部分所示vEdge Cloud Router(虚拟路由器)需要两张证书。第一张为赛门铁克根证书,用于验证vSmart Controller、vBond Orchestrator、 vManage NMS的合法性,第二张证书为Viptela设备签名证书,它是由vManage NMS对vEdge Router进行签名,最终分发给vEdge Router的设备证书,通过DTLS/TLS的握手交互过程传递给vSmart Controller、vBond Orchestrator、 vManage NMS,由这些控制器来验证vEdge Cloud Router的合法性。
图9- 8 Controllers、vEdge、vEdge Cloud所需证书
虽然在设备之间建立DTLS/TLS的连接需要用到诸多证书,但是缺省它们都可以自动分发完成,如果企业使用自建CA服务器时则需要手工完成根证书和设备签名证书的安装,特别是在大规模部署vEdge Router,vEdge Cloud Router等广域网边界设备时,不建议使用企业自建CA服务器,因为需要在所有的设备上手动安装根证书和签名证书,这样会增加运维成本。
其次,有了证书之后,DTLS构建安全通道的过程中使用了PKI体系里的数字证书来完成彼此之间的认证,思科在此之上通过引入白名单机制对标准PKI组件加以增强扩展,控制平面执行认证时会增加对控制器以及广域网边界设备序列号的校验。如图9- 9所示,对于控制器设备序列号,通过管理员手工在vManage NMS上添加vSmart Controller和vBond Orchestrator并安装签名证书的过程中会把这个控制器的序列号列表写入到vManage NMS并由vManage NMS推送至vSmart Controller、vBond Orchestrator。最终也会生成一个序列号列表文件,如果添加新的控制器便会更新这个文件,这个文件里的内容就相当于一个经过授权的控制器白名单。在接下来DTLS认证中就可以通过序列号的验证,使得只有经过授权的控制器设备才能加入Overlay网络。对于广域网边界设备序列号,其中较为常用的方法是管理员通过在思科官网下载后缀为.viptela的广域网边界设备授权序列号文件,上传至vManage NMS并由vManage NMS将该文件推送至所有的控制器,在接下来DTLS认证中就可以通过序列号的验证,使得只有经过授权的广域网边界设备才能加入Overlay网络。
图9- 9 控制器白名单与vEdge白名单
有了以上的准备工作,最后进入DTLS/TLS通道的建立阶段。通道的建立过程包括两部分。第一部分,控制器之间构建DTLS/TLS安全通道,如图9- 10所示,以vSmart Controller与vBond Orchestrator之间DTLS通道建立过程为例。
图9- 10 通过DTLS/TLS构建控制器之间控制平面
由vSmart Controller初始化启动,两个设备自动开始彼此之间的双向认证过程,如果认证成功,则在它们之间建立永久的DTLS通道。如果认证失败,将断开两个设备之间的连接,并且尝试终止认证过程。vSmart Controller知道如何访问vBond Orchestrator,因为vSmart Controller设备上线时,需要进行初始化配置,其中包括vBond Orchestrator的DNS域名或IP地址、组织名(Org-Name)等。vBond Orchestrator也已准备好响应来自vSmart Controller的请求,因为在vBond Orchestrator上线的初始化配置中也已经指定了其自身的角色,并且已将vSmart Controller授权的序列号从vManage NMS下载到了自身。DTLS/TLS认证是一个双向的过程,如下是每个方向通道的详细建立步骤。
vSmart Controller对vBond Orchestrator的身份验证包括如下步骤:
- vBond Orchestrator将其受信的根CA签名后的设备证书发送给vSmart Controller;
- vBond Orchestrator将广域网边界设备的授权序列号文件发送给vSmart Controller;
- vSmart Controller从接收到的设备证书中提取信息得到组织名并与vSmart Controller上初始化时配置的组织名进行比较。如果名称匹配,则vSmart Controller验证了vBond Orchestrator的组织名的正确性。如果不匹配,则vSmart Controller会中断DTLS的握手过程;
- vSmart使用CA根证书验证设备证书是否是根CA(赛门铁克或企业CA)签名的。如果签名验证正确,则证书有效。如果不正确,vSmart Controller将中断DTLS的握手过程。
vBond Orchestrator对vSmart Controller的身份验证包括如下步骤:
- vSmart Controller将其受信的根CA签名后的设备证书发送到vBond Orchestrator;
- vBond Orchestrator从接收到的设备证书中提取得到vSmart Controller的序列号。该序列号必须与vSmart Controller授权序列号文件中的数值匹配。如果数值无法匹配,vBond Orchestrator将中断DTLS握手过程;
- vBond Orchestrator从接收到的设备证书中提取得到组织名称,并将其与vBond Orchestrator上初始化时配置的组织名称进行比较。如果一致,则vBond Orchestrator验证了vSmart Controller组织名的正确性。如果不一致,vBondOrchestrator将中断DTLS的握手过程;
- vBond Orchestrator使用CA根证书来验证接收到的设备证书是否的确是由根CA(Symantec或企业CA)签发的。如果签名正确,则vBond Orchestrator可以确认设备证书的有效性。最终建立永久的DTLS连接。如果签名不正确,vBond Orchestrator将中断DTLS的握手过程。
在整个双向验证的过程中,借助了PKI体系当中的诸多知识点,下面来更深入的剖析整个认证过程。
首先,完成双方彼此的认证,vBond Orchestrator被根 CA签名后的设备证书里包含了vBond Orchestrator的公钥、vBond Orchestrator的信息、CA对vBond Orchestrator的数字签名等。发给vSmart Controller后,vSmart Controller不论使用内嵌于软件的赛门铁克CA的根证书还是手动安装的企业CA根证书,其中都包含有CA的公钥,因为vBond Orchestrator的数字签名是被根CA的私钥签名了的(被其加密),所以此时可以通过vSmart Controller上的CA根证书里的CA公钥解开vBond Orchestrator里被根CA用私钥签名了的vBond Orchestrator的数字签名。此时vSmart Controller借助vBond Orchestrator的相关信息、vBond Orchestrator的公钥等信息,用相同的算法进行Hash,得到一个摘要值。使用这个摘要值和用公钥解密了的vBond Orchestrator的数字签名后的摘要进行比较,如果一致,验证通过。如果不一致验证失败。最终保证通信的双方都是自己期待的对方,任何一方都不可能被冒充。
其次,完成密钥的交换,此时vSmart Controller就有了vBond Orchestrator的公钥。反之亦然,vBond Orchestrator也会有了vSmart Controller的公钥,那么两端此时都可以用对方的公钥来加密对称密钥进行密钥交换了。其中密钥交换是通过非对称加密算法来实现,最后协商出对称密钥,随后的控制平面的通信就是利用这个对称密钥来加密控制信息的。vSmart Controller与vManage NMS之间及vManage NMS与vBond Orchestrator之间通道建立过程基本一致,在此不做赘述。
图9- 11通过DTLS/TLS构建控制器与vEdge Router之间的控制平面
第二部分,控制器与广域网边界设备之间建立DTLS/TLS通道,如图9- 11
所示,以vSmart Controller、 vBond Orchestrator、vManage NMS与vEdge Router之间DTLS通道建立过程为例,要想网络中的vEdge Router能正常上线,需要完成两件事。第一,与vManage NMS建立DTLS安全连接,使用vManage NMS上的配置模板是,便于vEdge Router可以通过Netconf接收到完整配置信息。第二,与vSmart Controller建立安全连接,以便它可以加入到Overlay网络,最终通过OMP协议掌握路由、策略等信息来转发数据。那么,当vEdge Router设备启动后,它是如何自动发现vManage NMS和vSmart Controller并与它们建立连接呢?这时候就需要在vBond Orchestrator的帮助下完成。设备上线前,都需要一个最小的基本配置,例如,vEdge Router上的初始配置包含vBond Orchestrator的IP地址或DNS域名及组织名等,此时vEdge Router就可以通过配置的IP地址自动寻址至vBond Orchestrator建立DTLS连接,并且两个设备相互进行身份验证以确认它们是有效的合法的SD-WAN设备。同样,不需要手工干预,此身份验证是一个自动发生的双向过程。接下来我们详细的看一下它们彼此之间的验证步骤。
vEdge Router对vBond Orchestrator的身份验证包括如下步骤:
- vBond Orchestrator会发送自己的设备证书,也就是被根CA签名之后的证书至vEdge Router;
- vEdge Router从接收到的设备证书中提取信息得到组织名并与vEdge Router上初始化时配置的组织名称进行比较。如果名称匹配,则vEdge Router验证vBond Orchestrator的组织名成功。如果不匹配,则vEdge Router会中断DTLS的握手过程;
- vEdge Router使用CA根证书来验证设备证书已由合法且有效的根CA(Symantec或企业CA)签名。如果签名正确,则vEdge Router可以确认vBond Orchestrator合法及有效。如果签名不正确,vEdge Router将中断DTLS的握手过程。
vBond Orchestrator对vEdge Router的身份验证包括如下步骤:
- 这里用到了典型的Challenge/Respond机制,vEdge Router会发送请求消息,要求vBond Orchestrator验证vEdge Router。vBond Orchestrator此时发送Challenge消息给vEdge Router,其中包含一个256bit的随机数;
- vEdge Router收到Challenge消息后会返回Response消息给vBond Orchestrator,其中包括如下信息:
- vEdge Router 序列号。
- vEdge Router 机箱号。
- vEdge Router设备证书,也就是位于TMP芯片内被CA签名后的证书。
- vEdge Router用私钥签名vBond Orchestrator发送来的256bit随机数并生成的数字签名
- vBond Orchestrator会通过vEdge Router授权设备列表文件来比较vEdge Router 序列号和机箱号是否匹配;
- vBond Orchestrator还会检查被签名的256bit的随机值是否正确。它是通过提取vEdge Router发送来的设备证书里的vEdge Router的公钥来验证的;
- vBond Orchestrator使用CA根证书来验证vEdge Router设备证书是否有效,换句话说,vEdge Router里存储的被根CA签名的证书发给了vBond Orchestrator之后,vBond Orchestrator使用自己根证书里的公钥来解开其中的数字签名,对其摘要进行比较是否一致,最终建立临时的DTLS的连接。
临时连接建立后,vBond Orchestrator会向vEdge Router发送vManage NMS和vSmart Controller的IP地址及端口号列表。vBond Orchestrator也会告知vSmart Controller和vManage NMS已经与vBond Orchestrator建立了DTLS连接的所有vEdge Router的IP地址,然后vEdge Router断开与vBond Orchestrator的DTLS连接。
此时vEdge Router开始通过与vManage NMS建立DTLS连接并接收设备的配置信息,与vManage NMS的验证也分为两个方向。其中双方验证的步骤基本与前文所述vEdge Router与vBond Orchestrator之间的身份验证步骤一致,在此不做赘述。
自动身份验证过程的最后一步是vSmart Controller与vEdge Router相互进行身份认证。在这个步骤中,vSmart Controller对vEdge Router执行身份验证以确保它是属于此网络的一个合法有效的设备。并且vEdge Router还会对vSmart Controller进行身份认证。双向认证通过后,它们彼此之间会建立DTLS的永久连接,vSmart Controller将建立运行在DTLS通道内的OMP对等会话。然后,vEdge Router与vSmart Controller之间开始通过控制平面的DTLS通道进行控制信息的交互。其中双方验证的步骤基本与前文所述vEdge Router与vBond Orchestrator之间的身份验证步骤一致,在此不做赘述。
任何网络的控制平面都和怎么去构建网络拓扑或定义如何调度数据包有关,在传统网络中,构建和维护路由转发表并将数据包转发到目的地的控制平面操作是由路由和交换协议来处理完成的,这些协议通常用于设备认证,加密路由更新,以及加密其他控制信息的机制很少且不完善,有的甚至没有。而且传统提供安全性的方法是高度手动的,不利于扩展。比方说证书通常是手动安装而不是通过自动的方式安装,而且使用预共享密钥不是提供设备安全性的最优方法。
通过构建一个安全、可靠、自动的思科Viptela SD-WAN控制平面的学习,我们了解到思科在控制平面的设计中考虑诸多网络和设备的安全性,通过DTLS/TLS协议作为构建这样一个架构的基础。如图9- 12所示,控制器之间构建了一个稳定且安全的铁三角,来传输控制信息。在私密性方面,通过数字证书来提供认证服务,通过AES-256加密算法来提供加密服务,最终在建立控制连接的过程中交换对称密钥来加密和解密控制平面的每个数据包。在控制平面的完整性方面,为了防止数据包的内容不被篡改,使用消息摘要算法SHA-1/SHA-2对控制平面连接发送的每个数据包生成消息摘要,对端接收后为该分组也生成消息摘要,而后与发送端的消息摘要进行比较来验证完整性。除此之外,为了确保数据包是由一个可信设备发送的,也用到了非对称密钥的签名机制,当控制平面开始建立时,本地设备向远端设备发送一个Challenge消息,远端设备通过使用其私钥对Challenge进行签名,并将签名的Challenge返回给本地设备,然后本地设备使用远端设备的公钥来验证收到的Challenge是否与发送的Challenge相匹配。至此,通过本节的学习我们对控制平面的构建有了一个全面的掌握。
图9- 12 控制平面的会话连接