CN106936848A - 一种服务器的socket加密通信方法 - Google Patents
一种服务器的socket加密通信方法 Download PDFInfo
- Publication number
- CN106936848A CN106936848A CN201710257136.4A CN201710257136A CN106936848A CN 106936848 A CN106936848 A CN 106936848A CN 201710257136 A CN201710257136 A CN 201710257136A CN 106936848 A CN106936848 A CN 106936848A
- Authority
- CN
- China
- Prior art keywords
- socket
- objects
- client
- server
- eventselect
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 91
- 230000006854 communication Effects 0.000 title claims abstract description 47
- 238000004891 communication Methods 0.000 title claims abstract description 46
- 230000003993 interaction Effects 0.000 claims abstract description 18
- 238000012856 packing Methods 0.000 claims description 27
- 230000008569 process Effects 0.000 claims description 27
- 238000012544 monitoring process Methods 0.000 claims description 23
- 230000003139 buffering effect Effects 0.000 claims description 16
- 238000006243 chemical reaction Methods 0.000 claims description 15
- 230000005540 biological transmission Effects 0.000 claims description 11
- 238000012806 monitoring device Methods 0.000 claims description 10
- 238000007689 inspection Methods 0.000 claims description 4
- 230000000903 blocking effect Effects 0.000 claims description 3
- 238000004806 packaging method and process Methods 0.000 claims description 3
- 230000009466 transformation Effects 0.000 claims description 3
- 241000208340 Araliaceae Species 0.000 claims description 2
- 235000005035 Panax pseudoginseng ssp. pseudoginseng Nutrition 0.000 claims description 2
- 235000003140 Panax quinquefolius Nutrition 0.000 claims description 2
- 235000008434 ginseng Nutrition 0.000 claims description 2
- 230000009286 beneficial effect Effects 0.000 abstract description 2
- 230000000295 complement effect Effects 0.000 description 4
- 235000013399 edible fruits Nutrition 0.000 description 3
- 230000006872 improvement Effects 0.000 description 2
- 238000012545 processing Methods 0.000 description 2
- 241001269238 Data Species 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000013524 data verification Methods 0.000 description 1
- 230000001934 delay Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 238000010586 diagram Methods 0.000 description 1
- 238000005538 encapsulation Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 230000002452 interceptive effect Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
- 238000010200 validation analysis Methods 0.000 description 1
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/16—Implementation or adaptation of Internet protocol [IP], of transmission control protocol [TCP] or of user datagram protocol [UDP]
- H04L69/161—Implementation details of TCP/IP or UDP/IP stack architecture; Specification of modified or new header fields
- H04L69/162—Implementation details of TCP/IP or UDP/IP stack architecture; Specification of modified or new header fields involving adaptations of sockets based mechanisms
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L63/00—Network architectures or network communication protocols for network security
- H04L63/04—Network architectures or network communication protocols for network security for providing a confidential data exchange among entities communicating through data packet networks
- H04L63/0428—Network architectures or network communication protocols for network security for providing a confidential data exchange among entities communicating through data packet networks wherein the data content is protected, e.g. by encrypting or encapsulating the payload
- H04L63/045—Network architectures or network communication protocols for network security for providing a confidential data exchange among entities communicating through data packet networks wherein the data content is protected, e.g. by encrypting or encapsulating the payload wherein the sending and receiving network entities apply hybrid encryption, i.e. combination of symmetric and asymmetric encryption
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L63/00—Network architectures or network communication protocols for network security
- H04L63/08—Network architectures or network communication protocols for network security for authentication of entities
- H04L63/0823—Network architectures or network communication protocols for network security for authentication of entities using certificates
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L63/00—Network architectures or network communication protocols for network security
- H04L63/12—Applying verification of the received information
- H04L63/123—Applying verification of the received information received data contents, e.g. message integrity
Landscapes
- Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Computer Hardware Design (AREA)
- Computing Systems (AREA)
- General Engineering & Computer Science (AREA)
- Computer And Data Communications (AREA)
Abstract
本发明公开了一种服务器的socket加密通信方法,包括:S1、启动新线程,根据预定参数创建服务器的socket处理器对象;S2、在所述socket处理器对象中,创建服务器socket通道对象、服务器socket连接对象和事件选择器;S3、在所述事件选择器中,为所述服务器socket通道对象注册客户端请求连接事件;S4、启动新线程,接收第一客户端发送的连接请求事件,与所述第一客户端建立socket连接;S5、连接成功后,与所述第一客户端进行数据交互。本发明的有益效果是:本技术方案通过在服务器为客户端生成socket通道对象、socket连接对象和SSL引擎,与服客户端建立socket连接和数据交互,不仅提高了数据交互的速度和效率,还大大提高了数据交互的安全性。
Description
技术领域
本发明涉及数据通信领域,特别涉及一种服务器的socket加密通信方法。
背景技术
现有技术中,服务器的通信方法包括单工通信、半双工通信和全双工通信三种。单工通信是指消息只能单方向传输的工作方式。半双工通信可以实现双向的通信,但不能在两个方向上同时进行,必须轮流交替地进行。全双工通信是指在通信的任意时刻,允许数据同时在两个方向上传输。但是,一般的通信方法在速度、效率和安全性方面并不理想。
发明内容
本发明提供了一种服务器的socket加密通信方法,解决了现有技术的通信方法在速度、效率以及安全性方面并不理想的技术问题。
本发明解决上述技术问题的技术方案如下:一种服务器的socket加密通信方法,包括:
S1、启动新线程,根据预定参数创建服务器的socket处理器对象,同时启动新线程创建socket连接监视器对象,所述预定参数包括:服务类型、监听地址、监听端口、连接设定参数、消息格式变换处理类以及消息处理器;
S2、在所述socket处理器对象中,创建服务器socket通道对象、服务器socket连接对象和事件选择器,并将所述服务器socket通道对象设置为非阻塞模式,将所述服务器socket连接对象与所述监听地址和所述监听端口进行绑定;
S3、在所述事件选择器中,为所述服务器socket通道对象注册客户端请求连接事件;
S4、启动新线程,根据所述服务器socket通道对象、所述服务器socket对象和所述事件选择器创建并启动服务器socket运行对象,接收第一客户端发送的连接请求事件,生成第一socket连接对象、所述第一socket通道对象和SSL引擎,与所述第一客户端建立socket连接;
S5、连接成功后,通过所述第一socket连接对象、所述第一socket通道对象和所述SSL引擎与所述第一客户端进行数据交互,同时将所述第一socket连接对象添加到所述socket连接监视器对象的socket连接监视列表中,以对所述第一socket连接对象的连接状态进行监视。
本发明的有益效果是:相比现有的通信方法,本技术方案通过在服务器为客户端生成socket通道对象、socket连接对象和SSL引擎,与服客户端建立socket连接和数据交互,不仅提高了数据交互的速度和效率,还大大提高了数据交互的安全性。
在上述技术方案的基础上,本发明还可以做如下改进。
优选地,步骤S4中,接收第一客户端发送的连接请求事件,生成第一socket连接对象、所述第一socket通道对象和SSL引擎,与所述第一客户端建立socket连接的方法包括:
A1、当所述服务器socket通道对象接收到所述第一客户端发送的连接请求事件时,将所述连接请求事件报告给所述事件选择器;
A2、当所述事件选择器接收到所述连接请求事件时,创建第一socket连接对象和第一socket通道对象,生成第一连接ID,将所述第一socket通道对象作为所述第一socket连接对象的通信通道;
A3、根据所述连接设定参数中的SSL信息创建并初始化SSL上下文对象,根据所述SSL上下文对象创建SSL引擎;
A4、通过所述第一socket通道对象、所述第一socket连接对象和所述SSL引擎与所述第一客户端建立socket连接。
优选地,步骤S5中,连接成功之后,通过所述第一socket连接对象、所述第一socket通道对象和所述SSL引擎与所述第一客户端进行数据交互之前,还包括:
B1、在所述事件选择器中为所述第一socket通道对象注册读事件,并给所述第一socket通道对象返回读事件选择键;
B2、将所述读事件选择键与所述第一socket连接对象的关系保存到连接对象列表中。
优选地,步骤S5中,通过所述第一socket连接对象、所述第一socket通道对象和所述SSL引擎与所述第一客户端进行数据交互的方法包括:
C1、当所述第一socket通道对象接收到所述第一客户端发送的读请求事件时,将所述读请求事件报告给所述事件选择器,通过所述事件选择器将所述读事件选择键放入事件对象集合中;
C2、当所述服务器需要向所述第一客户端写入数据时,在所述事件选择器中为所述第一socket通道对象注册写事件,并给所述第一socket通道对象返回写事件选择键;
C3、当所述第一socket通道对象与所述第一客户端的socket通道对象的写操作准备就绪时,在所述事件选择器中生成可写事件,将所述写事件选择键放入所述事件对象集合中;
C4、轮询所述事件对象集合,当询查到所述读事件选择键时,启动新线程,处理所述读事件选择键对应的所述读请求事件,当询查到所述写事件选择键时,启动新线程,处理所述写事件选择键对应的所述可写事件。
优选地,步骤C4中,处理所述读事件选择键对应的所述读请求事件的方法包括:
D1、根据所述读事件选择键与所述第一socket连接对象的关系定位所述第一socket连接对象和所述第一socket通道对象;
D2、判断所述SSL引擎与所述第一客户端的SSL引擎是否完成握手,如是则从所述第一socket通道对象中读取到第一数据包,将所述第一数据包放入读数据缓冲区,进行拆包处理,得到第一数据块,否则进行SSL握手处理;
D3、调用所述消息格式变换处理类的数据格式转换方法将所述第一数据块转化为消息格式的第一消息;
D4、调用所述第一socket连接对象的消息处理方法处理所述第一消息,并通过所述第一socket通道对象将处理结果发送给所述第一客户端的socket通道对象;
优选地,步骤D2中,进行拆包处理的方法包括:
从所述读数据缓冲区取出所述第一数据包,将所述第一数据包的拆包状态设置为未拆包,创建解包数据缓冲区;
调用所述SSL引擎的解包方法,对所述第一数据包进行解包得到第一数据块,将所述第一数据块放入所述解包数据缓冲区,将所述拆包状态设置为已拆包。
优选地,步骤C4中,处理所述写事件选择键对应的所述可写事件的方法包括:
E1、从数据缓存区中读取到消息格式的第二消息;
E2、调用所述消息格式变换处理类的数据格式转换方法将所述第二消息转化为字节流格式的第二数据块;
E3、判断所述SSL引擎与所述第一客户端的SSL引擎是否完成握手,如是则对所述第二数据块进行打包处理,得到第二数据包,并将所述第二数据包放入写数据缓冲区,然后执行步骤E4,否则进行SSL握手处理;
E4、从所述写数据缓冲区中取出所述第二数据包,调用底层的写数据流方法将所述第二数据包写入所述第一socket通道对象中,并通过所述第一socket通道对象发送到所述第一客户端的socket通道对象;
优选地,步骤E3中,进行打包处理的方法包括:
将所述第二数据块的打包状态设置为未打包,创建打包数据缓冲区;
调用所述SSL引擎的打包方法,对所述第二数据块进行打包得到第二数据包,将所述第二数据包放入所述打包数据缓冲区,将所述打包状态设置为已打包。
优选地,步骤S5中,通过所述socket连接监视器对象对所述socket连接监视列表中的每个socket连接对象的连接状态进行监视的方法包括:
F1、定时启动所述socket连接监视器对象中的检查socket连接的任务;
F2、循环获取所述socket连接监视列表中的每个socket连接对象;
F3、通过每个socket连接对象向对应的客户端发送ping消息,判断是否接收到应答消息,如是则表示该socket连接对象为连接状态;否则表示该socket连接对象为未连接状态,删除该socket连接对象。
优选地,步骤S4中,如果接收到多个客户端发送的连接请求事件,则为每个客户端生成各自的socket连接对象和socket通道对象,同时与多个客户端建立socket连接。
附图说明
图1为本发明实施例提供的一种服务器的socket加密通信方法的流程示意图;
图2为本发明另一实施例提供的一种服务器的socket加密通信方法的流程示意图;
图3为本发明另一实施例提供的一种服务器的socket加密通信方法的流程示意图;
图4为本发明另一实施例提供的一种服务器的socket加密通信方法的流程示意图;
图5为本发明另一实施例提供的一种服务器的socket加密通信方法的流程示意图;
图6为本发明另一实施例提供的一种服务器的socket加密通信方法的流程示意图;
图7为本发明另一实施例提供的一种服务器的socket加密通信方法的流程示意图;
图8为本发明另一实施例提供的客户端与服务器的socket通信过程的示意图。
具体实施方式
以下结合附图对本发明的原理和特征进行描述,所举实例只用于解释本发明,并非用于限定本发明的范围。
如图1所示,提供一种服务器的socket加密通信方法,包括:
S1、启动新线程,根据预定参数创建服务器的socket处理器对象,同时启动新线程创建socket连接监视器对象,预定参数包括:服务类型、监听地址、监听端口、连接设定参数、消息格式变换处理类以及消息处理器;
S2、在socket处理器对象中,创建服务器socket通道对象、服务器socket连接对象和事件选择器,并将服务器socket通道对象设置为非阻塞模式,将服务器socket连接对象与监听地址和监听端口进行绑定;
S3、在事件选择器中,为服务器socket通道对象注册客户端请求连接事件;
S4、启动新线程,根据服务器socket通道对象、服务器socket对象和事件选择器创建并启动服务器socket运行对象,接收第一客户端发送的连接请求事件,生成第一socket连接对象、第一socket通道对象和SSL引擎,与第一客户端建立socket连接;
S5、连接成功后,通过第一socket连接对象、第一socket通道对象和SSL引擎与第一客户端进行数据交互,同时将第一socket连接对象添加到socket连接监视器对象的socket连接监视列表中,以对第一socket连接对象的连接状态进行监视。
具体地,服务器先创建socket处理器对象,然后在socket处理器对象中,创建服务器socket通道对象、服务器socket连接对象和事件选择器,为后续连接作准备工作,服务器在接收客户端发送的连接请求之前,需要为服务器socket通道对象在事件选择器中注册一个客户端请求连接事件,在服务器socket通道对象接收到客户端发送的连接请求时,将该连接请求报告给事件选择器,事件选择器为该客户端生成一个连接ID和用于通信的socket连接对象和socket通道对象以及SSL引擎,然后,通过服务器生成的socket连接对象和socket通道对象以及SSL引擎与客户端的socket连接对象和socket通道对象进行通信。同时,将该socket连接对象添加到socket连接监视器对象的socket连接监视列表中,通过socket连接监视器对象定时对socket连接监视列表中的所有socket连接对象进行连接检查,删除未连接上或失效的对象。
上述实施例中,网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。建立网络通信连接至少要一对端口号(socket),socket本质是编程接口,对TCP/IP的封装,TCP/IP也要提供可供程序员做网络开发所用的接口,这就是socket编程接口,socket用于描述IP地址和端口,是一个通信链的句柄,可以用来实现不同虚拟机或不同计算机之间的通信。socket非常类似于电话插座。以一个国家级电话网为例,电话的通话双方相当于相互通信的2个进程,区号是它的网络地址;区内一个单位的交换机相当于一台主机,主机分配给每个用户的局内号码相当于socket号。任何用户在通话之前,首先要占有一部电话机,相当于申请一个socket;同时要知道对方的号码,相当于对方有一个固定的socket。然后向对方拨号呼叫,相当于发出连接请求(假如对方不在同一区内,还要拨对方区号,相当于给出网络地址)。假如对方在场并空闲(相当于通信的另一主机开机且可以接受连接请求),拿起电话话筒,双方就可以正式通话,相当于连接成功。双方通话的过程,是一方向电话机发出信号和对方从电话机接收信号的过程,相当于向socket发送数据和从socket接收数据。通话结束后,一方挂起电话机相当于关闭socket,撤消连接。
具体地,如图2所示,步骤S4中,接收第一客户端发送的连接请求事件,生成第一socket连接对象、第一socket通道对象和SSL引擎,与第一客户端建立socket连接的方法包括:
A1、当服务器socket通道对象接收到第一客户端发送的连接请求事件时,将连接请求事件报告给事件选择器;
A2、当事件选择器接收到连接请求事件时,创建第一socket连接对象和第一socket通道对象,生成第一连接ID,将第一socket通道对象作为第一socket连接对象的通信通道;
A3、根据连接设定参数中的SSL信息创建并初始化SSL上下文对象,根据SSL上下文对象创建SSL引擎;
A4、通过第一socket通道对象、第一socket连接对象和SSL引擎与第一客户端建立socket连接。
具体地,服务器在接收客户端发送的连接请求之前,需要为服务器socket通道对象在事件选择器中注册一个客户端请求连接事件,在服务器socket通道对象接收到客户端发送的连接请求时,将该连接请求报告给事件选择器,事件选择器为该客户端生成一个连接ID和用于通信的socket连接对象、socket通道对象和SSL引擎,然后,通过服务器生成的socket连接对象、socket通道对象和SSL引擎与客户端的socket连接对象和socket通道对象进行通信。
具体地,如图3所示,步骤S5中,连接成功之后,通过第一socket连接对象、第一socket通道对象和SSL引擎与第一客户端进行数据交互之前,还包括:
B1、在事件选择器中为第一socket通道对象注册读事件,并给第一socket通道对象返回读事件选择键;
B2、将读事件选择键与第一socket连接对象的关系保存到连接对象列表中。
具体地,在服务器接收客户端发送的读请求之前,需要为第一socket通道对象在事件选择器中注册一个感兴趣的读事件,同时事件选择器给第一socket通道对象返回一个读事件选择键,在第一socket通道对象接收到客户端的socket通道对象发送过来的读请求时,上报给事件选择器,事件选择器就将第一socket通道对象对应的读事件选择键放入事件对象集合中,事件对象集合中包括需要进行处理的读事件或写事件。最后,将读事件选择键与第一socket连接对象的关系保存到连接对象列表中,用于后续根据读事件选择键定位第一socket连接对象。
具体地,如图4所示,步骤S5中,通过第一socket连接对象、第一socket通道对象和SSL引擎与第一客户端进行数据交互的方法包括:
C1、当第一socket通道对象接收到第一客户端发送的读请求事件时,将读请求事件报告给事件选择器,通过事件选择器将读事件选择键放入事件对象集合中;
C2、当服务器需要向第一客户端写入数据时,在事件选择器中为第一socket通道对象注册写事件,并给第一socket通道对象返回写事件选择键;
C3、当第一socket通道对象与第一客户端的socket通道对象的写操作准备就绪时,在事件选择器中生成可写事件,将写事件选择键放入事件对象集合中;
C4、轮询事件对象集合,当询查到读事件选择键时,启动新线程,处理读事件选择键对应的读请求事件,如图5所示,包括:
D1、根据读事件选择键与第一socket连接对象的关系定位第一socket连接对象和第一socket通道对象;
D2、判断SSL引擎与第一客户端的SSL引擎是否完成握手,如是则从第一socket通道对象中读取到第一数据包,将第一数据包放入读数据缓冲区,进行拆包处理,得到第一数据块,否则进行SSL握手处理;
D3、调用消息格式变换处理类的数据格式转换方法将第一数据块转化为消息格式的第一消息;
D4、调用第一socket连接对象的消息处理方法处理第一消息,并通过第一socket通道对象将处理结果发送给第一客户端的socket通道对象;
其中,进行拆包处理的方法包括:
从读数据缓冲区取出第一数据包,将第一数据包的拆包状态设置为未拆包,创建解包数据缓冲区;
调用SSL引擎的解包方法,对第一数据包进行解包得到第一数据块,将第一数据块放入解包数据缓冲区,将拆包状态设置为已拆包。
拆包结束后,需要对拆包结果进行判断,如果拆包结果为“BUFFER_OVERFLOW”,则表示在目标缓冲区没有足够的字节空间可以容纳结果,重新为存储解包用的数据缓冲区增加缓冲内存区域;如果拆包结果为“BUFFER_UNDERFLOW”,则表示SSL引擎不能对传入的数据解包,因为没有足够的源字节可以用来生成一个完整的包;如果拆包结果为“CLOSED”,则表示关闭了SSL引擎的这一端,或者由于它已经关闭而无法完成该操作,然后执行SSL引擎的closeOutBound方法;如果拆包结果为“OK”,SSL引擎完成了操作,完成标志设定为true,如果ssl握手操作已经完成,并且读到的数据缓冲区仍然还有未读完的数据的时候,继续调用ssl引擎的解包函数进行处理,否则,获取解码后的数据缓冲区的内容,并返回其大小,完成标志设定为true。
当询查到写事件选择键时,启动新线程,处理写事件选择键对应的可写事件,如图6所示,包括:
E1、从数据缓存区中读取到消息格式的第二消息;
E2、调用消息格式变换处理类的数据格式转换方法将第二消息转化为字节流格式的第二数据块;
E3、判断SSL引擎与第一客户端的SSL引擎是否完成握手,如是则对第二数据块进行打包处理,得到第二数据包,并将第二数据包放入写数据缓冲区,然后执行步骤E4,否则进行SSL握手处理;
E4、从写数据缓冲区中取出第二数据包,调用底层的写数据流方法将第二数据包写入第一socket通道对象中,并通过第一socket通道对象发送到第一客户端的socket通道对象;
其中,进行打包处理的方法包括:
将第二数据块的打包状态设置为未打包,创建打包数据缓冲区;
调用SSL引擎的打包方法,对第二数据块进行打包得到第二数据包,将第二数据包放入打包数据缓冲区,将打包状态设置为已打包。
打包结束后,需要对打包结果进行判断,如果打包结果为“BUFFER_OVERFLOW”,则表示在目标缓冲区没有足够的字节空间可以容纳结果,重新为存储解包用的数据缓冲区增加缓冲内存区域;如果打包结果为“BUFFER_UNDERFLOW”,则表示SSL引擎不能对传入的数据打包,因为没有足够的源字节可以用来生成一个完整的包,完成标志设定为true;如果打包结果为“CLOSED”,则表示关闭了SSL引擎的这一端,或者由于它已经关闭而无法完成该操作,然后执行SSL引擎的closeOutBound方法;如果打包结果为“OK”,SSL引擎完成了操作,完成标志设定为true,如果写数据缓冲区还有数据的时候,为打包结果数据缓冲区增加其缓冲内存区域,否则,完成标志设定为true。将打包的数据字节大小返回,并将打包的数据写入到管道。
握手处理过程包括:首先获取到SSL引擎的当前握手状态;判断当前的状态,如果状态为“NOT_HANDSHAKING”,则表示SSL引擎当前没有进行握手,执行SSL握手处理;创建一个解包用的读缓冲区;当握手操作没有完成,并且已经不再需要更多数据的时候,查询SSL引擎的当前握手状态,如果状态为“NOT_HANDSHAKING”,则表示没有握手,表示握手操作已经完成,握手完成标志为true;如果状态为“FINISHED”,表示SSL引擎已经完成握手,不做任何处理;如果状态为“NEED_TASK”,表示SSL引擎在继续进行握手前需要一个(或多个)代理任务的结果,获取该代理任务,并在其他线程中运行代理任务;如果状态为“NEED_UNWRAP”,表示在继续进行握手前,SSL引擎需要从远端接收数据,执行读数据和拆包处理;如果状态为“NEED_WRAP”,表示在继续进行握手前,SSL引擎必须向远端发送数据,所以应该调用SSLEngine.wrap(),执行打包和写的处理。最后,将解包用的数据读缓冲区清空。
具体地,当服务器需要向第一客户端写入数据时,在事件选择器中为第一socket通道对象注册一个写事件,并给第一socket通道对象返回写事件选择键,当第一socket通道对象与第一客户端的socket通道对象的写操作准备就绪时,在事件选择器中生成可写事件,将写事件选择键放入事件对象集合中,只有两边的通道对象均准备就绪,才能将数据写入通道对象中。可以看出,处理读事件选择键对应的读请求事件的过程与处理写事件选择键对应的可写事件的过程是通过不同线程完成的,两者可以并行处理,从而提高处理效率。
普通的TCP通信无法保证数据的安全,它随时可能被第三方截获而泄漏通信双方之间的隐私,这显然是我们不希望看到的,尤其在跟用户名、密码、个人信息息息相关的通信过程(如网上银行交易、机密文件传输等等)尤其看重数据交互的隐秘性,所以我们常常用SSL协议来建立安全保密的通信,SSL协议能够保证交互双方的数据按密文方式传输,第三方在没有私钥的情况下几乎无法破解,从而到达保密的目的。SSL交互数据的过程如下:
1、建立TCP连接
由于SSL协议依赖于TCP连接实施,所以在SSL交互之前需要先建立TCP连接。客户端connect服务端,服务端acccept客户端,经历三次握手以后TCP连接建立。
2、客户端发送SSL请求
客户端(Client)向服务端(Server)发送自身使用的SSL版本(SSL一共有三个版本)、加密算法的相关配置、随机数据以及其在在SSL协议中需要用到的信息。
3、服务端处理SSL请求
服务器(Server)反馈给客户端(Client)自己的SSL版本、加密算法的相关配置、随机数据以及用自己的私有密钥加密的SERVER-HELLO信息。服务端(Server)紧接着将自己的证书(包含公共密钥)传递过去。同时有个可选项目,即服务端(Server)可以要求客服端(Client)发送自己的证书。
4、客户端验证服务端身份
客服端(Client)用服务端(Server)传递过来证书验证服务端(Server)的身份,如果身份未验证通过则结束本次通信。证书验证通过后利用服务端(Server)的公共密钥尝试解开被其用私有密钥加密过的SERVER-HELLO信息,如果解开失败,说明该SERVER-HELLO必然是假的,故结束本次通信。
5、客户端发送公共密钥加密过的随机数据
客户端端(Client)生成随机数据(sharedsecret),并且把这个随机数据用服务端(Server)发送过来的的公共密钥加密,此次加密过程产生本次握手中的premastersecret(这个步骤是有可能有服务端的参与的,具体情况由他们使用的加密算法决定),然后将它(premastersecret)送回给服务端(Server)。如果服务端(Server)要求需要验证客户端(Client),那么客服端(Client)也需要自己把自己的证书(包含公共密钥)传递过去,同时送一些自己签过名(私有密钥加密)的数据过去。
6、服务端用私有密钥解密加密后的随机数据并协商暗号
Server验证完client的身份之后,然后用自己的私有密钥解密得到premastersecret然后双方利用这个premastersecret来共同协商,得到mastersecret(可理解为premastersecret为双方协商的暗号,然后使用这个暗号再协商一个mastersecret用来产生真正的会话密钥用来传输数据)以此来保证数据的决对安全。
7、服务端跟客户端利用暗号生成加密算法跟密钥key
双方用mastersecret一起产生真正的sessionkey,这将是一个对称加密的key。这个key还可以用来验证数据完整性。双方再交换结束信息,握手结束。接下来双方就可以用协商好的算法和密钥key,采用对称加密算法来通信了。
具体地,如图7所示,步骤S5中,通过socket连接监视器对象对socket连接监视列表中的每个socket连接对象的连接状态进行监视的方法包括:
F1、定时启动socket连接监视器对象中的检查socket连接的任务;
F2、循环获取socket连接监视列表中的每个socket连接对象;
F3、通过每个socket连接对象向对应的客户端发送ping消息,判断是否接收到应答消息,如是则表示该socket连接对象为连接状态;否则表示该socket连接对象为未连接状态,删除该socket连接对象。
具体地,socket连接监视器对象用于定时检查socket连接对象的连接状态,删除未连接或连接失效的socket连接对象。
具体地,步骤S4中,如果接收到多个客户端发送的连接请求事件,则为每个客户端生成各自的socket连接对象和socket通道对象,同时与多个客户端建立socket连接。如图8所示,服务器为每个客户端在服务器本地生成一个socket连接对象和socket通道对象,实现一个服务器与多个客户端的通信。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (10)
1.一种服务器的socket加密通信方法,其特征在于,包括:
S1、启动新线程,根据预定参数创建服务器的socket处理器对象,同时启动新线程创建socket连接监视器对象,所述预定参数包括:服务类型、监听地址、监听端口、连接设定参数、消息格式变换处理类以及消息处理器;
S2、在所述socket处理器对象中,创建服务器socket通道对象、服务器socket连接对象和事件选择器,并将所述服务器socket通道对象设置为非阻塞模式,将所述服务器socket连接对象与所述监听地址和所述监听端口进行绑定;
S3、在所述事件选择器中,为所述服务器socket通道对象注册客户端请求连接事件;
S4、启动新线程,根据所述服务器socket通道对象、所述服务器socket对象和所述事件选择器创建并启动服务器socket运行对象,接收第一客户端发送的连接请求事件,生成第一socket连接对象、所述第一socket通道对象和SSL引擎,与所述第一客户端建立socket连接;
S5、连接成功后,通过所述第一socket连接对象、所述第一socket通道对象和所述SSL引擎与所述第一客户端进行数据交互,同时将所述第一socket连接对象添加到所述socket连接监视器对象的socket连接监视列表中,以对所述第一socket连接对象的连接状态进行监视。
2.根据权利要求1所述的一种服务器的socket加密通信方法,其特征在于,步骤S4中,接收第一客户端发送的连接请求事件,生成第一socket连接对象、所述第一socket通道对象和SSL引擎,与所述第一客户端建立socket连接的方法包括:
A1、当所述服务器socket通道对象接收到所述第一客户端发送的连接请求事件时,将所述连接请求事件报告给所述事件选择器;
A2、当所述事件选择器接收到所述连接请求事件时,创建第一socket连接对象和第一socket通道对象,生成第一连接ID,将所述第一socket通道对象作为所述第一socket连接对象的通信通道;
A3、根据所述连接设定参数中的SSL信息创建并初始化SSL上下文对象,根据所述SSL上下文对象创建SSL引擎;
A4、通过所述第一socket通道对象、所述第一socket连接对象和所述SSL引擎与所述第一客户端建立socket连接。
3.根据权利要求1或2所述的一种服务器的socket加密通信方法,其特征在于,步骤S5中,连接成功之后,通过所述第一socket连接对象、所述第一socket通道对象和所述SSL引擎与所述第一客户端进行数据交互之前,还包括:
B1、在所述事件选择器中为所述第一socket通道对象注册读事件,并给所述第一socket通道对象返回读事件选择键;
B2、将所述读事件选择键与所述第一socket连接对象的关系保存到连接对象列表中。
4.根据权利要求3所述的一种服务器的socket加密通信方法,其特征在于,步骤S5中,通过所述第一socket连接对象、所述第一socket通道对象和所述SSL引擎与所述第一客户端进行数据交互的方法包括:
C1、当所述第一socket通道对象接收到所述第一客户端发送的读请求事件时,将所述读请求事件报告给所述事件选择器,通过所述事件选择器将所述读事件选择键放入事件对象集合中;
C2、当所述服务器需要向所述第一客户端写入数据时,在所述事件选择器中为所述第一socket通道对象注册写事件,并给所述第一socket通道对象返回写事件选择键;
C3、当所述第一socket通道对象与所述第一客户端的socket通道对象的写操作准备就绪时,在所述事件选择器中生成可写事件,将所述写事件选择键放入所述事件对象集合中;
C4、轮询所述事件对象集合,当询查到所述读事件选择键时,启动新线程,处理所述读事件选择键对应的所述读请求事件,当询查到所述写事件选择键时,启动新线程,处理所述写事件选择键对应的所述可写事件。
5.根据权利要求4所述的一种服务器的socket加密通信方法,其特征在于,步骤C4中,处理所述读事件选择键对应的所述读请求事件的方法包括:
D1、根据所述读事件选择键与所述第一socket连接对象的关系定位所述第一socket连接对象和所述第一socket通道对象;
D2、判断所述SSL引擎与所述第一客户端的SSL引擎是否完成握手,如是则从所述第一socket通道对象中读取到第一数据包,将所述第一数据包放入读数据缓冲区,进行拆包处理,得到第一数据块,否则进行SSL握手处理;
D3、调用所述消息格式变换处理类的数据格式转换方法将所述第一数据块转化为消息格式的第一消息;
D4、调用所述第一socket连接对象的消息处理方法处理所述第一消息,并通过所述第一socket通道对象将处理结果发送给所述第一客户端的socket通道对象。
6.根据权利要求5所述的一种服务器的socket加密通信方法,其特征在于,步骤D2中,进行拆包处理的方法包括:
从所述读数据缓冲区取出所述第一数据包,将所述第一数据包的拆包状态设置为未拆包,创建解包数据缓冲区;
调用所述SSL引擎的解包方法,对所述第一数据包进行解包得到第一数据块,将所述第一数据块放入所述解包数据缓冲区,将所述拆包状态设置为已拆包。
7.根据权利要求5所述的一种服务器的socket加密通信方法,其特征在于,步骤C4中,处理所述写事件选择键对应的所述可写事件的方法包括:
E1、从数据缓存区中读取到消息格式的第二消息;
E2、调用所述消息格式变换处理类的数据格式转换方法将所述第二消息转化为字节流格式的第二数据块;
E3、判断所述SSL引擎与所述第一客户端的SSL引擎是否完成握手,如是则对所述第二数据块进行打包处理,得到第二数据包,并将所述第二数据包放入写数据缓冲区,然后执行步骤E4,否则进行SSL握手处理;
E4、从所述写数据缓冲区中取出所述第二数据包,调用底层的写数据流方法将所述第二数据包写入所述第一socket通道对象中,并通过所述第一socket通道对象发送到所述第一客户端的socket通道对象。
8.根据权利要求7所述的一种服务器的socket加密通信方法,其特征在于,步骤E3中,进行打包处理的方法包括:
将所述第二数据块的打包状态设置为未打包,创建打包数据缓冲区;
调用所述SSL引擎的打包方法,对所述第二数据块进行打包得到第二数据包,将所述第二数据包放入所述打包数据缓冲区,将所述打包状态设置为已打包。
9.根据权利要求1,2,4-8任一项所述的一种服务器的socket加密通信方法,其特征在于,步骤S5中,通过所述socket连接监视器对象对所述socket连接监视列表中的每个socket连接对象的连接状态进行监视的方法包括:
F1、定时启动所述socket连接监视器对象中的检查socket连接的任务;
F2、循环获取所述socket连接监视列表中的每个socket连接对象;
F3、通过每个socket连接对象向对应的客户端发送ping消息,判断是否接收到应答消息,如是则表示该socket连接对象为连接状态;否则表示该socket连接对象为未连接状态,删除该socket连接对象。
10.根据权利要求1,2,4-8任一项所述的一种服务器的socket加密通信方法,其特征在于,步骤S4中,如果接收到多个客户端发送的连接请求事件,则为每个客户端生成各自的socket连接对象和socket通道对象,同时与多个客户端建立socket连接。
Priority Applications (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| CN201710257136.4A CN106936848A (zh) | 2017-04-19 | 2017-04-19 | 一种服务器的socket加密通信方法 |
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| CN201710257136.4A CN106936848A (zh) | 2017-04-19 | 2017-04-19 | 一种服务器的socket加密通信方法 |
Publications (1)
| Publication Number | Publication Date |
|---|---|
| CN106936848A true CN106936848A (zh) | 2017-07-07 |
Family
ID=59437331
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| CN201710257136.4A Pending CN106936848A (zh) | 2017-04-19 | 2017-04-19 | 一种服务器的socket加密通信方法 |
Country Status (1)
| Country | Link |
|---|---|
| CN (1) | CN106936848A (zh) |
Cited By (4)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| CN109714337A (zh) * | 2018-12-26 | 2019-05-03 | 网宿科技股份有限公司 | 一种数据加密传输方法及设备 |
| CN110971509A (zh) * | 2019-11-27 | 2020-04-07 | 江苏艾佳家居用品有限公司 | 一种高并发场景下即时通信消息传输方法 |
| CN112511530A (zh) * | 2020-11-26 | 2021-03-16 | 浪潮金融信息技术有限公司 | 一种对接SSLSocket通信的方法、装置及介质 |
| CN113301034A (zh) * | 2021-05-17 | 2021-08-24 | 浪潮金融信息技术有限公司 | 一种基于socket的内外网的通信方法、系统及介质 |
Citations (4)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| CN101860546A (zh) * | 2010-06-18 | 2010-10-13 | 杭州电子科技大学 | 一种改进ssl握手协议的方法 |
| CN102811201A (zh) * | 2011-05-31 | 2012-12-05 | 阿里巴巴集团控股有限公司 | Ssl非阻塞通信方法及用于ssl非阻塞通信的服务器 |
| CN104301333A (zh) * | 2014-11-05 | 2015-01-21 | 中国科学技术大学 | 非阻塞式握手实现方法及系统 |
| CN106533689A (zh) * | 2015-09-15 | 2017-03-22 | 阿里巴巴集团控股有限公司 | 一种在ssl/tls通信中加载数字证书的方法和装置 |
-
2017
- 2017-04-19 CN CN201710257136.4A patent/CN106936848A/zh active Pending
Patent Citations (4)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| CN101860546A (zh) * | 2010-06-18 | 2010-10-13 | 杭州电子科技大学 | 一种改进ssl握手协议的方法 |
| CN102811201A (zh) * | 2011-05-31 | 2012-12-05 | 阿里巴巴集团控股有限公司 | Ssl非阻塞通信方法及用于ssl非阻塞通信的服务器 |
| CN104301333A (zh) * | 2014-11-05 | 2015-01-21 | 中国科学技术大学 | 非阻塞式握手实现方法及系统 |
| CN106533689A (zh) * | 2015-09-15 | 2017-03-22 | 阿里巴巴集团控股有限公司 | 一种在ssl/tls通信中加载数字证书的方法和装置 |
Non-Patent Citations (2)
| Title |
|---|
| 李刚: "《疯狂java讲义》", 31 July 2014, 电子工业出版社 * |
| 邓婷: "基于二级C/S模式的远程监测系统通信设计", 《微电子学与计算机》 * |
Cited By (5)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| CN109714337A (zh) * | 2018-12-26 | 2019-05-03 | 网宿科技股份有限公司 | 一种数据加密传输方法及设备 |
| CN110971509A (zh) * | 2019-11-27 | 2020-04-07 | 江苏艾佳家居用品有限公司 | 一种高并发场景下即时通信消息传输方法 |
| CN112511530A (zh) * | 2020-11-26 | 2021-03-16 | 浪潮金融信息技术有限公司 | 一种对接SSLSocket通信的方法、装置及介质 |
| CN112511530B (zh) * | 2020-11-26 | 2023-10-31 | 浪潮金融信息技术有限公司 | 一种对接SSLSocket通信的方法、装置及介质 |
| CN113301034A (zh) * | 2021-05-17 | 2021-08-24 | 浪潮金融信息技术有限公司 | 一种基于socket的内外网的通信方法、系统及介质 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| CN107018134B (zh) | 一种配电终端安全接入平台及其实现方法 | |
| US5835726A (en) | System for securing the flow of and selectively modifying packets in a computer network | |
| CN100428751C (zh) | 安全通信包处理装置及其方法 | |
| KR100431956B1 (ko) | 가상 사설망용 아키텍쳐 | |
| US7650500B2 (en) | Encryption communication system | |
| WO1997000471A2 (en) | A system for securing the flow of and selectively modifying packets in a computer network | |
| CN102118426B (zh) | 网络安全支付终端及其网络安全支付方法 | |
| CN104967590B (zh) | 一种传输通信消息的方法、装置和系统 | |
| CN101262405B (zh) | 基于网络处理器的高速安全虚拟专用网系统及其实现方法 | |
| CN102349264A (zh) | 卸载密码保护处理 | |
| CN108521331A (zh) | 基于源地址的隐蔽信息发送系统及发送方法 | |
| CN103281224B (zh) | 一种智能照明控制系统中can总线安全通信方法 | |
| CN101420455A (zh) | 反向http网关数据传输系统和/或方法及其网络 | |
| CN106936848A (zh) | 一种服务器的socket加密通信方法 | |
| CN101227344B (zh) | 一种模拟l2tp拨号的方法 | |
| CN106169952B (zh) | 一种英特网密钥管理协议重协商的认证方法及装置 | |
| CN101521667B (zh) | 一种安全的数据通信方法及装置 | |
| CN108964880A (zh) | 一种数据传输方法及装置 | |
| CN114500351A (zh) | 网络性能测试方法、装置、设备及存储介质 | |
| CN115567209A (zh) | 采用透明代理和量子密钥预充注实现VoIP加解密方法 | |
| CN117176384A (zh) | 基于国产化数据分发服务的tsn网络数据安全传输的方法 | |
| CN101997835B (zh) | 网络安全通讯方法、数据安全处理装置和用于金融的系统 | |
| CA2197548C (en) | A system for securing the flow of and selectively modifying packets in a computer network | |
| CN102185827B (zh) | 一种voip系统中语音穿透防火墙的方法 | |
| CN110311904A (zh) | 物联网通讯方法、装置、终端及计算机存储介质 |
Legal Events
| Date | Code | Title | Description |
|---|---|---|---|
| PB01 | Publication | ||
| PB01 | Publication | ||
| SE01 | Entry into force of request for substantive examination | ||
| SE01 | Entry into force of request for substantive examination | ||
| WD01 | Invention patent application deemed withdrawn after publication | ||
| WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20170707 |