ONOS与OVS间设置SSL安全连接

ONOS与OVS间设置SSL安全连接

作者简介:张泽阳,2016年7月至今,北京邮电大学未来网络理论与应用实验室保送研究生。

SSL(Secure Sockets Layer)是为网络通信提供安全性的协议,我们可以使用SSL来保证OpenFlow传输通道的安全。本篇文章主要介绍ONOS控制器与OVS(Open vSwitch)交换机之间使用自签名证书进行SSL连接(这是实现SSL的一种较为简便的方式 )的配置过程。这部分内容在ONOS的官方Wiki上有介绍,但是其内容不是很细致,有一些需要特别注意的步骤没有进行强调,有的命令也漏掉了一些选项设置,导致我花了好长时间才配置好。所以写这篇文章,是想让大家照着流程做就一定能成功。如果对这方面有什么问题,欢迎与我交流。

以下步骤中的ONOS端与OVS端可以是两台不同的机器,也可以是相同的机器(为了实验方便),本文以两台不同的虚拟机为例。

一、配置步骤

1.1 生成ONOS端的自签名证书

在ONOS端新建一个文件夹(本文称作SSL文件夹)用来存储本实验中的所有相关文件,在SSL文件夹下使用keytool工具生成一个自签名的证书库onos.jks(包含私钥与公钥证书信息):

其中storepass(至少6个字符)应该牢记,各种信息随便填。

请注意:在输入 的主密码时一定要直接敲回车(即 的主密码一定要和keystore密码相同,否则在测试时ONOS端会出现"SSL init failed: Cannot recover key"错误)。

将onos.jks经过两步转换为onos.pem文件:onos.jks→onos.p12→onos.pem

onos.pem的内容大概是这样的:

接下来我们需要新建一个叫做cacert.pem的文件用来给OVS使用,它的内容是onos.pem的证书部分,即从中间的"Bag Attributes"到最后的部分:

请注意:两个中间文件onos.p12和onos.pem已经没有用了,安全起见应该被删除。

1.2 将ONOS的证书复制到OVS端

把cacert.pem复制到OVS端的/var/lib/openvswitch/pki/controllerca目录下(该目录中可能已经有了一个名为cacert.pem的文件,可先将其备份一下),此目录用来存放OVS信任的证书授权机构的证书。

1.3 生成OVS端的自签名证书并配置OVS端的SSL

进入OVS端的/etc/openvswitch目录,使用自己的pki请求和签署一个数字证书,生成OVS的私钥文件sc-privkey.pem和公钥证书sc-cert.pem:

开启OVS服务,使用ovs-vsctl set-ssl设置OVS端的SSL(配置OVS的私钥文件、OVS的证书文件和ONOS的证书文件的位置):

1.4 将OVS的证书复制到ONOS端并配置ONOS端的SSL

把OVS端的sc-cert.pem复制到ONOS端的SSL文件夹中,然后在ONOS端使用keytool -importcert将sc-cert.pem导入到ONOS的证书库onos.jks中:

使用下面的命令查看证书库的内容,可以发现证书库已经包含有了PrivateKeyEntry和trustedCertEntry。

下面一步是设置相关的环境变量。ONOS的Wiki上给出的方法是将命令加入$ONOS_HOME/tools/package/bin/onos-service,但是我试了之后发现并没有用。其实直接在终端里export以下就行了,如下(注意写出onos.jks的绝对路径,保证Password正确):

若要使ONOS每次开启时都进入SSL模式,可以将这个命令写入.profile之类的文件。

这样,ONOS端的SSL就配置完成了。

二、进行测试

使用onos-karaf clean开启ONOS端的ONOS系统,启动后在ONOS的日志里会看到以下记录,说明ONOS已经进入了SSL模式。

在OVS端启动OVS服务,新建一个网桥并使用SSL方式链接到ONOS控制器:

这时在ONOS端使用devices命令,会发现OVS已经成功连接到了ONOS控制器:

也可以使用mininet连接控制器,需要注意只有为每个交换机正确打开SSL连接后才能连接成功。

大家可以在此基础上做一些实验,如试一试在两端证书不匹配的情况下进行连接会发生什么,以此来验证SSL连接的安全性。也可以进行抓包分析,来验证SSL的加密传输特性。


尊重劳动成果,以上转载自:http://www.sdnlab.com/17969.html

你可能感兴趣的:(ONOS)