一种基于TSL的安全TCP通信实现方法

来源 :电脑知识与技术 | 被引量 : 0次 | 上传用户:liujj08
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘要:TSL(Transpon Layer Security)协议是重要的互联网标准协议。重点分析了TSL协议握手协议的过程,通过请求公钥与多次协商最终形成会话密钥。描述了证书、私钥的生成方法,实现一个服务端、客户端使用TSL协议传输的方法,并验证TSL安全传输的效果。
  关键词:传输层安全传输;TSUSSL; TCP安全通讯信
  中图分类号:TP393.08
  文献标识码:A
  文章编号:1009-3044(2019)36-0040-03
  1概述
  传输层安全协议(TSL, Transport Layer Security)是如今互联网上应用最广泛的加密方法[1],是重要的互联网标准,其前身为网景公司于提出的安全套协议(SSL, Secure Socket Layer)。在TLS/SSL出现之前,大部分应用层协议(http、ftp、smtp等)存在着网络安全问题。例如,互联网重要的基础协议http协议,在传输过程中使用的是明文信息,传输报文一旦被截获便会泄露传输内容;传输过程中报文如果被篡改,无法轻易发现;无法保证消息交换的对端身份的可靠性。为了解决此类场景下的问题.研究人员提出了在应用层和传输层之间加入了TLS/SSL协议[2-4]。https协议由此产生,并广泛运用于互联网的安全传输。但是,由此也容易让人误以为类似于https是一种全新的安全协议,然而其本质是包裹于TLS/SSL之上的http协议[5]。因此,基于TSL协议直接实现TCP的安全传输,通过代码分析和还原TSL安全传输的本质是有必要的。
  2 TSL原理
  TLS协议可以分为两部分:记录协议(ReCord ProtoCol)和握手协议(Handshake Protocol)。记录协议通过使用客户端和服务端协商后的秘钥进行数据加密传输。握手协议客户端和服务端进行协商,确定一组用于数据传输加密的密钥串[6]。在握手协议阶段的基本过程是:1)客户端向服务器端索要并验证公钥;2)双方协商生成“对话密钥”。
  TSL的关键在握手协议阶段,握手协议完成之时就已经构建了基于“对话密钥”的安全传输基础。握手阶段的过程及原理分为6个步骤[7]:
  第一步客户端发起请求:客户端给出协议版本号、一个自动生成的随机数(Client random),以及客户端支持的加密方法。第二步服务端回应:服务端确认双方使用的加密方法,并给出数字证书以及一个服务端生成的随机数(Server random)。第三步证书校验及客户端请求:客户端确认数字证书有效,然后生成一个新的随机数(Premaster secret),并使用数字证书中的公钥,加密这个随机数,发给服务端。第四步服务端解密:服务端使用自己的私钥,获取客户端发来的随机数(即Premaster se-eret)。第五步对话密钥生成:客户端和服务端根据约定的加密方法,使用前面的三个随机数,生成”对话密钥”(session key),用来加密接下来的整个对话过程。第六步握手结束:客户端计算所有接收信息的hash值,并采用协商密钥解密encrypt-ed_handshake_message,验证服务器发送的数据和密钥,验证通过则握手完成。
  3基于TSL的安全TCP传输实现
  3.1密钥及证书的生成
  在TSL的握手阶段,至少需要一个证书及密钥,才能完成握手生成一个安全的对话密钥。OpenSSL是一个开放源代码的软件库包,能通用于主流操作系统。利用OpenSSL,可以生成服务端密钥及证书[8]。
  (1)OpenSSL安装
  下并安装好之后,需要用openssl version在命令行查看当前版本,验证是否安装成功。如果安装成功,需要配置OpenS-SL的两个环境变量信息,在命令行中输入:set RANDFILE=D:\OpenSSL-Win64V rnd和set OPENSSL_CONF=D: \OpenSSL-Win64\bin\cnflopenssl.enf’。其中“D:\OpenSSL-Win64”是OpenS-SL的安裝目录,“openssl.enf’”是OpenSSL的配置信息。
  (2)生成私钥
  使用命令openssl genrsa -des3 -out privatekey.pem 2048生成一个2048位的RSA密钥privatekey.pem,同时需要输入一个des3加密的密码,如果不想每次输入密码,则可以使用命令openssl genrsa -out privatekey.pem 2048生成一个无密的2048位密钥。如果需要生成安全的密钥,可以将2048更改为4096或更长。
  (3)生成公钥
  利用上一步中生成的私钥文件privatekey.pem,使用命令openssl req -new -keyprivatekey.pem -out cert.csr生成cert.csr证书请求文件。在互联网环境中,需要用cert.csr证书请求文件去数字证书颁发机构(即CA)申请一个正式的数字证书。为了便于测试,使用命令openssl req -new -x509 -key privatekey.pem -out cert.crt -days 365生成一个申请机构和颁发机构都是自身的测试数字证书cert.crt。
  数字证书生成中需要输入的一些信息说明:Country Name(2 letter code) [AU]:CN ISO国家代码(只支持两位字符)State or Province Name (full name) [Some-State]:ZJ所在省份Locality Name (eg, city) []:HZ所在城市Organization Name (eg, company):SW_TECH公司名称Organizational Unit Name (eg,section) []:SW_TECH组织名称Common Name (eg,YOUR name) []:127.0.0.1申请证书的域名(为了测试方便,此处使用本机回环地址)Email Address []:admin@aclmin.com管理员邮箱   (4)清除私钥密码
  将加密的RSA密钥转成未加密的RSA密钥,避免每次读取都要求输入解密密码。使用命令openssl rsa -in privatekey.pem-out privatekey.pem.un
  用私钥privatekey.pem.un和公钥cert.crt证书文件,在程序中使用并开发一个加密通讯的服务器。
  3.2安全服务端实现
  在安全服务端,需要传人私钥privatekey.pem.un和公钥cert.ert证书文件。私钥文件需要谨慎保存,一旦文件泄露或被第三方获取内容,在密钥过期之前第三方能一直冒充服务端欺骗客户端连接。服务端部分实现代码(基于Python,客户端相同1:
  def tsl_server(address):
  context = ssl. create_default_context(ssl. Purpose. CLI-ENT_AUTH)
  context. load_cert_chain(certfile= "cert. crt", keyfile= "pri-vatekey.pem.un")
  listener =
  socket. socket(socket. AF_INET,
  socket.SOCK_STREAM)
  listener.setsockopt(socket.SOL_SOCKET, socket.SO_REUSE-ADDR,11
  lis,tener.bincl(address)
  listener.listen(l)
  print(’Listening at interface {!r) and port(".format(*address》
  raw_sock, address= listener.accept0
  print(’Connection from host {!r) and port {}’.format(*address》
  ssl_sock= context.wrap_socket(raw_sock, server_side=True)
  ssl_sock.sendall(’My name is TSLServer.’.encode(’ascii’》
  ssl_sock.close0
  3.3客户端实现
  客户端需要公钥证书cert.crt文件,不需要服务端私钥。在测试时,需要提供与证书生成时对应的common name项对应的正确域名,本次测试使用127.0.0.1,在互联网环境中需要使用正确的域名。部分客户端代码:
  def tsl_cleint(address):
  cafile= "{:ert.crt"
  host, port= address
  purpose= ssl.Purpose.SERVER_AUTH
  context= ssl.create_default_context(purpose, caf/le=caf/le)
  raw_sock = socket. socket(socket. AF_INET, socket.SOCK_STREAM)
  raw_sock.connect《host, port》
  print(’Connected to host(!r} and port {".format(host, port》
  4测试与结论
  4.1测试
  启动服务端,同时启动RawCap抓包工具,运行客户端程序对服务端发送请求并获得服务端的返回数据。对本地ip抓包捕获9000端口内容,与没有采用TSL安全传输进行对比;对TSL握手阶段不同阶段的抓包内容进行对比。
  对比图1和图2中内容,在没有采用TLS协议的TCP通信中,传输的是明文内容;使用了TSL协议之后,捕获的TCP传输内容不再可见,是加密的内容。
  对比图3和图4中的内容,得知TSL握手协议的前面三次会话是采用的明文传输,所以服务端发送给客户端的证书也是明文传输的;直到会话密钥产生后的传输内容才采用密文传输。
  4.2结论
  在典型的TSL通信场景中,客户端向服务器索取证书,证书被信任机构签名生效,且包含一个公钥。客户端对证书中声明的身份进行第三方验证,确认其安全匹配。客户端与服务器就加密算法、压缩以及密钥等设定进行协商,最后使用协商结果的方案对套接字上双向传输的数据进行安全保护。
  通过测试对比,采用TSL协议后的TCP传输内容为密文,对传输数据起到了明显的安全保护,进步改进TCP服务端,可以在此基础上构建出完整安全的TCP服务器。
  参考文献:
  [1]古尔利(David Gourley)等.HTTP权威指南[M].北京:人民邮电出版社,2012.
  [2] RESCORLA E.The Transport Layer Security (TLS) ProtocolVersion l.3 - draft - ietf - tls - tls13 - 10[DB/OL].[2018 - 03 -30].https://tools.ietf.org/html/draft - ietf - tlstls13 - 10 (2015).
  [3] RESCORLA E.rlhe Transport Layer Security (TLS) Protocol Ver-sion l.3 - draft - ietf - tls - tls13 - 13[DB/OL].[2018 - 03 -30].https://tools.ietf.org/htmUdraft - ietf - tlstls13 - 13 (2016).
  [4] RESCORLA E.’rhe Transport Layer Security (TLS) Protocol Ver-sion l.3 - draft - ietf - tls - tls13 - 18[DB/OL].[2018 - 03 -30].https://tools.ietf.org/html/draft - ietf - tlstls13 - 18 (2016).
  [5]閆露,邓浩,江陈晓.TLS协议现状与研究综述[J].网络新媒体技术,2019,8(01):1-8.
  [6]百度百科.TSL[EB/OL].https://baike. baidu. com/item/TLS/2979545.
  [7]张兴隆,程庆丰,马建峰.TLS l.3协议研究进展[J].武汉大学学报:理学版,2018,64(06):471-484.
  [8]简书.OpenSSL下载安装[EB/OL].htfps://www.jianshu.c om/p/12aldc4ah7aO
  【通联编辑:代影】
  收稿日期:2019-11-11
  基金项目:湖南省教育厅科学研究规划课题(编号:17C0477)作者简介:文志华(1982-),男,湖南桃江人,讲师,硕士,主要研究方向为网络安全、智能医疗信息处理;周序生,副教授,硕士,主要
  研究方向为网络安全、大数据处理。
其他文献
摘要:由于计算机网络具有开放性、互连性和多样性的特点,因此容易受到攻击,因此网络安全措施变得越来越重要。随着计算机技术的飞速发展,各种软件的功能越来越广泛,极大地方便了人们的生活和工作。同时,在影响计算机安全运行的各种软件应用程序过程中,安全性问题逐渐变得敏感脆弱起来,这对用户的数据信息构成了重大威胁。因此计算机用户必须更加注意软件的安全性,并确保计算机数据安全可靠,本文讨论计算机软件的安全性问题
摘要:作为高职教育中的核心内容,高职计算机教育可以帮助学生掌握计算机技术,并强化学生计算机素养。但是纵观当前高职教育管理开展,其中计算机教育管理仍体现为传统管理模式,导致其管理质量和水平受到严重影响,无法为高职计算机教育带来实质性的帮助。而通过对计算机教育网络化管理的施行,则可以在提升计算机教育管理水平的同时,实现对管理模式的创新。基于此,该文针对高职计算机教育网络化管理策略进行分析研究。  关键
新疆不同地区教育水平不同,不同教育水平的学生进入高职院校后,每个班级都是民汉互嵌式班级,全部采用国语授课,这对教师教学和学生学习提出了挑战。因此,对新疆高职院校民汉
摘要:随着科技水平的不断发展,计算机技术的逐漸进步,世界已经进入了信息化时代。世界各地对计算机的使用已经趋向于平民化,计算机技术逐渐被广大群众所重视并需要。与此同时,关于计算机网络信息安全中出现的信息安全问题,也越来越多,这直接影响着广大群众的信息安全。计算机网络信息安全中数据加密技术的探索与研究,成为众多科研人员所关注的重点问题。本文就计算机网络信息安全中数据加密技术的相关内容,进行了一个分析。
摘要:在802.lx无线认证场景下,出口网关不参与到整个认证流程,无法对上网终端进行基于用户或用户组的上网策略控制,为此本文提出了一种无线应用场景下的出口网关权限策略控制的方法,首先对AAA服务器和出口网关进行权限策略配置,然后通过扩展radius协议使radius认证附带更多认证参数,最后通过AAA服务器和出口网关之间的私有认证协议报文传递使出口网关即使不参与整个认证流程依然能获知终端的用户和用
摘要:随着人们对教育的重视,大学生家教行业迎来了发展的春天。为了方便大学生和学生用户获取家教信息,对家教APP买施020模式开发。从家教现状、可行性分析、需求分析、设计和实现等环节,对家教APP开发的内容进行详细论述,能够作为软件开发案例进行重现,给相似的软件开发提供借鉴。  关键词:家教;O2O模式;软件APP开发  中图分类号:TP311.5  文献标识码:A  文章编号:1009-3044(
摘要:随着人们生活水平的提高,尤其是对于我国来说,很多的人长时间处于亚健康状态,健康问题的重视显得尤为重要,随着计算机技术的发展及推进,信息化系统不仅能为个人健康管理提供便利,还推动人类健康管理的形态更加完善,不断改进个人身体素质。为此,设计了基于Android并结合Java开发语言、LitePal数据库、SQLite以及OKHttp相关技术等,设计开发出比较科学合理的适用于个人类健康的健康助手A
摘要:21世纪,随着信息技术的快速发展,全球化趋势已经势不可挡。信息技术的全球化不仅改变了人们的生产、生活方式,提高了大众的生活品位,也促进了社会和时代的不断进步,而计算机软件技术作为信息化时代发展的一个重要领域发挥着越来越重要的作用。该文从分层技术的角度出发,研究了其在计算机软件开发中的应用效果,寄希望对我国的信息技术发展有所裨益。  关键词:分层技术;计算机软件;应用效果  中图分类号:TP3
摘要:发展现代农业,将农业融入互联网技术中,可以开拓农业发展的新领域。本文从网站的功能分析、数据库设计及关键功能的实现技术详细介绍了下蜀农业信息网设计的全过程。  关键词:下蜀;农业信息网;MVC;数据库;Ajax  中图分类号:G642 文献标识码:A  文章编号:1009-3044(2019)35-0003-03  1 概述  在中国这个文明古国,农业是主要产业之一,当农业与互联网产生交集,农
摘要:数据分类算法作为大数据分析与数据挖掘中的关键内容,面对大数据信息时代的到来,各种各样的分类技术和算法高速发展,但在发展的过程中仍然存在部分难以有效解决的问题。该文通过对数据挖掘分类问题的分析,提出决策树分类算法、人工神经网络分类算法和朴素贝叶斯分类算法改进策略。  关键词:大数据分析;大数据挖矿;分类算法技术  中图分类号:TP18 文献标识码:A  文章编号:1009-3044(2019)