安全连接创建方法以及用于创建安全连接的客户端设备的制作方法

文档序号:7755607阅读:110来源:国知局
专利名称:安全连接创建方法以及用于创建安全连接的客户端设备的制作方法
技术领域
本发明涉及JSSE (Java安全套接字扩展)技术领域,尤其设计使用JSSE接口控制 创建安全连接的技术。
背景技术
SSL (安全套接层,Secure Sockets Layer)是 Netscape 公司在 1994 年开发的,最 初用于WEB(互联网)浏览器,为浏览器与服务器间的数据传递提供安全保障,提供了加密、 来源认证和数据完整性的功能,可以被简单的看作是安全的TCP(传输控制协议)连接。现 在SSL3. 0得到了普遍的使用,它的改进版TLS (传输层安全)已经成为互联网标准。JSSE是 Java为控制SSL连接提供的一个框架(Framework),即JSSE是用于Java实现SSL编程的, 通过使用JSSE,开发人员可以在客户端和服务器之间通过TCP/IP协议安全地传输数据。目前JSSE已经成为J2SE (Java2标准版)1. 4版本中的标准组件,支持SSL 3. 0。 在构建基于套接字的JAVAC/S (客户端/服务器端)程序时,可以通过添加对SSL的支持来 保障数据安全和完整。在服务器端与客户端间的SSL连接过程如下a、服务器端、客户端各自的JSSE框架初始化SSL上下文(SSL上下文包含创建SSL 连接过程中需要的数据和方法等);b、服务器端、客户端各自的JSSE框架将从本地的密码保护文件(JKS文件 JavaKeyStore,用于保存私钥和证书信息)中获取到私钥和证书后,生成消息摘要(哈希 值),并用私钥签名该消息摘要;C、服务器端、客户端各自的JSSE框架将证书、已签名的消息摘要发送给对方;d、服务器端、客户端各自的JSSE框架利用接收到的证书验证接收到的已签名的 消息摘要,验证成功后,服务器端的JSSE框架生成一个对称加密密钥发给客户端;e、服务器端、客户端的JSSE框架使用该对称加密密钥加解密通信数据,双方建立 数据通信。在使用JSSE框架创建SSL连接并且要求进行双向验证时,服务器端和客户端在 初始化SSL上下文时需要提供一个密码保护文件(JKS文件),SSL上下文对象从密码保护 文件中获取到私钥和证书后,在SSL协商过程中,双方各自将证书发送给对方,JSSE框架在 SSL协商过程中,客户端使用MD5 WithSHA算法(一种哈希算法,用于进行SSL3. 0客户端认 证)生成一个消息摘要(消息摘要即为一个哈希值),然后用客户端私钥对这个消息摘要哈 希值进行签名(用客户端私钥对这个哈希值进行加密),客户端将该已签名的消息摘要发 送给服务器端。服务器端使用从客户端收到的证书验证这个数字签名服务器端从客户端的证书 中得到客户端的公钥与消息摘要的哈希算法,同样使用MD5 WithSHA对收到已签名的消息 摘要进行哈希运算,得到一个消息摘要,并使用公钥解密已签名的哈希值,并判断服务器端 自身运算得到的消息摘要与解密后的哈希值是否一致,如是,则验证通过,如否,则验证失败,验证通过之后服务器端生成一个对称加密的通讯密钥发给客户端,之后双方就使用这 个密钥加解密数据,实现双方通信数据的加密传输。JSSE框架的原理是使用软件实现数据的加解密和完整性,这种解决方式虽然使用 简单,升级容易,但对于在某些对客户端私钥安全性要求比较高的情况下,JSSE框架中用文 件保存私钥的方式就不能满足需要,因为文件是比较容易复制和获取到,如对与电子商务、 电子政务之类对安全性要求非常高的应用来说,软件加密显然存在安全强度不够及性能差 等问题。硬件加密卡不仅具有证书存贮、数字签名、数据加密等安全功能,能支持多种通 用的不对称加密算法、对称算法和哈希算法,可以为企业管理信息系统、电子设备、电子商 务、网络安全、身份识别、密钥管理等领域提供一套完整、安全的解决方案,目前很多USB key (利用USB存储加密数据)、电子钥匙等就属于这类产品。因此,发明人经过研究发现,有必要提供一种支持使用硬件加密卡的JSSE框架技 术来创建SSL连接的,以解决现有技术中存在的问题。

发明内容
本发明所要解决的技术问题是,提供一种支持使用硬件加密卡来创建SSL连接的 方法,以及实现该方法的客户端设备。本发明为解决上述技术问题所采用的技术方案是,一种创建安全连接的方法,包 括服务器端、客户端各自的JSSE框架获取到各自的私钥、证书以及已签名的消息摘 要;并将各自的证书、已签名的消息摘要发送给对方;服务器端、客户端各自的JSSE框架利用接收到的证书验证接收到的已签名的消 息摘要,验证成功后,服务器端的JSSE框架生成一个对称加密密钥发给客户端;服务器端、 客户端双方建立数据通信,均使用该对称加密密钥加解密通信数据;所述客户端使用JAVA本地调用技术封装Windows CSP的安全服务接口函数,安 全服务接口包括密钥服务接口、签名服务接口 ;客户端的JAVA加密系统框架自定义密钥管 理服务提供者与签名服务提供者,并将所述密钥管理服务提供者与签名服务提供者注册到 JAVA加密系统框架中;其中,客户端的JSSE框架获取服务器端的证书以及已签名的消息摘要的具体过 程为客户端中的密钥管理服务提供者利用密钥服务接口,从硬件加密卡中读取客户端 证书信息,并临时构造一个虚拟私钥,将客户端证书信息与虚拟私钥一同返回给客户端的 JSSE框架;客户端的JSSE框架获得证书信息,生成消息摘要,并向签名服务提供者传入需要 签名的消息摘要;客户端中的签名服务提供者利用签名服务接口,在硬件加密卡完成客户端私钥对 消息摘要的签名,并将已签名的消息摘要至返回客户端的JSSE框架。申请人:发现JSSE框架不支持硬件加密卡的原因如下(1)硬件加密卡中的证书信息无法被按照JSSE定义的接口返回给JSSE框架;
(2)因为JSSE框架是在创建SSL连接前通过载入密码保护文件(JKS文件)获取私 钥和证书并保存在SSL上下文中,而硬件加密卡中的私钥是无法取出,更无法封装成JSSE 框架需要的私钥对象。目前,大部分硬件加密卡都是按照微软的Windows CryptoAPI标准实现加解密服 务,Windows CryptoAPI是微软定义好的一组加密接口函数。Windows CSP (Windows加密 服务提供者)是微软公司用来在Windows平台上提供第三方加密模块的底层加密接口标 准,用于管理硬件或软件形式的加密设备,实现数据加密、解密,数字签名、验证和消息摘要 (哈希运算)等,这些加密接口函数的具体实现者,可以是软件或者硬件。对于运行Windows操作系统的客户端,本发明使用JNI (JAVA本地调用)技术封装 Windows CSP的相关安全服务接口函数以供JAVA程序使用。这里的安全服务接口包括读 取Windows本地证书库中的所有证书信息的密钥服务接口、以及使用指定容器对数据进行 RSA(非对称的公钥加密算法)签名的签名服务接口。将JSSE与windows CSP结合起来使用 虽然失去了平台独立性,但是可以有效的使用Windows CryptoAPI标准加密接口函数,从而 操纵硬件加密卡提供加密服务,对于只运行在Windows系统的JAVA程序来说是一个不错的 安全解决方式。另一方面,本发明为了使得JSSE框架按照正常的SSL流程进行,满足JSSE 框架获取客户端私钥的步骤,临时构造一个符合JSSE框架要求的虚拟私钥返回给JSSE框 架,以“欺骗”JSSE框架,使得JSSE框架得以正常进行SSL协商。事实上这个虚拟私钥是不 可用的,真正与公钥对应的私钥保存在硬件加密卡中无法取出。当需要使用真正的私钥进 行签名时,调用封装好的签名服务接口处理。进一步的,在JSSE框架使用虚拟私钥的时候,可以根据保存的公钥与构造私钥的 对应关系知道当前JSSE框架是想用哪一个私钥签名,这样就可以找到正确的硬件加密卡 进行硬件签名了 密钥服务接口将虚拟私钥返回给客户端的JSSE框架后,本地还记录该虚 拟私钥与客户端证书中公钥的对应关系;客户端的JSSE框架向签名服务提供者传入的需 要签名的消息摘要后,签名服务提供者记录JSSE框架传入的需要签名的消息摘要与该虚 拟私钥的对应关系,并根据所述需要签名的消息摘要与该虚拟私钥的对应关系,将需要签 名的消息摘要传送至对应的硬件加密卡中进行签名。进一步的,为了完成硬件签名无缝替换软件签名,客户端的签名服务提供者需要 将名称为“Signature. NONEwithRSA"的使用硬件实现的签名类注册到JCA框架中,客户端 的签名服务接口使用Windows CSP实现的签名服务接口模块的RSA签名函数进行签名。本发明的另一目的是,提供一种实现上述创建安全连接方法的客户端设备,包括 JSSE框架模块、JAVA加密系统框架模块、由JAVA加密系统框架自定义的密钥管理服务提供 者模块、由JAVA加密系统框架自定义的签名服务提供者模块、利用JAVA本地调用技术封装 Windows CSP的安全服务接口模块;所述安全服务接口模块包括密钥服务接口模块、签名服 务接口模块;JSSE框架模块用于,获取服务器端的证书以及已签名的消息摘要,用JAVA实现与 服务器端的SSL连接;密钥管理服务提供者模块用于,将密钥服务接口注册到JCA框架,通过密钥服务 接口模块获取客户端证书信息,临时构造一个虚拟私钥,将客户端证书信息与虚拟私钥一 同返回给JSSE框架;
签名服务提供者模块用于,将签名服务接口注册到JCA框架中,接收到JSSE框架 传入的需要签名的消息摘要后,将需要签名的消息摘要传入签名服务接口模块,通过签名 服务接口模块获取已签名的消息摘要,并将已签名的消息摘要返回客户端的JSSE框架;密钥服务接口模块用于,在Windows本地证书库中读取硬件加密卡的证书信息;签名服务接口模块用于,在硬件加密卡完成客户端私钥对消息摘要的签名。进一步的,当密钥服务接口模块将虚拟私钥返回给JSSE框架后,本地还记录该虚 拟私钥与客户端证书中公钥的对应关系;签名服务提供者模块还用于,当JSSE框架向签名 服务提供者模块传入需要签名的消息摘要后,并根据所述需要签名的消息摘要与该虚拟私 钥对应关系,将需要签名的消息摘要传送至签名服务接口模块中对应的硬件加密卡中进行 签名。进一步的,签名服务提供者模块将客户端的签名服务接口以名称“Signature. NONEwithRSA”注册到JCA框架中,而客户端的签名服务接口模块使用硬件加密卡中相同的 RSA签名函数实现签名。本发明的有益效果是,让JSSE框架应用能够使用硬件加密卡签名,使应用系统关 键数据的安全性得到更好的保障,具有更好的安全性和扩展性。


图1为创建安全连接的系统示意图;图2为客户端示意图。
具体实施例方式如图1所示,SSL建连过程中JAVA服务器端无需改动,仍然按照常规方式使用JKS 文件初始化SSL上下文对象,同时设置需要验证客户端选项,返回SSL服务器端套接字对象 监听连接请求,等候客户端连接;运行Windows操作系统的JAVA客户端将JSSE框架与硬件加密卡结合起来完成 SSL连接的创建和数据传输加密的具体方法如下使用JNI技术(JAVA本地调用技术)封装Windows CSP的安全服务接口函数,包括 用于读取Windows本地证书库的密钥服务接口函数、用于使用指定容器对数据进行RSA签 名的签名服务接口函数、加解密等接口函数,形成一个本地动态链接库和对应的供JAVA使 用的封装类;JAVA客户端实现自定义的密钥管理服务提供者,用密钥服务接口读取Windows本 地证书库中的所有证书信息,将硬件加密卡中的证书和公钥返回给JSSE框架,同时构造一 个合法的RSA私钥返回给JSSE框架,使JSSE框架能获得客户端完整的密钥和证书信息继 续与服务器进行SSL协商过程;JAVA客户端实现自定义的签名服务提供者,记录JSSE框架传入的需要签名的消 息摘要,用签名服务接口对它进行RSA签名,并返回数字签名值;JAVA客户端启动时向JCA框架(JAVA加密系统框架)注册实现的密钥管理服务提 供者、签名服务提供者。JAVA客户端完成上面的实现后即可使用密钥管理服务提供者初始化SSL上下文对象,创建SSL套接字与JAVA服务器建立SSL连接了。如图2所示,JAVA客户端除了包括用于实现与JAVA服务器端的SSL连接的JSSE 框架模块之外,为了能在JSSE框架中使用Windows CSP的接口,在JAVA客户端还需要实现 几个JAVA类以及Windows CSP接口的封装实现,需要增加的模块如下1、密钥服务接口模块继承自类KeyManagerFactorySpi,用于返回给JSSE框架一 个X509KeyManager (决定使用哪一个基于X509证书的密钥来验证本地安全套接字的类) 的实现类,这个实现类将调用使用JNI技术封装好的Windows CSP接口为JSSE框架返回建 连需要的证书等信息,同时实现返回私钥方法,返回一个虚拟的RSA私钥用以“欺骗” JSSE 框架,因为对于USBKEY等硬件加密卡产品,它存储了证书和密钥,但是私钥是不能输出的, 所有需要私钥的计算都必须在硬件产品内完成,所以此处临时生成一个RSA私钥,返回给 框架,保证框架能继续后面的协商过程。当需要使用私钥计算时,调用封装好的Windows CSP接口处理;2、签名服务接口模块继承自类java. security. SignatureSpi (该类用于为应用 程序提供数字签名算法功能的类定义服务提供程序接口),因为本发明解决的是JAVA客户 端使用硬件产品与使用标准JKS文件的JAVA服务器建立SSL连接,所以这个类只需要对如 下几个关键步骤进行特殊处理为签名初始化RSA签名引擎JSSE框架在本步骤会把之前构造的RSA私钥传进 来,这个私钥就是上述的密钥提供者返回给JSSE框架的客户端私钥,没有实际用处;更新数据到签名或确认操作JSSE框架会将需要签名的消息摘要(哈希值)传 入,这个哈希值需要记录下来并在下面的函数中对其签名;执行签名调用Windows CSP封装接口对上面更新进来的哈希值进行RSA签名操 作并返回数字签名。3、密钥管理服务提供者模块即实现密钥管理服务提供者类,将其以名称 “MSKMF”(〃 MSKMF",KeyManagerFactory. getlnstance 根据指定的提供程序为指定的密 钥管理算法生成基于密钥内容源的密钥管理器的工厂的对象)注册到JCA框架中。在客户 端初始化SSL上下文对象时将通过KeyManagerFactory. getlnstance获取自定义的Key管 理服务实现,完成JSSE框架与Windows本地证书库的集成。USBKEY就是一个CSP,它安装 了驱动后就可以被windows识别出来,把存储在key中的证书信息装载在window本地证书 库中。第三方软件可以通过本地证书库访问Key中的证书。4.签名服务提供者模块即实现签名提供者类,将Signature. NONEwithRSA(RSA 签名实现者)的实现类指定为我们上面实现的签名服务实现类,因为JSSE框架将使用这个 实现类进行签名操作,所以要想使用硬件产品中的签名服务替换JSSE框架的软件签名,这 一步是必须的。接下来把此签名服务提供者注册到JCA框架中集成。Windows CSP封装主要用于从Windows本地证书库中获取证书和对SSL建连过程 中的哈希值进行签名。这里的关键点在于对SSL建连过程中的哈希值进行的签名,由于私 钥存储于硬件加密卡中并且不能被导出,所以这个签名过程需要在硬件加密卡中进行,签 名时需要采用CryptAcquireCertif icatePrivateKey函数创建加密服务提供者句柄,使用 CryptCreateHash函数创建哈希对象时,需要指定ALG_ID参数(算法类型定义,其本质为无 符号整型)为CALG_SSL3_SHAMD5 ( 一种哈希算法定义,作用是进行SSL3客户端认证),否则无法与前面步骤所述的NONEwithRSA签名算法进行配合,签名结果在服务器端将无法验 证。
权利要求
一种创建安全连接的方法,包括步骤服务器端、客户端各自的JSSE框架获取到各自的私钥、证书以及已签名的消息摘要;并将各自的证书、已签名的消息摘要发送给对方;服务器端、客户端各自的JSSE框架利用接收到的证书验证接收到的已签名的消息摘要,验证成功后,服务器端的JSSE框架生成一个对称加密密钥发给客户端;服务器端、客户端双方建立数据通信,均使用该对称加密密钥加解密通信数据;其特征在于,所述客户端使用JNI封装Windows CSP的安全服务接口函数,安全服务接口包括密钥服务接口、签名服务接口;客户端按照JCA框架自定义的密钥管理服务提供者与签名服务提供者,并将所述密钥管理服务提供者与签名服务提供者注册到JCA框架中;所述客户端的JSSE框架获取其私钥、证书以及已签名的消息摘要的具体过程为客户端中的密钥管理服务提供者利用密钥服务接口,从硬件加密卡中读取客户端证书信息,并临时构造一个虚拟私钥,将客户端证书信息与虚拟私钥一同返回给客户端的JSSE框架;客户端的JSSE框架获得证书信息,还要生成消息摘要,并向签名服务提供者传入需要签名的消息摘要;客户端中的签名服务提供者利用签名服务接口,在硬件加密卡完成客户端私钥对消息摘要的签名,并将已签名的消息摘要至返回客户端的JSSE框架。
2.如权利要求1所述一种创建安全连接的方法,其特征在于,所述服务器端从其JSSE 框架获取私钥、证书以及已签名的消息摘要的具体过程为服务器端的JSSE框架从本地的 JKS文件中获取到其私钥和证书,还要生成消息摘要,并用私钥签名该消息摘要,从而得到 已签名的消息摘要。
3.如权利要求1或2所述的一种安全连接的创建方法,其特征在于,密钥服务接口将虚 拟私钥返回给客户端的JSSE框架后,本地还记录该虚拟私钥与客户端证书中公钥的对应 关系;客户端的JSSE框架向签名服务提供者传入的需要签名的消息摘要后,签名服务提供 者记录JSSE框架传入的需要签名的消息摘要与该虚拟私钥的对应关系,并根据所述需要 签名的消息摘要与该虚拟私钥的对应关系,将需要签名的消息摘要传送至对应的硬件加密 卡中进行签名。
4.如权利要求1所述的一种安全连接的创建方法,其特征在于,客户端的签名服务提 供者需要将名称为“Signature. NONEwithRSA"的使用硬件实现的签名类注册到JCA框架 中,客户端的签名服务接口使用Windows CSP实现的签名服务接口模块的RSA签名函数进 行签名。
5.用于创建安全连接的客户端设备,其特征在于,包括JSSE框架模块、由JCA框架自 定义的密钥管理服务提供者模块、由JCA框架自定义的签名服务提供者模块、由JNI封装 Windows CSP的安全服务接口模块;所述安全服务接口模块包括密钥服务接口模块、签名服 务接口模块;所述JSSE框架模块用于,获取服务器端的证书以及已签名的消息摘要,用JAVA实现与 服务器端的SSL连接;所述密钥管理服务提供者模块用于,将密钥服务接口注册到JCA框架,通过密钥服务2接口模块获取客户端证书信息,临时构造一个虚拟私钥,将客户端证书信息与虚拟私钥一 同返回给JSSE框架;所述签名服务提供者模块用于,将签名服务接口注册到JCA框架中,接收到JSSE框架 传入的需要签名的消息摘要后,将需要签名的消息摘要传入签名服务接口模块,通过签名 服务接口模块获取已签名的消息摘要,并将已签名的消息摘要返回客户端的JSSE框架; 所述密钥服务接口模块用于,在Windows本地证书库中读取硬件加密卡的证书信息; 所述签名服务接口模块用于,在硬件加密卡中完成客户端私钥对消息摘要的RSA签名。
6.如权利要求5所述用于创建安全连接的客户端设备,其特征在于,当密钥服务接口 模块将虚拟私钥返回给JSSE框架后,本地还记录该虚拟私钥与客户端证书中公钥的对应 关系;所述签名服务提供者模块还用于,当JSSE框架向签名服务提供者模块传入的需要签 名的消息摘要后,签名服务提供者模块记录JSSE框架传入的需要签名的消息摘要与该虚 拟私钥的对应关系,并根据所述需要签名的消息摘要与该虚拟私钥的对应关系,将需要签 名的消息摘要传送至签名服务接口模块中对应的硬件加密卡中进行签名。
7.如权利要求5所述用于创建安全连接的客户端设备,其特征在于,签名服务提供者 模块将客户端的签名服务接口以名称“Signature. NONEwithRSA"注册到JCA框架中,而客 户端的签名服务接口模块使用硬件加密卡中相同的RSA签名函数实现签名。
全文摘要
本发明提供一种支持使用硬件加密卡来创建SSL连接的方法,以及实现该方法的客户端设备。客户端的JSSE框架获取服务器端的证书以及已签名的消息摘要的具体过程为客户端中的密钥管理服务提供者利用密钥服务接口,从硬件加密卡中读取客户端证书信息,并临时构造一个虚拟私钥,将客户端证书信息与虚拟私钥一同返回给客户端的JSSE框架;客户端的JSSE框架获得证书信息,生成消息摘要,并向签名服务提供者传入需要签名的消息摘要;客户端中的签名服务提供者利用签名服务接口,在硬件加密卡完成客户端私钥对消息摘要的签名,并将已签名的消息摘要至返回客户端的JSSE框架。
文档编号H04L9/32GK101883122SQ20101024127
公开日2010年11月10日 申请日期2010年7月30日 优先权日2010年7月30日
发明者杨斌, 郑昌宏 申请人:迈普通信技术股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1