用TLS搭建即时通讯的安全通道:LCS2005系列之三

简介:
                                      TLS 搭建即时通讯的安全通道
上篇博文中我们介绍了客户机如何利用LCS所提供的即时通讯功能,也让两个用户借助LCS服务器实现了即时通讯,只是在上篇博文中客户端连接服务器是基于未加密的TCP协议,安全方面不是很到位,也要顾忌恶意用户在内网对即时通讯数据进行嗅探。今天我们做些改进,让客户端连接服务器基于加密的TLS,这样就可以很好地保护即时通讯数据的安全。TLS是传输层加密的缩写,就是在传输层协议的基础上使用证书对数据进行加密保护,我们想要用TLS实现SIP,必须有证书服务器的配合。下面我们将通过一个实验向大家说明应该如何让这些服务器有条不紊地开展工作。实验拓扑如下图所示,我们准备让域控制器Florence承担CA服务器的角色,其余的环境和上篇博文完全一样。
 
  安装证书服务器
TLS对即时通讯数据进行加密需要有证书服务器的支持,我们准备在Florence上安装证书服务器,类型最好选择企业根,因为企业根CA可以很好地和Active Directory结合,有助于提高管理效率。我们在Florence上打开控制面板-添加/或删除程序-添加/删除Windows组件,如下图所示,勾选“证书服务器”。
 
CA类型选择“企业根CA”。
 
CA命名为LCSCA,其余设置取默认值即可。
 
证书数据库路径取默认值即可。
 
如下图所示,证书服务器安装完成。
 
证书服务器安装完成后,域内其他的计算机需要信任这个证书服务器,如果有耐心,可以等待一下,最多不超多90分钟组策略就会通知域内所有的成员服务器和工作站信任LCSCA这个证书颁发机构。如果想让组策略尽快生效,可以如下图所示运行gpupdate/force,这样可以可以强制组策略立即生效。
 
组策略生效后,还要检查一下LCSCA到底有没有被当作可信任的证书颁发机构,如下图所示,如果LCSCA已经出现在受信任的根证书颁发机构中,那我们就可以放心地进行后续工作了。注意,一定要确保实验用的所有计算机都信任 LCSCA
 
 LCS 服务器申请证书
创建了证书服务器,接下来我们就要在证书服务器上为LCS服务器申请证书了,在Berlin的浏览器中输入[url]http://florence/certsrv[/url],如下图所示,选择“申请一个证书”。
 
接下来选择提交一个“高级证书申请”。
 
选择“创建并向此CA提交一个申请”。
 
如下图所示,证书模板选择“Web服务器”,Web服务器可以证明LCS服务器的身份。证书要保存在计算机存储中,这样才可以被LCS服务器使用。证书姓名要取决于客户机访问LCS服务器时所使用的参数,由于客户机是通过DNS查询来定位LCS服务器,因此客户机连接服务器使用的是完全合格域名berlin.lcstest.com,我们为LCS服务器申请的证书姓名应该也是berlin.lcstest.com
 
申请证书后,证书服务器会立即颁发所申请的证书,如下图所示,选择“安装此证书”,就完成证书的申请了。
 
 LCS 服务器使用证书
LCS服务器申请证书后,就要利用申请到的证书配置TLS了。在Berlin的管理工具中打开“Live Communications Server  2005 ,如下图所示,我们发现目前Berlin只在5060端口提供TCP连接,右键点击Berlin.lcstest.com,选择属性。
 
LCS服务器属性中点击“添加”按钮。
 
如下图所示,为新添加的连接选择传输类型是TLS,端口是5061,点击“选择证书”。
 
选择使用刚申请到的证书berlin.lcstest.com,点击确定。
 
如下图所示,我们配置好了新添加的连接,点击确定结束。
 
如下图所示,LCS服务器已经可以在5061端口提供基于TLS的加密连接了。
 
  配置 SRV 记录
现在LCS服务器可以提供TLS连接,但我们还要通过DNSSRV记录向LCS客户端传递这个消息,在DNS服务器上打开DNS管理器,如下图所示,右键点击lcstest.com区域,选择新建“其他新记录”。
 
选择创建SRV类型的新记录。
 
如下图所示,SRV记录描述了lcstest.com域中的berlin.lcstest.com5061端口可以提供基于TLSSIP服务,至此,SRV记录创建完毕。
 
  客户机测试
万事俱备,只欠东风,我们可以在客户机上测试一下TLS的效果了。我们在Perth上关闭Windows Messenger,如下图所示,使用ipconfig/flushdns来清除DNS缓存, 免得查询不到DNS新增加的SRV记录。
 
清除DNS缓存后,我们让User1重新登录LCS服务器,如下图所示,User1已经成功登录LCS服务器,那么,客户端连接服务器使用的是TCP还是TLS呢?
 
如下图所示,我们在Perth上使用netstat –ano |find “5061”来查询perth5061端口的连接,从查询结果可以看出,perth正在连接LCS服务器的5061端口,客户端连接服务器使用的是基于TLS的加密连接,实验成功。这里有个问题,如果LCS服务器既提供TCP连接,又提供TLS连接,那么客户端会优先使用哪种连接呢?其实从上篇博文的抓包结果可以看出,客户端会优先使用安全性更高的TLS连接。
 


















本文转自yuelei51CTO博客,原文链接:http://blog.51cto.com/yuelei/98053 ,如需转载请自行联系原作者

相关文章
|
Linux
Linux下安装中文输入法总结
Linux下安装中文输入法总结
4896 0
|
9月前
|
人工智能 C语言
|
开发框架 前端开发 Linux
Go语言实战框架,GoFly全栈开发社区的Go快速开发框架简介与阿里服务器部署说明
GoFly中后台框架永久开源可商用。api文档管理并一键生成api接口代码,一键生成 CRUD前后端代码, GoFly快速开发框架是一款基于Go语言的 Gin和 Vue3的Arco Design的快速后台开发框架,基于JWT接口验证和Auth验证的权限管理系统,附件管理系统,天生支持saas架构。可打包部署在阿里云Linux系统上。
904 1
|
机器学习/深度学习 SQL 存储
图解大数据 | 工作流与特征工程@Spark机器学习
本文介绍Spark中用于大数据机器学习的板块MLlib/ML,讲解机器学习工作流(Pipeline)及其构建方式,并详解讲解基于DataFrame的Spark ML特征工程,包括二值化、定边界离散化、标准化、特征抽取等。
759 0
图解大数据 | 工作流与特征工程@Spark机器学习
|
Java Windows
springboot打成jar包,在windows上运行出现乱码
springboot打成jar包,在windows上运行出现乱码
599 0
|
消息中间件 Linux
线程间通信
线程间通信 在并发编程中,线程之间的数据共享和信息传递是非常普遍的需求。如果没有线程间通信,多线程编程将变得毫无意义,因为这些线程无法相互协调和合作,无法完成更复杂的任务。因此,线程间通信是多线程编程中最重要的概念之一。
203 0
|
安全 Shell 网络虚拟化
三层交换机(三层配置基础命令)
三层交换机(三层配置基础命令)
534 0
三层交换机(三层配置基础命令)
|
机器学习/深度学习 PyTorch 算法框架/工具
|
算法 数据库
Dataset之CamVid:CamVid数据集的简介、下载、使用方法之详细攻略
Dataset之CamVid:CamVid数据集的简介、下载、使用方法之详细攻略
Dataset之CamVid:CamVid数据集的简介、下载、使用方法之详细攻略
|
测试技术 区块链 C++
不同格式图片相互转换的开源库分享
一、背景 笔者在项目的开发中,需要调用windows下的COM接口SetIconLocation来实现桌面快捷方式。而我们项目中给定的图片格式为png格式,SetIconLocation的接口第一个参数指定必须包含icon(即.ico)类型图标的exe或dll文件或直接是ico文件路径。网上查了好久,没有直接调用png实现快捷方式的接口,但网上格式间相互转换的工具也是很多的(工具需要手动拖选实现,这点项目中也是不允许的)。所以,问题就转嫁为:如何实现png格式图标转化为ico格式图标?
不同格式图片相互转换的开源库分享