具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
图1为本发明报文发送方法一个实施例的流程图,如图1所示,该报文发送方法可以包括:
步骤101,客户端向服务器发送客户端握手报文,该客户端握手报文携带该客户端缓存的服务器证书的标识。
具体地,该客户端握手报文携带该客户端缓存的服务器证书的标识可以为:客户端握手报文中新增第一扩展,该第一扩展的扩展数据为上述客户端缓存的服务器证书的标识。
进一步地,上述客户端握手报文还可以携带不需服务器发送证书的指示,具体地,上述客户端握手报文还可以携带不需服务器发送证书的指示可以为:上述客户端握手报文中新增的第一扩展的扩展类型为不需服务器发送证书。
在具体实现时,上述客户端缓存的服务器证书的标识可以列表的方式携带在客户端握手报文中,即第一扩展的扩展数据可以为上述客户端缓存的服务器证书的标识列表。当然,本发明并不仅限于此,上述客户端缓存的服务器证书的标识还可以链表或数组的方式携带在客户端握手报文中,本发明对此不作限定。
步骤102,客户端接收上述服务器发送的服务器握手报文,当上述服务器确定该客户端缓存的服务器证书的标识包括服务器准备使用的证书的标识时,上述服务器握手报文携带服务器准备使用的证书的标识。
具体地,上述服务器握手报文携带服务器准备使用的证书的标识可以为:上述服务器握手报文中新增不需证书的第二扩展,该第二扩展的扩展数据为该服务器准备使用的证书的标识。
步骤103,客户端在客户端缓存的服务器证书中,查找与服务器准备使用的证书的标识对应的服务器证书。
步骤104,客户端通过查找到的服务器证书中的公钥对待发送的客户端密钥交换报文进行加密,并将加密后的客户端密钥交换报文发送给上述服务器。
进一步地,步骤101之前,客户端还可以在与上述服务器交互的过程中,缓存该服务器发送的服务器证书。
进一步地,步骤101之前,客户端还需要对该客户端缓存的服务器证书的有效性进行检查;上述客户端握手报文携带的客户端缓存的服务器证书的标识包括上述客户端缓存的有效的服务器证书的标识。也就是说,客户端在发送客户端握手报文之前,会对该客户端缓存服务器证书的有效性进行检查,将客户端缓存的有效的服务器证书的标识携带在客户端握手报文中发送给服务器。
本实施例的一种实现方式中,当上述服务器确定该客户端缓存的服务器证书的标识不包括上述服务器准备使用的证书的标识时,上述服务器握手报文不携带服务器准备使用的证书的标识;这样,在客户端接收服务器发送的服务器握手报文之后,客户端还需要接收服务器发送的证书报文,该服务器发送的证书报文携带上述服务器准备使用的服务器证书;然后,客户端缓存上述服务器准备使用的服务器证书,并通过上述服务器准备使用的服务器证书中的公钥对待发送的客户端密钥交换报文进行加密,将加密后的客户端密钥交换报文发送给服务器。
本实施例的另一种实现方式中,上述服务器握手报文除携带服务器准备使用的证书的标识之外,还可以携带不需客户端发送证书的指示和上述服务器缓存的客户端证书的标识;具体地,当服务器需要进行客户端认证时,上述服务器握手报文中可以携带服务器准备使用的证书的标识,以及不需客户端发送证书的指示和上述服务器缓存的客户端证书的标识;这样客户端接收上述服务器发送的服务器握手报文之后,客户端还可以接收上述服务器发送的证书请求报文;当客户端确定上述服务器缓存的客户端证书的标识中包括该客户端准备使用的证书的标识时,上述客户端可以根据服务器发送的证书请求报文,向上述服务器发送证书标识报文,该证书标识报文携带上述客户端准备使用的证书的标识;然后,客户端通过与该客户端准备使用的证书匹配的私钥对待发送的证书验证报文进行加密,并将加密后的证书验证报文发送给服务器,以便服务器在上述服务器缓存的客户端证书中查找到与客户端准备使用的证书的标识对应的客户端证书之后,通过查找到的客户端证书中的公钥对加密后的证书验证报文进行解密,以验证上述客户端的身份。
本实现方式中,客户端接收服务器发送的证书请求报文之后,当该客户端确定上述服务器缓存的客户端证书的标识中不包括客户端准备使用的证书的标识时,该客户端可以根据服务器发送的证书请求报文向上述服务器发送证书报文,该客户端发送的证书报文携带上述客户端准备使用的客户端证书;然后,客户端通过与该客户端准备使用的证书匹配的私钥对待发送的证书验证报文进行加密,并将加密后的证书验证报文发送给上述服务器,以便该服务器通过接收的客户端证书中的公钥对上述加密后的证书验证报文进行解密,以验证该客户端的身份。
本实现方式中,上述服务器握手报文还可以携带不需上述客户端发送证书的指示和该服务器缓存的客户端证书的标识可以为:上述服务器握手报文中新增不需证书的第三扩展,该第三扩展的扩展类型为不需客户端发送证书,该第三扩展的扩展数据为上述服务器缓存的客户端证书的标识。在具体实现时,上述服务器缓存的客户端证书的标识可以列表的方式携带在服务器握手报文中,即服务器握手报文中第三扩展的扩展数据可以为上述服务器缓存的客户端证书的标识列表。当然,本发明并不仅限于此,上述服务器缓存的客户端证书的标识还可以链表或数组的方式携带在服务器握手报文中,本发明对此不作限定。
本实施例的再一种实现方式中,上述服务器握手报文除携带服务器准备使用的证书的标识之外,还可以仅携带不需客户端发送证书的指示,而不携带上述服务器缓存的客户端证书的标识;具体地,当服务器需要进行客户端认证时,上述服务器握手报文中可以携带服务器准备使用的证书的标识,以及不需客户端发送证书的指示。这样,客户端接收上述服务器发送的服务器握手报文之后,客户端还可以接收上述服务器发送的证书请求报文,然后向上述服务器发送证书标识报文,该证书标识报文携带上述客户端准备使用的证书的标识;然后,客户端通过与该客户端准备使用的证书匹配的私钥对待发送的证书验证报文进行加密,并将加密后的证书验证报文发送给服务器,以便服务器在上述服务器缓存的客户端证书中查找到与客户端准备使用的证书的标识对应的客户端证书之后,通过查找到的客户端证书中的公钥对加密后的证书验证报文进行解密,以验证上述客户端的身份。
如果服务器在该服务器缓存的客户端证书中未查找到客户端准备使用的证书的标识对应的客户端证书,则服务器可以向客户端发送认证失败响应报文,该认证失败响应报文携带认证失败原因,该认证失败原因为服务器在该服务器缓存的客户端证书中未查找到客户端准备使用的证书的标识对应的客户端证书;或者,服务器可以向客户端发送握手失败报文。
接收到上述认证失败响应报文或上述握手失败报文之后,客户端向服务器重新发送客户端握手报文,重新发送的客户端握手报文携带不需服务器发送证书的指示和该客户端缓存的服务器证书的标识;然后服务器向客户端再次发送服务器握手报文,再次发送的服务器握手报文携带服务器准备使用的证书的标识,但不携带不需客户端发送证书的指示。在发送服务器握手报文之后,服务器向客户端发送证书请求报文,接下来,客户端向上述服务器发送证书报文,该客户端发送的证书报文携带上述客户端准备使用的客户端证书;然后,客户端通过该客户端的私钥对待发送的证书验证报文进行加密,并将加密后的证书验证报文发送给上述服务器,以便该服务器通过接收的客户端证书中的公钥对上述加密后的证书验证报文进行解密,以验证该客户端的身份。
本实现方式中,上述服务器握手报文还可以携带不需上述客户端发送证书的指示可以为:上述服务器握手报文中新增不需证书的第四扩展,该第四扩展的扩展类型为不需客户端发送证书。
上述实施例中,客户端向服务器发送携带该客户端缓存的服务器证书的标识的客户端握手报文,当该服务器确定上述客户端缓存的服务器证书的标识包括该服务器准备使用的证书的标识时,服务器可以不发送证书报文,而是将服务器准备使用的证书的标识携带在服务器握手报文中发送给客户端;然后,客户端在该客户端缓存的服务器证书中,查找与上述服务器准备使用的证书的标识对应的服务器证书,并通过查找到的服务器证书中的公钥对待发送的客户端密钥交换报文进行加密,将加密后的客户端密钥交换报文发送给服务器。本实施例中,服务器可以不向客户端发送证书报文,从而可以减少TLS握手过程中的数据量,缩短TLS握手过程占用的时间,进而可以提高TLS连接的速度,并且可以避免缓存区过小导致的证书报文多次发送的问题,从而可以进一步提高TLS连接的速度。
图2为本发明报文发送方法另一个实施例的流程图,如图2所示,该报文发送方法可以包括:
步骤201,客户端向服务器发送第一客户端握手报文,该第一客户端握手报文携带不需服务器发送证书的指示。
具体地,第一客户端握手报文携带不需服务器发送证书的指示可以为:第一客户端握手报文中新增第一扩展,该第一扩展的扩展类型为不需服务器发送证书。
步骤202,客户端接收服务器发送的服务器握手报文,该服务器握手报文携带上述服务器准备使用的证书的标识。
具体地,该服务器握手报文携带上述服务器准备使用的证书的标识可以为:该服务器握手报文中新增第二扩展,上述第二扩展的扩展数据为上述服务器准备使用的证书的标识。
步骤203,如果该客户端在该客户端缓存的服务器证书中,查找到与上述服务器准备使用的证书的标识对应的服务器证书,则该客户端通过查找到的服务器证书中的公钥对待发送的客户端密钥交换报文进行加密,并将加密后的客户端密钥交换报文发送给上述服务器。
本实施例的一种实现方式中,步骤202之后,如果该客户端在该客户端缓存的服务器证书中,未查找到与上述服务器准备使用的证书的标识对应的服务器证书,则客户端向服务器重新发送第二客户端握手报文,该第二客户端握手报文不携带不需服务器发送证书的指示;然后,客户端接收上述服务器发送的证书报文,该服务器发送的证书报文携带该服务器准备使用的服务器证书;该客户端缓存上述服务器准备使用的服务器证书,并通过该服务器证书中的公钥对待发送的客户端密钥交换报文进行加密,将加密后的客户端密钥交换报文发送给服务器。
上述实施例中,客户端向服务器发送携带不需服务器发送证书的指示的第一客户端握手报文,接收到第一客户端握手报文之后,服务器不发送证书报文,将该服务器准备使用的证书的标识携带在服务器握手报文中发送给客户端;如果客户端在该客户端缓存的服务器证书中,查找到与上述服务器准备使用的证书的标识对应的服务器证书,则该客户端可以通过查找到的服务器证书中的公钥对待发送的客户端密钥交换报文进行加密,并将加密后的客户端密钥交换报文发送给服务器。本实施例中,服务器可以不向客户端发送证书报文,从而可以减少TLS握手过程中的数据量,缩短TLS握手过程占用的时间,进而可以提高TLS连接的速度,并且可以避免缓存区过小导致的证书报文多次发送的问题,从而可以进一步提高TLS连接的速度。
图3为本发明报文发送方法再一个实施例的流程图,如图3所示,该报文发送方法可以包括:
步骤301,服务器接收客户端发送的客户端握手报文,该客户端握手报文携带该客户端缓存的服务器证书的标识。
其中,上述客户端握手报文携带的该客户端缓存的服务器证书的标识包括上述客户端缓存的有效的服务器证书的标识。也就是说,客户端在发送客户端握手报文之前,会对该客户端缓存服务器证书的有效性进行检查,将客户端缓存的有效的服务器证书的标识携带在客户端握手报文中发送给服务器。
具体地,该客户端握手报文携带该客户端缓存的服务器证书的标识可以为:客户端握手报文中新增第一扩展,该第一扩展的扩展数据为客户端缓存的服务器证书的标识。
进一步地,上述客户端握手报文还可以携带不需服务器发送证书的指示,具体地,上述客户端握手报文还可以携带不需服务器发送证书的指示可以为:上述客户端握手报文中新增的第一扩展的扩展类型为不需服务器发送证书。
在具体实现时,上述客户端缓存的服务器证书的标识可以列表的方式携带在客户端握手报文中,即客户端握手报文中第一扩展的扩展数据可以为上述客户端缓存的服务器证书的标识列表。当然,本发明并不仅限于此,上述客户端缓存的服务器证书的标识还可以链表或数组的方式携带在客户端握手报文中,本发明对此不作限定。
步骤302,服务器向上述客户端发送服务器握手报文,当服务器确定上述客户端缓存的服务器证书的标识包括服务器准备使用的证书的标识时,上述服务器握手报文携带服务器准备使用的证书的标识。
具体地,上述服务器握手报文携带服务器准备使用的证书的标识可以为:上述服务器握手报文中新增不需证书的第二扩展,该第二扩展的扩展数据为服务器准备使用的证书的标识。
步骤303,服务器接收上述客户端发送的加密的客户端密钥交换报文,该加密的客户端密钥交换报文是客户端在上述客户端缓存的服务器证书中查找到与上述服务器准备使用的证书的标识对应的服务器证书之后,通过查找到的服务器证书中的公钥对待发送的客户端密钥交换报文进行加密后发送给上述服务器的。
进一步地,步骤301之前,服务器还可以在与上述客户端交互的过程中,向上述客户端发送服务器证书,以便该客户端缓存服务器发送的服务器证书。
本实施例的一种实现方式中,当服务器确定上述客户端缓存的服务器证书的标识不包括服务器准备使用的证书的标识时,上述服务器握手报文不携带服务器准备使用的证书的标识;这样,服务器向上述客户端发送服务器握手报文之后,服务器向上述客户端发送证书报文,该服务器发送的证书报文携带上述服务器准备使用的服务器证书,以便客户端缓存上述服务器准备使用的服务器证书;然后,服务器接收客户端发送的加密的客户端密钥交换报文,上述加密的客户端密钥交换报文是客户端接收到上述服务器准备使用的服务器证书之后,通过上述服务器准备使用的服务器证书中的公钥对待发送的客户端密钥交换报文进行加密后发送给服务器的。
本实施例的另一种实现方式中,上述服务器握手报文除携带服务器准备使用的证书的标识之外,还可以携带不需客户端发送证书的指示和上述服务器缓存的客户端证书的标识;具体地,当服务器需要进行客户端认证时,上述服务器握手报文中可以携带服务器准备使用的证书的标识,以及不需客户端发送证书的指示和上述服务器缓存的客户端证书的标识;本实现方式中,上述服务器向客户端发送服务器握手报文之后,服务器还可以向上述客户端发送证书请求报文;然后,服务器接收客户端在确定上述服务器缓存的客户端证书的标识中包括该客户端准备使用的证书的标识之后发送的证书标识报文,该证书标识报文携带客户端准备使用的证书的标识;最后,服务器接收客户端发送的加密的证书验证报文,该加密的证书验证报文是客户端通过与上述客户端准备使用的证书匹配的私钥对待发送的证书验证报文加密后发送给服务器的;服务器在上述服务器缓存的客户端证书中查找到与客户端准备使用的证书的标识对应的客户端证书之后,通过查找到的客户端证书中的公钥对加密后的证书验证报文进行解密,以验证上述客户端的身份。
本实现方式中,服务器向客户端发送证书请求报文之后,该服务器还可以接收客户端在确定上述服务器缓存的客户端证书的标识中不包括客户端准备使用的证书的标识之后发送的证书报文,上述客户端发送的证书报文携带客户端准备使用的客户端证书;然后,服务器接收客户端发送的加密的证书验证报文,该加密的证书验证报文是客户端通过与上述客户端准备使用的证书匹配的私钥对待发送的证书验证报文进行加密后发送给服务器的;最后,服务器通过接收的客户端证书中的公钥对上述加密后的证书验证报文进行解密,以验证客户端的身份。
本实现方式中,上述服务器握手报文还可以携带不需客户端发送证书的指示和该服务器缓存的客户端证书的标识可以为:上述服务器握手报文中新增不需证书的第三扩展,该第三扩展的扩展类型为不需客户端发送证书,该第三扩展的扩展数据为服务器缓存的客户端证书的标识。在具体实现时,上述服务器缓存的客户端证书的标识可以列表的方式携带在服务器握手报文中,即服务器握手报文中第三扩展的扩展数据可以为上述服务器缓存的客户端证书的标识列表。当然,本发明并不仅限于此,上述服务器缓存的客户端证书的标识还可以链表或数组的方式携带在服务器握手报文中,本发明对此不作限定。
本实施例的再一种实现方式中,上述服务器握手报文除携带服务器准备使用的证书的标识之外,还可以仅携带不需客户端发送证书的指示,而不携带上述服务器缓存的客户端证书的标识;具体地,当服务器需要进行客户端认证时,上述服务器握手报文中可以携带服务器准备使用的证书的标识,以及不需客户端发送证书的指示。这样,服务器向客户端发送服务器握手报文之后,上述服务器还可以向客户端发送证书请求报文,然后服务器接收上述客户端发送的证书标识报文,该证书标识报文携带上述客户端准备使用的证书的标识;然后,服务器接收客户端发送的加密的证书验证报文,上述加密的证书验证报文是客户端通过与上述客户端准备使用的证书匹配的私钥对待发送的证书验证报文加密后发送给上述服务器的;最后,服务器在该服务器缓存的客户端证书中查找到与上述客户端准备使用的证书的标识对应的客户端证书之后,通过查找到的客户端证书中的公钥对加密后的证书验证报文进行解密,以验证客户端的身份。
如果服务器在该服务器缓存的客户端证书中未查找到客户端准备使用的证书的标识对应的客户端证书,则服务器可以向客户端发送认证失败响应报文,该认证失败响应报文携带认证失败原因,该认证失败原因为服务器在该服务器缓存的客户端证书中未查找到客户端准备使用的证书的标识对应的客户端证书;或者,服务器可以向客户端发送握手失败报文。
接收到上述认证失败响应报文或上述握手失败报文之后,客户端向服务器重新发送客户端握手报文,重新发送的客户端握手报文携带不需服务器发送证书的指示和该客户端缓存的服务器证书的标识;然后服务器向客户端再次发送服务器握手报文,再次发送的服务器握手报文携带服务器准备使用的证书的标识,但不携带不需客户端发送证书的指示。在发送服务器握手报文之后,服务器向客户端发送证书请求报文,接下来,客户端向上述服务器发送证书报文,该客户端发送的证书报文携带上述客户端准备使用的客户端证书;然后,客户端通过该客户端的私钥对待发送的证书验证报文进行加密,并将加密后的证书验证报文发送给上述服务器,以便该服务器通过接收的客户端证书中的公钥对上述加密后的证书验证报文进行解密,以验证该客户端的身份。
本实现方式中,上述服务器握手报文还可以携带不需上述客户端发送证书的指示可以为:上述服务器握手报文中新增不需证书的第四扩展,该第四扩展的扩展类型为不需客户端发送证书。
上述实施例中,服务器接收到客户端发送的携带该客户端缓存的服务器证书的标识的客户端握手报文之后,当该服务器确定上述客户端缓存的服务器证书的标识包括该服务器准备使用的证书的标识时,服务器可以不发送证书报文,而是将服务器准备使用的证书的标识携带在服务器握手报文中发送给客户端;本实施例中,服务器可以不向客户端发送证书报文,从而可以减少TLS握手过程中的数据量,缩短TLS握手过程占用的时间,进而可以提高TLS连接的速度,并且可以避免缓存区过小导致的证书报文多次发送的问题,从而可以进一步提高TLS连接的速度。
图4为本发明报文发送方法再一个实施例的流程图,如图4所示,该报文发送方法可以包括:
步骤401,服务器接收客户端发送的第一客户端握手报文,该第一客户端握手报文携带不需服务器发送证书的指示。
具体地,上述第一客户端握手报文携带不需服务器发送证书的指示可以为:该第一客户端握手报文中新增第一扩展,该第一扩展的扩展类型为不需服务器发送证书。
步骤402,服务器向客户端发送服务器握手报文,该服务器握手报文携带该服务器准备使用的证书的标识。
具体地,上述服务器握手报文携带服务器准备使用的证书的标识可以为:上述服务器握手报文中新增第二扩展,该第二扩展的扩展数据为服务器准备使用的证书的标识。
步骤403,服务器接收上述客户端在该客户端缓存的服务器证书中,查找到与上述服务器准备使用的证书的标识对应的服务器证书之后发送的加密的客户端密钥交换报文,该加密的客户端密钥交换报文是客户端通过查找到的服务器证书中的公钥对待发送的客户端密钥交换报文进行加密后发送给该服务器的。
本实施例的一种实现方式中,步骤402之后,服务器还可以接收客户端在该客户端缓存的服务器证书中,未查找到与上述服务器准备使用的证书的标识对应的服务器证书之后重新发送的第二客户端握手报文,该第二客户端握手报文不携带不需所述服务器发送证书的指示;然后,服务器向上述客户端发送证书报文,该服务器发送的证书报文携带上述服务器准备使用的服务器证书,以便客户端缓存上述服务器准备使用的服务器证书。然后,服务器接收客户端发送的加密的客户端密钥交换报文,该加密的客户端密钥交换报文是客户端接收到上述服务器准备使用的服务器证书之后,通过该服务器证书中的公钥对待发送的客户端密钥交换报文进行加密后发送给上述服务器的。
上述实施例中,服务器接收到客户端发送的携带不需所述服务器发送证书的指示的第一客户端握手报文之后,服务器不向客户端发送证书报文,而是将该服务器准备使用的证书的标识携带在服务器握手报文中发送给客户端;本实施例中,服务器可以不向客户端发送证书报文,从而可以减少TLS握手过程中的数据量,缩短TLS握手过程占用的时间,进而可以提高TLS连接的速度,并且可以避免缓存区过小导致的证书报文多次发送的问题,从而可以进一步提高TLS连接的速度。
图5为本发明报文发送方法再一个实施例的流程图,如图5所示,该报文发送方法可以包括:
步骤501,客户端向服务器发送客户端握手(ClientHello)报文,该客户端握手报文携带不需服务器发送证书的指示和该客户端缓存的服务器证书的标识。
本实施例中,客户端向服务器发送客户端握手报文之前,客户端在与服务器交互的过程中,在客户端缓存一些服务器在证书(Certificate)报文中发送的服务器证书。
然后,客户端将该客户端缓存的服务器证书的标识携带在客户端握手报文中发送给服务器,同时在该客户端握手报文中携带不需服务器发送证书的指示。
具体地,该客户端握手报文携带不需服务器发送证书的指示和该客户端缓存的服务器证书的标识可以为:客户端握手报文中新增第一扩展,该第一扩展可以为不需证书(Certificate Not Required)的扩展,该第一扩展的扩展类型为不需服务器发送证书,该第一扩展的扩展数据为上述客户端缓存的服务器证书的标识。
在具体实现时,上述客户端缓存的服务器证书的标识可以列表的方式携带在客户端握手报文中,即客户端握手报文中新增的第一扩展的扩展数据可以为上述客户端缓存的服务器证书的标识列表。当然,本发明并不仅限于此,上述客户端缓存的服务器证书的标识还可以链表或数组的方式携带在客户端握手报文中,本发明对此不作限定。
优选地,客户端发送客户端握手报文之前,需要先检查该客户端缓存的服务器证书是否还有效,即对该客户端缓存的服务器证书的有效性进行检查,仅将该客户端缓存的有效的服务器证书的标识携带在客户端握手报文中发送给服务器。具体地,由于客户端将缓存的服务器证书存放在本地,且缓存的服务器证书已经是通过验证的,所以客户端只需检查与时间相关的约束,包括服务器证书是否还在有效期,服务器证书是否被证书吊销列表(CertificateRevocation List;以下简称:CRL)或在线证书状态协议(Online Certificate StatusProtocol,以下简称:OCSP)所撤销了。如果客户端缓存了较多的服务器证书,对服务器证书进行有效性检查会带来一定的开销,这时可以采取一些优化措施,例如对缓存中的服务器证书进行分类,在连接到某类服务器时,只发送这类服务器的服务器证书的标识;或者,优化缓存的服务器证书的数量;或者,采用单独的线程或进程来对服务器证书的状态进行定期检测和刷新;或者,在加载CRL时,对所有缓存中的服务器证书进行检查,并移除撤销的服务器证书。
步骤502,服务器接收到上述客户端握手报文之后,判断该客户端握手报文中携带的服务器证书的标识是否包括该服务器准备使用的证书的标识。如果是,则执行步骤503;如果该客户端握手报文中携带的服务器证书的标识不包括该服务器准备使用的证书的标识,则执行步骤506。
步骤503,服务器向客户端发送服务器握手(ServerHello)报文,该服务器握手报文携带服务器准备使用的证书的标识。
具体地,上述服务器握手报文携带服务器准备使用的证书的标识可以为:上述服务器握手报文中新增第二扩展,该第二扩展可以为不需证书的扩展,该第二扩展的扩展数据为该服务器准备使用的证书的标识。
步骤504,客户端从接收到的服务器握手报文中,获得服务器准备使用的证书的标识,并在客户端缓存的服务器证书中,查找与服务器准备使用的证书的标识对应的服务器证书。
步骤505,客户端通过查找到的服务器证书中的公钥对待发送的客户端密钥交换报文进行加密,并将加密后的客户端密钥交换报文发送给上述服务器。本次流程结束。
步骤506,服务器向客户端发送服务器握手报文,该服务器握手报文不携带服务器准备使用的证书的标识。
步骤507,服务器向客户端发送证书报文,该服务器发送的证书报文携带上述服务器准备使用的服务器证书。
步骤508,客户端缓存上述服务器准备使用的服务器证书,并通过该服务器证书中的公钥对待发送的客户端密钥交换报文进行加密,将加密后的客户端密钥交换报文发送给服务器。本次流程结束。
也就是说,当客户端握手报文中携带的服务器证书的标识不包括该服务器准备使用的证书的标识时,服务器向客户端发送的服务器握手报文不携带服务器准备使用的证书的标识,并且服务器需要向客户端发送携带该服务器准备使用的服务器证书的证书报文,接收到服务器发送的证书报文之后,客户端缓存该服务器准备使用的证书,并通过该服务器证书中的公钥对待发送的客户端密钥交换报文进行加密,将加密后的客户端密钥交换报文发送给服务器。
上述实施例中,当客户端握手报文中携带的服务器证书的标识包括服务器准备使用的证书的标识时,服务器可以不向客户端发送证书报文,从而可以减少TLS握手过程中的数据量,缩短TLS握手过程占用的时间,进而可以提高TLS连接的速度,并且可以避免缓存区过小导致的证书报文多次发送的问题,从而可以进一步提高TLS连接的速度。另外,省略证书报文的发送,可以省略客户端验证证书的过程,从而可以大大减少TLS握手过程中客户端的中央处理单元(Central Processing Unit;以下简称:CPU)的开销。
需要说明的是,本发明图1、图3和图5所示实施例中,客户端初次与某服务器交互时,或者客户端缓存的服务器证书失效时,服务器在客户端握手报文携带的服务器证书的标识中,都不会找到该服务器准备使用的证书的标识,这时服务器需要发送证书报文。另外,客户端初次入网,还没有缓存任何证书时,客户端发送的客户端握手报文中不携带上述不需服务器发送证书的指示,也不携带该客户端缓存的服务器证书的标识;也就是说,客户端发送的客户端握手报文中不携带上述不需证书的扩展。
根据TLS已有的扩展机制,如果服务器不能识别客户端握手报文中新增的不需证书(Certificate Not Required)的扩展,则服务器可以直接忽略此扩展,并发送证书报文。同样,如果客户端发现服务器没有在服务器握手报文中响应上述新增的不需证书的扩展,则该客户端仍可以继续处理证书报文。因此本发明提供的方法不影响互操作性。
本发明图1、图3和图5所示实施例可以应用于图6所示应用场景中,图6为本发明应用场景一个实施例的示意图。如图6所示,移动终端通过基站和网关通用分组无线服务支持节点(Gateway General Packet Radio ServiceSupport Node;以下简称:GGSN)连接到因特网中的网页服务器。
通常,移动终端通用分组无线服务(General Packet Radio Service;以下简称:GPRS)通道的带宽很低,移动终端与网页服务器建立端到端的TLS连接过程中,减少证书报文的发送,可以大大提高移动终端与网页服务器之间TLS连接的建立速度。
使用上述移动终端的用户在浏览网站时,通常会重复访问一些网站,这时本发明提供的方法可以大大提高上述重复访问的网站的连接速度。另外,用户在访问一个网站时,对于此网站内不同的页面,有时会发起一些新的连接,这时本发明提供的方法也可以提升性能,从而改进用户体验。
另外,某些移动终端的CPU资源比较少,本发明提供的方法可以减少验证服务器证书所需的CPU开销,也可以大大提高移动终端的TLS连接性能。
图7为本发明报文发送方法再一个实施例的流程图,如图7所示,该报文发送方法可以包括:
步骤701,客户端向服务器发送第一客户端握手报文,该第一客户端握手报文携带不需服务器发送证书的指示。
具体地,第一客户端握手报文携带不需服务器发送证书的指示可以为:第一客户端握手报文中新增第一扩展,该第一扩展可以为不需证书的扩展,该第一扩展的扩展类型为不需服务器发送证书。
本实施例中,该第一客户端握手报文中新增的第一扩展的扩展数据携带0个服务器证书的标识,以间接表明客户端缓存有服务器证书。
步骤702,客户端接收服务器发送的服务器握手报文,该服务器握手报文携带上述服务器准备使用的证书的标识。
具体地,该服务器握手报文携带上述服务器准备使用的证书的标识可以为:该服务器握手报文中新增第二扩展,该第二扩展可以为不需证书的扩展,上述第二扩展的扩展数据为上述服务器准备使用的证书的标识。
步骤703,客户端判断在该客户端缓存的服务器证书中,是否查找到与上述服务器准备使用的证书的标识对应的服务器证书。如果是,则执行步骤704;如果客户端在该客户端缓存的服务器证书中,未查找到与上述服务器准备使用的证书的标识对应的服务器证书,则执行步骤705。
步骤704,客户端通过查找到的服务器证书中的公钥对待发送的客户端密钥交换报文进行加密,并将加密后的客户端密钥交换报文发送给上述服务器。本次流程结束。
步骤705,客户端向服务器重新发送第二客户端握手报文,该第二客户端握手报文不携带不需服务器发送证书的指示。
步骤706,客户端接收上述服务器发送的证书报文,该服务器发送的证书报文携带该服务器准备使用的服务器证书。
步骤707,客户端缓存上述服务器准备使用的服务器证书,并通过该服务器证书中的公钥对待发送的客户端密钥交换报文进行加密,将加密后的客户端密钥交换报文发送给服务器。本次流程结束。
上述实施例中,当第一客户端握手报文中携带不需服务器发送证书的指示时,服务器可以不向客户端发送证书报文,从而可以减少TLS握手过程中的数据量,缩短TLS握手过程占用的时间,进而可以提高TLS连接的速度,并且可以避免缓存区过小导致的证书报文多次发送的问题,从而可以进一步提高TLS连接的速度。另外,省略证书报文的发送,可以省略客户端验证证书的过程,从而可以大大减少TLS握手过程中客户端的CPU的开销。另外,本发明图7所示实施例中,第一客户端握手报文中不携带客户端缓存的服务器证书的标识,从而可以使客户端握手报文本身的大小不会增大得太多。
本发明图2、图4和图7所示实施例提供的方法适用于客户端总是与一些固定的服务器进行交互的场景。否则,由于客户端没有发送该客户端缓存的服务器证书的标识,而服务器认为该服务器的证书在客户端已缓存,但实际上客户端可能没有该服务器的证书,则此时握手会失败。这时,客户端需要重新发起不携带不需服务器发送证书的指示的报文,并接收服务器发送的证书报文,缓存该证书报文携带的该服务器准备使用的服务器证书。这样通过两次握手才完成认证。
举例来说,本发明图2、图4和图7所示实施例提供的方法可以应用于图8所示的应用场景,图8为本发明应用场景另一个实施例的示意图。如图8所示,网管与网元之间建立TLS连接的过程中,网管可以被看作客户端,网元可以被看作服务器。在网元被网管添加进行管理之后,网管会与固定的一些网元进行连接。根据本发明图7所示实施例提供的方法,网管在握手过程中,可以向网元发送不含证书的标识的第一握手报文,然后网元将该网元准备使用的证书的标识携带在握手报文中发送给网管,如果网管在该网管缓存的证书中查找到与上述网元准备使用的证书的标识对应的证书,则网管可以通过查找到的证书中的公钥对待发送的密钥交换报文进行加密,并将加密后的密钥交换报文发送给网元,以与网元建立TLS连接,这时,网管与网元可以通过一次握手过程完成认证,快速建立TLS连接。
如果网管在该网管缓存的证书中未查找到与上述网元准备使用的证书的标识对应的证书,则网管可以向网元发送第二握手报文,该第二握手报文不携带不需网元发送证书的指示;接收到第二握手报文之后,网元向网管发送证书报文,该证书报文携带该网元准备使用的证书;接收到该证书报文之后,网管缓存该证书报文中携带的证书,这样后续网管再与网元建立TLS连接时,就可以通过一次握手过程完成认证,快速建立TLS连接。
图9为本发明报文发送方法再一个实施例的流程图,如图9所示,该报文发送方法可以包括:
步骤901,客户端向服务器发送客户端握手报文,该客户端握手报文携带不需服务器发送证书的指示和该客户端缓存的服务器证书的标识。
本实施例中,客户端向服务器发送客户端握手报文之前,客户端在与服务器交互的过程中,在客户端缓存一些服务器在证书报文中发送的服务器证书。
然后,客户端将该客户端缓存的服务器证书的标识携带在客户端握手报文中发送给服务器,同时在该客户端握手报文中携带不需服务器发送证书的指示。
具体地,该客户端握手报文携带不需服务器发送证书的指示和该客户端缓存的服务器证书的标识可以为:客户端握手报文中新增第一扩展,该第一扩展可以为不需证书(Certificate Not Required)的扩展,该第一扩展的扩展类型为不需服务器发送证书,该第一扩展的扩展数据为上述客户端缓存的服务器证书的标识。
在具体实现时,上述客户端缓存的服务器证书的标识可以列表的方式携带在客户端握手报文中,即客户端握手报文中新增的第一扩展的扩展数据可以为上述客户端缓存的服务器证书的标识列表。当然,本发明并不仅限于此,上述客户端缓存的服务器证书的标识还可以链表或数组的方式携带在客户端握手报文中,本发明对此不作限定。
优选地,客户端发送客户端握手报文之前,需要先检查该客户端缓存的服务器证书是否还有效,即对该客户端缓存的服务器证书的有效性进行检查,仅将该客户端缓存的有效的服务器证书的标识携带在客户端握手报文中发送给服务器。具体地,由于客户端将缓存的服务器证书存放在本地,且缓存的服务器证书已经是通过验证的,所以客户端只需检查与时间相关的约束,包括服务器证书是否还在有效期,服务器证书是否被CRL或OCSP所撤销了。如果客户端缓存了较多的服务器证书,对服务器证书进行有效性检查会带来一定的开销,这时可以采取一些优化措施,例如对缓存中的服务器证书进行分类,在连接到某类服务器时,只发送这类服务器的服务器证书的标识;或者,优化缓存的服务器证书的数量;或者,采用单独的线程或进程来对服务器证书的状态进行定期检测和刷新;或者,在加载CRL时,对所有缓存中的服务器证书进行检查,并移除撤销的服务器证书。
步骤902,服务器接收到上述客户端握手报文之后,判断该客户端握手报文中携带的服务器证书的标识是否包括该服务器准备使用的证书的标识。如果是,则执行步骤903;如果该客户端握手报文中携带的服务器证书的标识不包括该服务器准备使用的证书的标识,则执行步骤916。
步骤903,服务器向客户端发送服务器握手报文,该服务器握手报文携带服务器准备使用的证书的标识。
进一步地,当服务器需要进行客户端认证时,该服务器握手报文还可以携带不需客户端发送证书的指示和该服务器缓存的客户端证书的标识。
具体地,上述服务器握手报文携带服务器准备使用的证书的标识可以为:上述服务器握手报文中新增第二扩展,该第二扩展可以为不需证书的扩展,该第二扩展的扩展数据为服务器准备使用的证书的标识。
上述服务器握手报文还可以携带不需客户端发送证书的指示和该服务器缓存的客户端证书的标识可以为:上述服务器握手报文中新增第三扩展,该第三扩展可以为不需证书的扩展,该第三扩展的扩展类型为不需客户端发送证书,该第三扩展的扩展数据为服务器缓存的客户端证书的标识。在具体实现时,上述服务器缓存的客户端证书的标识可以列表的方式携带在服务器握手报文中,即服务器握手报文中第三扩展的扩展数据可以为上述服务器缓存的客户端证书的标识列表。当然,本发明并不仅限于此,上述服务器缓存的客户端证书的标识还可以链表或数组的方式携带在服务器握手报文中,本发明对此不作限定。
步骤904,服务器向客户端发送证书请求报文。
步骤905,客户端判断服务器缓存的客户端证书的标识中是否包括该客户端准备使用的证书的标识。如果是,则执行步骤906;如果服务器缓存的客户端证书的标识中不包括该客户端准备使用的证书的标识,则执行步骤911。
步骤906,客户端向服务器发送证书标识报文,该证书标识报文携带上述客户端准备使用的证书的标识。
步骤907,客户端在客户端缓存的服务器证书中,查找与服务器准备使用的证书的标识对应的服务器证书。
步骤908,客户端通过查找到的服务器证书中的公钥对待发送的客户端密钥交换报文进行加密,并将加密后的客户端密钥交换报文发送给上述服务器。
步骤909,客户端通过该客户端的私钥对待发送的证书验证报文进行加密,并将加密后的证书验证报文发送给服务器。
步骤910,服务器在该服务器缓存的客户端证书中查找到与客户端准备使用的证书的标识对应的客户端证书之后,通过查找到的客户端证书中的公钥对加密后的证书验证报文进行解密,以验证上述客户端的身份。本次流程结束。
步骤911,客户端向服务器发送证书报文,该客户端发送的证书报文携带上述客户端准备使用的客户端证书。
步骤912,客户端在客户端缓存的服务器证书中,查找与服务器准备使用的证书的标识对应的服务器证书。
步骤913,客户端通过查找到的服务器证书中的公钥对待发送的客户端密钥交换报文进行加密,并将加密后的客户端密钥交换报文发送给上述服务器。
步骤914,客户端通过该客户端的私钥对待发送的证书验证报文进行加密,并将加密后的证书验证报文发送给服务器。
步骤915,服务器通过客户端发送的证书报文携带的客户端证书中的公钥对上述加密后的证书验证报文进行解密,以验证该客户端的身份。本次流程结束。
步骤916,服务器向客户端发送服务器握手报文,该服务器握手报文不携带服务器准备使用的证书的标识。
进一步地,当服务器需要进行客户端认证时,该服务器握手报文可以携带不需客户端发送证书的指示和该服务器缓存的客户端证书的标识。
具体地,上述服务器握手报文携带不需客户端发送证书的指示和该服务器缓存的客户端证书的标识的方式可以参照步骤903中提供的方式,在此不再赘述。
步骤917,服务器向客户端发送证书报文,该服务器发送的证书报文携带上述服务器准备使用的服务器证书。
步骤918,服务器向客户端发送证书请求报文。
步骤919,客户端判断服务器缓存的客户端证书的标识中是否包括该客户端准备使用的证书的标识。如果是,则执行步骤920;如果服务器缓存的客户端证书的标识中不包括该客户端准备使用的证书的标识,则执行步骤924。
步骤920,客户端向服务器发送证书标识报文,该证书标识报文携带上述客户端准备使用的证书的标识。
步骤921,客户端通过接收到的服务器证书中的公钥对待发送的客户端密钥交换报文进行加密,并将加密后的客户端密钥交换报文发送给上述服务器。
步骤922,客户端通过该客户端的私钥对待发送的证书验证报文进行加密,并将加密后的证书验证报文发送给服务器。
步骤923,服务器在该服务器缓存的客户端证书中查找到与客户端准备使用的证书的标识对应的客户端证书之后,通过查找到的客户端证书中的公钥对加密后的证书验证报文进行解密,以验证上述客户端的身份。本次流程结束。
步骤924,客户端向服务器发送证书报文,该客户端发送的证书报文携带上述客户端准备使用的客户端证书。
步骤925,客户端通过接收到的服务器证书中的公钥对待发送的客户端密钥交换报文进行加密,并将加密后的客户端密钥交换报文发送给上述服务器。
步骤926,客户端通过该客户端的私钥对待发送的证书验证报文进行加密,并将加密后的证书验证报文发送给服务器。
步骤927,服务器通过客户端发送的证书报文携带的客户端证书中的公钥对上述加密后的证书验证报文进行解密,以验证该客户端的身份。本次流程结束。
上述实施例中,当客户端握手报文中携带的服务器证书的标识包括服务器准备使用的证书的标识时,服务器可以不向客户端发送证书报文,从而可以减少TLS握手过程中的数据量,缩短TLS握手过程占用的时间,进而可以提高TLS连接的速度,并且可以避免缓存区过小导致的证书报文多次发送的问题,从而可以进一步提高TLS连接的速度。另外,省略证书报文的发送,可以省略客户端验证证书的过程,从而可以大大减少TLS握手过程中客户端的CPU的开销。并且本实施例中,服务器还可以对客户端进行认证,进一步提高了TLS连接的可靠性。
本发明图9所示实施例中,当客户端握手报文携带的服务器证书的标识中包括服务器准备使用的证书的标识时,服务器可以在服务器握手报文中携带第二扩展,该第二扩展的扩展数据为该服务器准备使用的证书的标识;同时,如果服务器需要对客户端进行认证,则服务器可以在服务器握手报文中携带第三扩展,该第三扩展的扩展类型为不需客户端发送证书,该第三扩展的扩展数据为服务器缓存的客户端证书的标识。
为保证最大的兼容性,可以增加约束。即只有客户端握手报文中携带第一扩展时,服务器才能在服务器握手报文中包含针对客户端证书的第三扩展。另外,当服务器不支持客户端握手报文中新增的第一扩展时,服务器不会在服务器握手报文中包含针对客户端证书的第三扩展。
另外,如果服务器不能识别客户端握手报文中新增的第一扩展时,则服务器可以直接忽略客户端握手报文中新增的第一扩展,并发送证书报文。同样,如果客户端发现服务器没有在服务器握手报文中响应上述新增的第一扩展,则该客户端仍可以继续处理证书报文。因此本发明图9所示实施例提供的方法不影响互操作性。
本发明图9所示实施例的另一种实现方式中,步骤903中,当服务器需要对客户端进行认证时,该服务器握手报文可以仅携带服务器准备使用的证书的标识和不需客户端发送证书的指示,而不携带服务器缓存的客户端证书的标识。这样,步骤903之后,执行步骤904,接下来不需执行步骤905,直接执行步骤906~步骤909,如果服务器在该服务器缓存的客户端证书中查找到客户端准备使用的证书的标识对应的客户端证书,则执行步骤910。
如果服务器在该服务器缓存的客户端证书中未查找到客户端准备使用的证书的标识对应的客户端证书,则服务器可以向客户端发送认证失败响应报文,该认证失败响应报文携带认证失败原因,该认证失败原因为服务器在该服务器缓存的客户端证书中未查找到客户端准备使用的证书的标识对应的客户端证书;或者,服务器可以向客户端发送握手失败报文。
接收到上述认证失败响应报文或者上述握手失败报文之后,客户端向服务器重新发送客户端握手报文,重新发送的客户端握手报文携带不需服务器发送证书的指示和该客户端缓存的服务器证书的标识;然后服务器向客户端再次发送服务器握手报文,再次发送的服务器握手报文携带服务器准备使用的证书的标识,但不携带不需客户端发送证书的指示。在发送服务器握手报文之后,服务器向客户端发送证书请求报文,接下来,可以按照步骤911-步骤915描述的流程执行,在此不再赘述。
同样,步骤916中,当服务器需要对客户端进行认证时,该服务器握手报文也可以仅携带服务器准备使用的证书的标识和不需客户端发送证书的指示,而不携带服务器缓存的客户端证书的标识。后续流程与上述流程类似,在此不再赘述。
本发明图9所示实施例提供的方法可以应用在图8所示的场景中,网元可以被看作服务器,通常固定地与一个网管(该网管可以被看作客户端)进行连接,且需要通过对网管进行认证来验证网管的身份。通过本发明图9所示实施例提供的方法,网管可以不用发送证书,从而可以提高TLS连接的速度,且可以减少网管的握手开销,进而可以提高网管的处理能力。
在发展过程中,TLS协议出现过许多版本,包括安全套接层版本2(SecureSockets Layer version2;以下简称:SSLv2)、安全套接层版本3(Secure SocketsLayer version3;以下简称:SSLv3)、TLS1.0、TLS1.1和TLS1.2等,以后还可能出现新的版本。本发明实施例中的TLS指代所有这些版本。对于新的版本,只要新版本的TLS协议包含证书认证,本发明实施例提供的方法同样适用上述新版本的TLS协议。
另外,本发明实施例仅以TLS握手的公钥加密算法(Rivest ShamirAdleman;以下简称:RSA)认证流程为例进行说明。对于其它的TLS流程,只要包括证书认证,在证书传递方面,都可以直接采用本发明实施例引入的扩展来减少证书的传递。对于加密和签名的具体步骤,虽然与本发明实施例所描述的不同,但本发明实施例引入的扩展,同样直接适用于这些流程。
下面按照TLS协议中的语法对客户端握手报文和服务器握手报文中新增的扩展进行介绍。
1、在扩展类型(ExtensionType)增加新的不需证书(certificate not required)类型值,如下所示。
上述不需证书(certificate_not_required)类型值,只能用于私有协议。具体的类型值需要通过互联网工程任务组互联网数字分配机构(InternetEngineering Task Force Internet Assigned Numbers Authority;以下简称:IETF IANA)批准,才能成为标准协议。但certificate_not_required类型值的大小不影响互操作性。
2、定义证书标识列表(CertificateIDTypeList),如下所示。
其中,Name和CertificateSerialNumber来源于x.509标准,Name和CertificateSerialNumber的值对应于相应的可辨别编码规则(DistinguishedEncoding Rules;以下简称:DER)编码。
对于
当extension_type的值为不需证书(certificate_not_required)时,上述extension_data的值为CertificateIDTypeList。
本发明在客户端握手报文和服务器握手报文中,都可以新增上述扩展。
本发明中,对于任一个证书,可以使用该证书中的签发者(isser)和证书序列号(serialNumber)进行唯一标识,也可以使用签发者(isser)和证书序列号(serialNumber)连接以后的哈希值,例如:消息摘要算法第五版(Message DigestAlgorithm5;以下简称:MD5)值进行标识。使用上述哈希值对证书进行标识,可以减小客户端握手报文的大小。
本发明图9所示实施例中,需要增加新的握手报文类型,如下所示:
上述certificate_id类型值,只能用于私有协议。该certificate_id类型值需要通过IETF_IANA批准,才能成为标准协议,但certificate_id类型值的大小不影响互操作性。
对于certificate_id报文,其格式与CertificateIDTypeList的格式相同,且固定包含1个元素,即客户端准备使用的证书的标识。
本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
图10为本发明客户端一个实施例的结构示意图,本实施例中的客户端10可以实现本发明图1所示实施例的流程,如图10所示,该客户端10可以包括:第一发送模块1001、第一接收模块1002、第一查找模块1003和第一加密模块1004;
其中,第一发送模块1001,用于向服务器发送客户端握手报文,该客户端握手报文携带该客户端缓存的服务器证书的标识;以及从第一加密模块1004接收加密后的客户端密钥交换报文,将加密后的客户端密钥交换报文发送给服务器;进一步地,上述客户端握手报文还可以携带不需服务器发送证书的指示;
第一接收模块1002,用于接收服务器发送的服务器握手报文,当上述服务器确定该客户端缓存的服务器证书的标识包括上述服务器准备使用的证书的标识时,该服务器握手报文携带服务器准备使用的证书的标识;以及将该服务器准备使用的证书的标识传递给第一查找模块1003;
第一查找模块1003,用于从第一接收模块1002接收服务器准备使用的证书的标识,在客户端缓存的服务器证书中,查找与服务器准备使用的证书的标识对应的服务器证书;以及将查找到的服务器证书传递给第一加密模块1004;
第一加密模块1004,用于从第一查找模块1003接收查找到的服务器证书,通过上述查找到的服务器证书中的公钥对待发送的客户端密钥交换报文进行加密,并将加密后的客户端密钥交换报文传递给第一发送模块1001。
上述实施例中,第一发送模块1001向服务器发送携带该客户端缓存的服务器证书的标识的客户端握手报文,当该服务器确定上述客户端缓存的服务器证书的标识包括该服务器准备使用的证书的标识时,服务器可以不发送证书报文,而是将服务器准备使用的证书的标识携带在服务器握手报文中发送给客户端;然后,第一查找模块1003在该客户端缓存的服务器证书中,查找与上述服务器准备使用的证书的标识对应的服务器证书,并由第一加密模块1004通过查找到的服务器证书中的公钥对待发送的客户端密钥交换报文进行加密,再由第一发送模块1001将加密后的客户端密钥交换报文发送给服务器。本实施例中,服务器可以不向客户端发送证书报文,从而可以减少TLS握手过程中的数据量,缩短TLS握手过程占用的时间,进而可以提高TLS连接的速度,并且可以避免缓存区过小导致的证书报文多次发送的问题,从而可以进一步提高TLS连接的速度。
图11为本发明客户端另一个实施例的结构示意图,与图10所示的客户端相比,不同之处在于,本实施例中的客户端11还可以包括:第一缓存模块1005;
第一缓存模块1005,用于在与服务器交互的过程中,缓存上述服务器发送的服务器证书;以及将缓存的服务器证书的标识传递给第一发送模块1001。
本实施例的一种实现方式中,当服务器确定客户端缓存的服务器证书的标识不包括上述服务器准备使用的证书的标识时,第一接收模块1002接收的服务器握手报文不携带该服务器准备使用的证书的标识;这时,第一接收模块1002,还用于在接收不携带服务器准备使用的证书的标识的服务器握手报文之后,接收上述服务器发送的证书报文,该服务器发送的证书报文携带该服务器准备使用的服务器证书;以及将该服务器准备使用的服务器证书分别传递给第一缓存模块1005和第一加密模块1004;
这时,第一缓存模块1005,还用于从第一接收模块1002接收上述服务器准备使用的服务器证书,缓存该服务器准备使用的服务器证书;
第一加密模块1004,还用于从第一接收模块1002接收上述服务器准备使用的服务器证书,通过上述服务器准备使用的服务器证书中的公钥对待发送的客户端密钥交换报文进行加密。
进一步地,该客户端11还可以包括:检查模块1006;
检查模块1006,用于在第一发送模块1001发送客户端握手报文之前,对客户端缓存的服务器证书的有效性进行检查;以及将客户端缓存的有效的服务器证书的标识传递给第一发送模块1001;
第一发送模块1001,还用于从检查模块1006接收客户端缓存的有效的服务器证书的标识,第一发送模块1001发送的客户端握手报文携带的客户端缓存的服务器证书的标识包括客户端缓存的有效的服务器证书的标识。
本实施例的另一种实现方式中,第一接收模块1002接收的服务器握手报文还携带不需客户端发送证书的指示和该服务器缓存的客户端证书的标识;
第一接收模块1002,还用于在接收服务器发送的服务器握手报文之后,接收服务器发送的证书请求报文;
第一发送模块1001,还用于当客户端确定服务器缓存的客户端证书的标识中包括客户端准备使用的证书的标识时,根据服务器发送的证书请求报文向服务器发送证书标识报文,该证书标识报文携带客户端准备使用的证书的标识;以及从第一加密模块1004接收加密后的证书验证报文,将加密后的证书验证报文发送给服务器,以便服务器在上述服务器缓存的客户端证书中查找到与上述客户端准备使用的证书的标识对应的客户端证书之后,通过查找到的客户端证书中的公钥对加密后的证书验证报文进行解密,以验证客户端的身份;
第一加密模块1004,还用于通过与上述客户端准备使用的证书匹配的私钥对待发送的证书验证报文进行加密,以及将加密后的证书验证报文传递给第一发送模块1001。
进一步地,第一发送模块1001,还用于当客户端确定上述服务器缓存的客户端证书的标识中不包括客户端准备使用的证书的标识时,根据服务器发送的证书请求报文向服务器发送证书报文,第一发送模块1001发送的证书报文携带上述客户端准备使用的客户端证书。
本实施例的再一种实现方式中,第一接收模块1002接收的服务器握手报文还携带不需客户端发送证书的指示;
第一接收模块1002,还用于在接收服务器发送的服务器握手报文之后,接收服务器发送的证书请求报文;
第一发送模块1001,还用于向服务器发送证书标识报文,上述证书标识报文携带客户端准备使用的证书的标识;以及从第一加密模块1004接收加密后的证书验证报文,将上述加密后的证书验证报文发送给服务器,以便服务器在上述服务器缓存的客户端证书中查找到与客户端准备使用的证书的标识对应的客户端证书之后,通过查找到的客户端证书中的公钥对上述加密后的证书验证报文进行解密,以验证上述客户端的身份;
第一加密模块1004,还用于通过与上述客户端准备使用的证书匹配的私钥对待发送的证书验证报文进行加密,以及将加密后的证书验证报文传递给第一发送模块1001。
上述实施例中,服务器可以不向客户端发送证书报文,从而可以减少TLS握手过程中的数据量,缩短TLS握手过程占用的时间,进而可以提高TLS连接的速度,并且可以避免缓存区过小导致的证书报文多次发送的问题,从而可以进一步提高TLS连接的速度。
图12为本发明客户端再一个实施例的结构示意图,本实施例中的客户端可以实现本发明图2所示实施例的流程,如图12所示,该客户端12可以包括:第二发送模块1201、第二接收模块1202、第二查找模块1203和第二加密模块1204;
第二发送模块1201,用于向服务器发送第一客户端握手报文,该第一客户端握手报文携带不需服务器发送证书的指示;以及从第二加密模块1204接收加密后的客户端密钥交换报文,将加密后的客户端密钥交换报文发送给服务器;
第二接收模块1202,用于接收服务器发送的服务器握手报文,上述服务器握手报文携带服务器准备使用的证书的标识;以及将上述服务器准备使用的证书的标识传递给第二查找模块1203;
第二查找模块1203,用于从第二接收模块1202接收上述服务器准备使用的证书的标识,在客户端缓存的服务器证书中,查找与上述服务器准备使用的证书的标识对应的服务器证书;以及当查找到与上述服务器准备使用的证书的标识对应的服务器证书时,将查找到的服务器证书传递给第二加密模块1204;
第二加密模块1204,用于从第二查找模块1203接收查找到的服务器证书,通过查找到的服务器证书中的公钥对待发送的客户端密钥交换报文进行加密,以及将加密后的客户端密钥交换报文传递给第二发送模块1201。
上述实施例中,第二发送模块1201向服务器发送携带不需服务器发送证书的指示的第一客户端握手报文,接收到第一客户端握手报文之后,服务器不发送证书报文,将该服务器准备使用的证书的标识携带在服务器握手报文中发送给客户端;如果第二查找模块1203在该客户端缓存的服务器证书中,查找到与上述服务器准备使用的证书的标识对应的服务器证书,则第二加密模块1204可以通过查找到的服务器证书中的公钥对待发送的客户端密钥交换报文进行加密,并由第二发送模块1201将加密后的客户端密钥交换报文发送给服务器。上述实施例中,服务器可以不向客户端发送证书报文,从而可以减少TLS握手过程中的数据量,缩短TLS握手过程占用的时间,进而可以提高TLS连接的速度,并且可以避免缓存区过小导致的证书报文多次发送的问题,从而可以进一步提高TLS连接的速度。
图13为本发明客户端再一个实施例的结构示意图,与图12所示的客户端相比,不同之处在于,图13所示的客户端13还可以包括:第二缓存模块1205;
第二发送模块1201,还用于当第二查找模块1203在客户端缓存的服务器证书中,未查找到与上述服务器准备使用的证书的标识对应的服务器证书时,向服务器重新发送第二客户端握手报文,该第二客户端握手报文不携带不需服务器发送证书的指示;
第二接收模块1202,还用于接收服务器发送的证书报文,该服务器发送的证书报文携带服务器准备使用的服务器证书;以及将服务器准备使用的服务器证书分别传递给第二缓存模块1205和第二加密模块1204;
第二缓存模块1205,还用于从第二接收模块1202接收上述服务器准备使用的服务器证书,缓存上述服务器准备使用的服务器证书;
第二加密模块1204,还用于从第二接收模块1202接收上述服务器准备使用的服务器证书,通过该服务器证书中的公钥对待发送的客户端密钥交换报文进行加密。
上述实施例中,服务器可以不向客户端发送证书报文,从而可以减少TLS握手过程中的数据量,缩短TLS握手过程占用的时间,进而可以提高TLS连接的速度,并且可以避免缓存区过小导致的证书报文多次发送的问题,从而可以进一步提高TLS连接的速度。
图14为本发明服务器一个实施例的结构示意图,本实施例中的服务器可以实现本发明图3所示实施例的流程,如图14所示,该服务器14可以包括:第三接收模块1401和第三发送模块1402;
第三接收模块1401,用于接收客户端发送的客户端握手报文,该客户端握手报文携带上述客户端缓存的服务器证书的标识;以及将上述客户端缓存的服务器证书的标识传递给第三发送模块1402;接收客户端发送的加密的客户端密钥交换报文,上述加密的客户端密钥交换报文是客户端在该客户端缓存的服务器证书中查找到与上述服务器准备使用的证书的标识对应的服务器证书之后,通过查找到的服务器证书中的公钥对待发送的客户端密钥交换报文进行加密后发送给上述服务器的;
进一步地,上述客户端握手报文还可以携带不需服务器发送证书的指示,则第三接收模块1401还需要将上述不需服务器发送证书的指示传递给第三发送模块1402;
第三发送模块1402,用于从第三接收模块1401接收上述客户端缓存的服务器证书的标识,向客户端发送服务器握手报文,当确定上述客户端缓存的服务器证书的标识包括上述服务器准备使用的证书的标识时,第三发送模块1402发送的上述服务器握手报文携带该服务器准备使用的证书的标识。
进一步地,第三发送模块1402,还用于在与客户端交互的过程中,向上述客户端发送服务器证书,以便该客户端缓存上述服务器发送的服务器证书。
本实施例的一种实现方式中,当确定客户端缓存的服务器证书的标识不包括该服务器准备使用的证书的标识时,第三发送模块1402发送的服务器握手报文不携带该服务器准备使用的证书的标识;
第三发送模块1402,还用于在向客户端发送服务器握手报文之后,向上述客户端发送证书报文,第三发送模块1402发送的证书报文携带服务器准备使用的服务器证书,以便客户端缓存上述服务器准备使用的服务器证书;
第三接收模块1401,还用于接收上述客户端发送的加密的客户端密钥交换报文;该加密的客户端密钥交换报文是客户端接收到上述服务器准备使用的服务器证书之后,通过上述服务器准备使用的服务器证书中的公钥对待发送的客户端密钥交换报文进行加密后发送给服务器的。
本实施例中,第三接收模块1401接收的客户端握手报文携带的客户端缓存的服务器证书的标识包括上述客户端缓存的有效的服务器证书的标识。也就是说,客户端在发送客户端握手报文之前,会对该客户端缓存服务器证书的有效性进行检查,将客户端缓存的有效的服务器证书的标识携带在客户端握手报文中发送给服务器。
上述实施例中,第三接收模块1401接收到客户端发送的携带该客户端缓存的服务器证书的标识的客户端握手报文之后,当该服务器确定上述客户端缓存的服务器证书的标识包括该服务器准备使用的证书的标识时,服务器可以不发送证书报文,而是将服务器准备使用的证书的标识携带在服务器握手报文中发送给客户端;本实施例中,服务器可以不向客户端发送证书报文,从而可以减少TLS握手过程中的数据量,缩短TLS握手过程占用的时间,进而可以提高TLS连接的速度,并且可以避免缓存区过小导致的证书报文多次发送的问题,从而可以进一步提高TLS连接的速度。
图15为本发明服务器另一个实施例的结构示意图,与图14所示的服务器相比,不同之处在于,图15所示的服务器15还可以包括:第三查找模块1403和第一解密模块1404;
本实施例中,第三发送模块1402发送的服务器握手报文还携带不需客户端发送证书的指示和上述服务器缓存的客户端证书的标识;
第三发送模块1402,还用于向客户端发送服务器握手报文之后,向客户端发送证书请求报文;
本实施例的一种实现方式中,第三接收模块1401,还用于接收客户端确定服务器缓存的客户端证书的标识中包括上述客户端准备使用的证书的标识之后发送的证书标识报文,该证书标识报文携带客户端准备使用的证书的标识;以及将上述客户端准备使用的证书的标识传递给第三查找模块1403;以及接收客户端发送的加密的证书验证报文,将加密的证书验证报文传递给第一解密模块1404,上述加密的证书验证报文是客户端通过与上述客户端准备使用的证书匹配的私钥对待发送的证书验证报文加密后发送给服务器的;
第三查找模块1403,用于从第三接收模块1401接收客户端准备使用的证书的标识,在服务器缓存的客户端证书中查找与上述客户端准备使用的证书的标识对应的客户端证书;以及将查找到的客户端证书传递给第一解密模块1404;
第一解密模块1404,用于从第三接收模块1401接收加密的证书验证报文,以及从第三查找模块1403接收客户端证书,及通过客户端证书中的公钥对上述加密后的证书验证报文进行解密,以验证客户端的身份。
本实施例的另一种实现方式中,第三接收模块1401,还用于接收客户端在确定服务器缓存的客户端证书的标识中不包括客户端准备使用的证书的标识之后发送的证书报文,上述客户端发送的证书报文携带该客户端准备使用的客户端证书;以及接收客户端发送的加密的证书验证报文,上述加密的证书验证报文是客户端通过与上述客户端准备使用的证书匹配的私钥对待发送的证书验证报文进行加密后发送给服务器的;以及将上述客户端证书和上述加密的证书验证报文传递给第一解密模块1404;
第一解密模块1404,还用于从第三接收模块1401接收上述客户端证书和加密的证书验证报文,通过上述客户端证书中的公钥对加密后的证书验证报文进行解密,以验证客户端的身份。
本实施例的再一种实现方式中,上述服务器15还可以包括:第四查找模块1405和第二解密模块1406;
本实现方式中,第三发送模块1402发送的服务器握手报文还可以携带不需客户端发送证书的指示,而不携带上述服务器缓存的客户端证书的标识;
第三发送模块1402,还用于向客户端发送服务器握手报文之后,向上述客户端发送证书请求报文;
第三接收模块1401,还用于接收客户端发送的证书标识报文,该证书标识报文携带客户端准备使用的证书的标识;以及将上述客户端准备使用的证书的标识传递给第四查找模块1405;以及接收客户端发送的加密的证书验证报文,将上述加密的证书验证报文传递给第二解密模块1406,上述加密的证书验证报文是客户端通过与上述客户端准备使用的证书匹配的私钥对待发送的证书验证报文加密后发送给上述服务器的;
第四查找模块1405,用于从第三接收模块1401接收上述客户端准备使用的证书的标识,在服务器缓存的客户端证书中查找与所述客户端准备使用的证书的标识对应的客户端证书;以及将查找到的客户端证书传递给第二解密模块1406;
第二解密模块1406,用于从第三接收模块1401接收上述加密的证书验证报文,以及从第四查找模块1405接收客户端证书,及通过客户端证书中的公钥对加密后的证书验证报文进行解密,以验证上述客户端的身份。
上述实施例中,服务器可以不向客户端发送证书报文,从而可以减少TLS握手过程中的数据量,缩短TLS握手过程占用的时间,进而可以提高TLS连接的速度,并且可以避免缓存区过小导致的证书报文多次发送的问题,从而可以进一步提高TLS连接的速度。
图16为本发明服务器再一个实施例的结构示意图,本实施例中的服务器16可以实现本发明图4所示实施例的流程,如图16所示,该服务器16可以包括:第四接收模块1601和第四发送模块1602;
第四接收模块1601,用于接收客户端发送的第一客户端握手报文,该第一客户端握手报文携带不需服务器发送证书的指示;以及将上述不需所述服务器发送证书的指示发送给第四发送模块1602;
第四发送模块1602,用于从第四接收模块1601接收上述不需服务器发送证书的指示,向客户端发送服务器握手报文,该服务器握手报文携带上述服务器准备使用的证书的标识;
第四接收模块1601,还用于接收客户端在上述客户端缓存的服务器证书中,查找到与服务器准备使用的证书的标识对应的服务器证书之后发送的加密的客户端密钥交换报文,上述加密的客户端密钥交换报文是客户端通过查找到的服务器证书中的公钥对待发送的客户端密钥交换报文进行加密后发送给服务器的。
本实施例的一种实现方式中,第四接收模块1601,还用于接收客户端在上述客户端缓存的服务器证书中,未查找到与服务器准备使用的证书的标识对应的服务器证书之后重新发送的第二客户端握手报文,该第二客户端握手报文不携带不需服务器发送证书的指示;以及接收客户端发送的加密的客户端密钥交换报文,上述加密的客户端密钥交换报文是客户端接收到服务器准备使用的服务器证书之后,通过服务器证书中的公钥对待发送的客户端密钥交换报文进行加密后发送给服务器的;
第四发送模块1602,还用于向客户端发送证书报文,第四发送模块1602发送的证书报文携带服务器准备使用的服务器证书,以便客户端缓存上述服务器准备使用的服务器证书。
上述实施例中,第四接收模块1601接收到客户端发送的携带不需所述服务器发送证书的指示的第一客户端握手报文之后,第四发送模块1602不向客户端发送证书报文,而是将该服务器准备使用的证书的标识携带在服务器握手报文中发送给客户端;本实施例中,服务器可以不向客户端发送证书报文,从而可以减少TLS握手过程中的数据量,缩短TLS握手过程占用的时间,进而可以提高TLS连接的速度,并且可以避免缓存区过小导致的证书报文多次发送的问题,从而可以进一步提高TLS连接的速度。
图17为本发明客户端再一个实施例的结构示意图,如图17所示,该客户端17可以包括:总线1704、至少一个处理器1701、通信接口1703以及存储器1702,处理器1701、存储器1702和通信接口1703均连接到总线1704。该存储器1702用于存储可执行程序代码,其中,处理器1701通过读取存储器1702中存储的可执行程序代码来运行与可执行程序代码对应的程序,以使客户端实现如下功能:向服务器发送客户端握手报文,上述客户端握手报文携带该客户端缓存的服务器证书的标识;接收服务器发送的服务器握手报文,当服务器确定客户端缓存的服务器证书的标识包括上述服务器准备使用的证书的标识时,该服务器握手报文携带上述服务器准备使用的证书的标识;在客户端缓存的服务器证书中,查找与上述服务器准备使用的证书的标识对应的服务器证书;通过查找到的服务器证书中的公钥对待发送的客户端密钥交换报文进行加密,并将加密后的客户端密钥交换报文发送给服务器。
在本实施例中,通信接口1703具体可以为网络接口适配器(或称网卡),或可以为天线等可单独或分别做发送器和接收器的设备,主要用于与服务器建立通信通道,并在处理器1701的指示下实现报文的发送和接收。
上述实施例中,服务器可以不向客户端发送证书报文,从而可以减少TLS握手过程中的数据量,缩短TLS握手过程占用的时间,进而可以提高TLS连接的速度,并且可以避免缓存区过小导致的证书报文多次发送的问题,从而可以进一步提高TLS连接的速度。
图18为本发明客户端再一个实施例的结构示意图,如图18所示,该客户端18可以包括:总线1804、至少一个处理器1801、通信接口1803以及存储器1802,上述处理器1801、存储器1802和通信接口1803均连接到总线1804。该存储器1802用于存储可执行程序代码,其中,处理器1801通过读取存储器1802中存储的可执行程序代码来运行与可执行程序代码对应的程序,以使客户端实现如下功能:向服务器发送第一客户端握手报文,该第一客户端握手报文携带不需服务器发送证书的指示;接收服务器发送的服务器握手报文,上述服务器握手报文携带服务器准备使用的证书的标识;如果在该客户端缓存的服务器证书中,查找到与服务器准备使用的证书的标识对应的服务器证书,则通过查找到的服务器证书中的公钥对待发送的客户端密钥交换报文进行加密,并将加密后的客户端密钥交换报文发送给服务器。
在本实施例中,上述通信接口1803,具体可以为网卡,或可以为天线等可单独或分别做发送器和接收器的设备,主要用于与服务器建立通信通道,并在处理器1801的指示下实现报文的发送和接收。
上述实施例中,服务器可以不向客户端发送证书报文,从而可以减少TLS握手过程中的数据量,缩短TLS握手过程占用的时间,进而可以提高TLS连接的速度,并且可以避免缓存区过小导致的证书报文多次发送的问题,从而可以进一步提高TLS连接的速度。
图19为本发明服务器再一个实施例的结构示意图,如图19所示,该服务器19可以包括:总线1904、至少一个处理器1901、通信接口1903以及存储器1902,上述处理器1901、存储器1902和通信接口1903均连接到总线1904。该存储器1902用于存储可执行程序代码,其中,处理器1901通过读取存储器1902中存储的可执行程序代码来运行与可执行程序代码对应的程序,以使服务器实现如下功能:接收客户端发送的客户端握手报文,该客户端握手报文携带该客户端缓存的服务器证书的标识;向客户端发送服务器握手报文,当上述服务器确定客户端缓存的服务器证书的标识包括服务器准备使用的证书的标识时,上述服务器握手报文携带该服务器准备使用的证书的标识;接收客户端发送的加密的客户端密钥交换报文,上述加密的客户端密钥交换报文是客户端在该客户端缓存的服务器证书中查找到与上述服务器准备使用的证书的标识对应的服务器证书之后,通过查找到的服务器证书中的公钥对待发送的客户端密钥交换报文进行加密后发送给服务器的。
在本实施例中,上述通信接口1903,具体可以为网卡,用于与客户端建立通信通道,并在处理器1901的指示下实现与客户端之间报文的发送和接收。
上述实施例中,服务器可以不向客户端发送证书报文,从而可以减少TLS握手过程中的数据量,缩短TLS握手过程占用的时间,进而可以提高TLS连接的速度,并且可以避免缓存区过小导致的证书报文多次发送的问题,从而可以进一步提高TLS连接的速度。
图20为本发明服务器再一个实施例的结构示意图,如图20所示,该服务器20可以包括:总线2004、至少一个处理器2001、通信接口2003以及存储器2002,上述处理器2001、存储器2002和通信接口2003均连接到总线2004。该存储器2002用于存储可执行程序代码,其中,处理器2001通过读取存储器2002中存储的可执行程序代码来运行与可执行程序代码对应的程序,以使服务器实现如下功能:接收客户端发送的第一客户端握手报文,该第一客户端握手报文携带不需服务器发送证书的指示;向客户端发送服务器握手报文,上述服务器握手报文携带服务器准备使用的证书的标识;接收客户端在上述客户端缓存的服务器证书中,查找到与服务器准备使用的证书的标识对应的服务器证书之后发送的加密的客户端密钥交换报文,该加密的客户端密钥交换报文是客户端通过查找到的服务器证书中的公钥对待发送的客户端密钥交换报文进行加密后发送给上述服务器的。
在本实施例中,上述通信接口2003,具体可以为网卡,用于与客户端建立通信通道,并在处理器2001的指示下实现与客户端之间的报文发送和接收。
上述实施例中,服务器可以不向客户端发送证书报文,从而可以减少TLS握手过程中的数据量,缩短TLS握手过程占用的时间,进而可以提高TLS连接的速度,并且可以避免缓存区过小导致的证书报文多次发送的问题,从而可以进一步提高TLS连接的速度。
图21为本发明报文交换系统一个实施例的结构示意图,如图21所示,该报文交换系统可以包括至少一个客户端2101和至少一个服务器2102,其中,
客户端2101用于:向服务器2102发送客户端握手报文,上述客户端握手报文携带客户端缓存的服务器证书的标识;接收服务器2102发送的服务器握手报文,当服务器2102确定客户端2101缓存的服务器证书的标识包括服务器2102准备使用的证书的标识时,上述服务器握手报文携带服务器2102准备使用的证书的标识;在客户端2101缓存的服务器证书中,查找与服务器2102准备使用的证书的标识对应的服务器证书;通过查找到的服务器证书中的公钥对待发送的客户端密钥交换报文进行加密,并将加密后的客户端密钥交换报文发送给服务器2102;
服务器2102用于:接收客户端2101发送的客户端握手报文,上述客户端握手报文携带客户端2101缓存的服务器证书的标识;向客户端2101发送服务器握手报文,当服务器2102确定客户端2101缓存的服务器证书的标识包括服务器2102准备使用的证书的标识时,上述服务器握手报文携带服务器2102准备使用的证书的标识;接收客户端2101发送的加密的客户端密钥交换报文,上述加密的客户端密钥交换报文是客户端2101在客户端2101缓存的服务器证书中查找到与服务器2102准备使用的证书的标识对应的服务器证书之后,通过查找到的服务器证书中的公钥对待发送的客户端密钥交换报文进行加密后发送给服务器2102的。
图21以报文交换系统包括一个客户端2101和一个服务器2102为例示出。
上述报文交换系统中,服务器2102可以不向客户端2101发送证书报文,从而可以减少TLS握手过程中的数据量,缩短TLS握手过程占用的时间,进而可以提高TLS连接的速度,并且可以避免缓存区过小导致的证书报文多次发送的问题,从而可以进一步提高TLS连接的速度。
图22为本发明报文交换系统另一个实施例的结构示意图,如图22所示,该报文交换系统可以包括至少一个客户端2201和至少一个服务器2202,其中,
客户端2201用于:向服务器2202发送第一客户端握手报文,第一客户端握手报文携带不需服务器发送证书的指示;接收服务器2202发送的服务器握手报文,服务器握手报文携带服务器2202准备使用的证书的标识;如果客户端2201在客户端2201缓存的服务器证书中,查找到与服务器2202准备使用的证书的标识对应的服务器证书,则客户端2201通过查找到的服务器证书中的公钥对待发送的客户端密钥交换报文进行加密,并将加密后的客户端密钥交换报文发送给服务器2202;
服务器2202用于:接收客户端2201发送的第一客户端握手报文,第一客户端握手报文携带不需服务器发送证书的指示;向客户端2201发送服务器握手报文,服务器握手报文携带服务器2202准备使用的证书的标识;接收客户端2201在客户端2201缓存的服务器证书中,查找到与服务器2202准备使用的证书的标识对应的服务器证书之后发送的加密的客户端密钥交换报文,加密的客户端密钥交换报文是客户端2201通过查找到的服务器证书中的公钥对待发送的客户端密钥交换报文进行加密后发送给服务器2202的。
图22以报文交换系统包括一个客户端2201和一个服务器2202为例示出。
上述报文交换系统中,服务器2202可以不向客户端2201发送证书报文,从而可以减少TLS握手过程中的数据量,缩短TLS握手过程占用的时间,进而可以提高TLS连接的速度,并且可以避免缓存区过小导致的证书报文多次发送的问题,从而可以进一步提高TLS连接的速度。
综上所述,本发明实施例提供的报文发送和接收方法、客户端、服务器和系统具有如下技术效果:通过在TLS握手过程中省略证书报文的传递,可以优化TLS握手的性能。在低速网络中,省略证书报文的传递可以大幅减少TLS握手过程中的数据量,从而可以大大提高TLS连接速度;并且,省略证书报文的传递可以使多个TLS握手报文一次发送完成,可以避免缓存区过小导致的证书报文多次发送的问题,进而可以避免延迟ACK对TLS握手过程的影响,大大提高了TLS连接的速度。另外,省略证书报文的传递可以省略证书链的验证过程,可以大大减少TLS握手过程中客户端和服务器的CPU开销。
另外,本发明不会降低TLS连接的安全性,这是因为证书本身是公开的资源,其安全性在于其完整性。对比使用每次握手时从对端传递过来的证书,和本地缓存的证书,两者在安全性方面没有区别。对于缓存证书带来的存储开销,现在很多客户端已经具备了较大的存储空间。增加少量的缓存空间开销不会有不利影响。
本领域技术人员可以理解附图只是一个优选实施例的示意图,附图中的模块或流程并不一定是实施本发明所必须的。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和模块的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个模块或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口;装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
本发明实施例提供的方法如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。