專利名稱:安全連接創(chuàng)建方法以及用于創(chuàng)建安全連接的客戶端設(shè)備的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及JSSE (Java安全套接字?jǐn)U展)技術(shù)領(lǐng)域,尤其設(shè)計(jì)使用JSSE接口控制 創(chuàng)建安全連接的技術(shù)。
背景技術(shù):
SSL (安全套接層,Secure Sockets Layer)是 Netscape 公司在 1994 年開發(fā)的,最 初用于WEB(互聯(lián)網(wǎng))瀏覽器,為瀏覽器與服務(wù)器間的數(shù)據(jù)傳遞提供安全保障,提供了加密、 來源認(rèn)證和數(shù)據(jù)完整性的功能,可以被簡單的看作是安全的TCP(傳輸控制協(xié)議)連接。現(xiàn) 在SSL3. 0得到了普遍的使用,它的改進(jìn)版TLS (傳輸層安全)已經(jīng)成為互聯(lián)網(wǎng)標(biāo)準(zhǔn)。JSSE是 Java為控制SSL連接提供的一個(gè)框架(Framework),即JSSE是用于Java實(shí)現(xiàn)SSL編程的, 通過使用JSSE,開發(fā)人員可以在客戶端和服務(wù)器之間通過TCP/IP協(xié)議安全地傳輸數(shù)據(jù)。目前JSSE已經(jīng)成為J2SE (Java2標(biāo)準(zhǔn)版)1. 4版本中的標(biāo)準(zhǔn)組件,支持SSL 3. 0。 在構(gòu)建基于套接字的JAVAC/S (客戶端/服務(wù)器端)程序時(shí),可以通過添加對(duì)SSL的支持來 保障數(shù)據(jù)安全和完整。在服務(wù)器端與客戶端間的SSL連接過程如下a、服務(wù)器端、客戶端各自的JSSE框架初始化SSL上下文(SSL上下文包含創(chuàng)建SSL 連接過程中需要的數(shù)據(jù)和方法等);b、服務(wù)器端、客戶端各自的JSSE框架將從本地的密碼保護(hù)文件(JKS文件 JavaKeyStore,用于保存私鑰和證書信息)中獲取到私鑰和證書后,生成消息摘要(哈希 值),并用私鑰簽名該消息摘要;C、服務(wù)器端、客戶端各自的JSSE框架將證書、已簽名的消息摘要發(fā)送給對(duì)方;d、服務(wù)器端、客戶端各自的JSSE框架利用接收到的證書驗(yàn)證接收到的已簽名的 消息摘要,驗(yàn)證成功后,服務(wù)器端的JSSE框架生成一個(gè)對(duì)稱加密密鑰發(fā)給客戶端;e、服務(wù)器端、客戶端的JSSE框架使用該對(duì)稱加密密鑰加解密通信數(shù)據(jù),雙方建立 數(shù)據(jù)通信。在使用JSSE框架創(chuàng)建SSL連接并且要求進(jìn)行雙向驗(yàn)證時(shí),服務(wù)器端和客戶端在 初始化SSL上下文時(shí)需要提供一個(gè)密碼保護(hù)文件(JKS文件),SSL上下文對(duì)象從密碼保護(hù) 文件中獲取到私鑰和證書后,在SSL協(xié)商過程中,雙方各自將證書發(fā)送給對(duì)方,JSSE框架在 SSL協(xié)商過程中,客戶端使用MD5 WithSHA算法(一種哈希算法,用于進(jìn)行SSL3. 0客戶端認(rèn) 證)生成一個(gè)消息摘要(消息摘要即為一個(gè)哈希值),然后用客戶端私鑰對(duì)這個(gè)消息摘要哈 希值進(jìn)行簽名(用客戶端私鑰對(duì)這個(gè)哈希值進(jìn)行加密),客戶端將該已簽名的消息摘要發(fā) 送給服務(wù)器端。服務(wù)器端使用從客戶端收到的證書驗(yàn)證這個(gè)數(shù)字簽名服務(wù)器端從客戶端的證書 中得到客戶端的公鑰與消息摘要的哈希算法,同樣使用MD5 WithSHA對(duì)收到已簽名的消息 摘要進(jìn)行哈希運(yùn)算,得到一個(gè)消息摘要,并使用公鑰解密已簽名的哈希值,并判斷服務(wù)器端 自身運(yùn)算得到的消息摘要與解密后的哈希值是否一致,如是,則驗(yàn)證通過,如否,則驗(yàn)證失敗,驗(yàn)證通過之后服務(wù)器端生成一個(gè)對(duì)稱加密的通訊密鑰發(fā)給客戶端,之后雙方就使用這 個(gè)密鑰加解密數(shù)據(jù),實(shí)現(xiàn)雙方通信數(shù)據(jù)的加密傳輸。JSSE框架的原理是使用軟件實(shí)現(xiàn)數(shù)據(jù)的加解密和完整性,這種解決方式雖然使用 簡單,升級(jí)容易,但對(duì)于在某些對(duì)客戶端私鑰安全性要求比較高的情況下,JSSE框架中用文 件保存私鑰的方式就不能滿足需要,因?yàn)槲募潜容^容易復(fù)制和獲取到,如對(duì)與電子商務(wù)、 電子政務(wù)之類對(duì)安全性要求非常高的應(yīng)用來說,軟件加密顯然存在安全強(qiáng)度不夠及性能差 等問題。硬件加密卡不僅具有證書存貯、數(shù)字簽名、數(shù)據(jù)加密等安全功能,能支持多種通 用的不對(duì)稱加密算法、對(duì)稱算法和哈希算法,可以為企業(yè)管理信息系統(tǒng)、電子設(shè)備、電子商 務(wù)、網(wǎng)絡(luò)安全、身份識(shí)別、密鑰管理等領(lǐng)域提供一套完整、安全的解決方案,目前很多USB key (利用USB存儲(chǔ)加密數(shù)據(jù))、電子鑰匙等就屬于這類產(chǎn)品。因此,發(fā)明人經(jīng)過研究發(fā)現(xiàn),有必要提供一種支持使用硬件加密卡的JSSE框架技 術(shù)來創(chuàng)建SSL連接的,以解決現(xiàn)有技術(shù)中存在的問題。
發(fā)明內(nèi)容
本發(fā)明所要解決的技術(shù)問題是,提供一種支持使用硬件加密卡來創(chuàng)建SSL連接的 方法,以及實(shí)現(xiàn)該方法的客戶端設(shè)備。本發(fā)明為解決上述技術(shù)問題所采用的技術(shù)方案是,一種創(chuàng)建安全連接的方法,包 括服務(wù)器端、客戶端各自的JSSE框架獲取到各自的私鑰、證書以及已簽名的消息摘 要;并將各自的證書、已簽名的消息摘要發(fā)送給對(duì)方;服務(wù)器端、客戶端各自的JSSE框架利用接收到的證書驗(yàn)證接收到的已簽名的消 息摘要,驗(yàn)證成功后,服務(wù)器端的JSSE框架生成一個(gè)對(duì)稱加密密鑰發(fā)給客戶端;服務(wù)器端、 客戶端雙方建立數(shù)據(jù)通信,均使用該對(duì)稱加密密鑰加解密通信數(shù)據(jù);所述客戶端使用JAVA本地調(diào)用技術(shù)封裝Windows CSP的安全服務(wù)接口函數(shù),安 全服務(wù)接口包括密鑰服務(wù)接口、簽名服務(wù)接口 ;客戶端的JAVA加密系統(tǒng)框架自定義密鑰管 理服務(wù)提供者與簽名服務(wù)提供者,并將所述密鑰管理服務(wù)提供者與簽名服務(wù)提供者注冊到 JAVA加密系統(tǒng)框架中;其中,客戶端的JSSE框架獲取服務(wù)器端的證書以及已簽名的消息摘要的具體過 程為客戶端中的密鑰管理服務(wù)提供者利用密鑰服務(wù)接口,從硬件加密卡中讀取客戶端 證書信息,并臨時(shí)構(gòu)造一個(gè)虛擬私鑰,將客戶端證書信息與虛擬私鑰一同返回給客戶端的 JSSE框架;客戶端的JSSE框架獲得證書信息,生成消息摘要,并向簽名服務(wù)提供者傳入需要 簽名的消息摘要;客戶端中的簽名服務(wù)提供者利用簽名服務(wù)接口,在硬件加密卡完成客戶端私鑰對(duì) 消息摘要的簽名,并將已簽名的消息摘要至返回客戶端的JSSE框架。申請人:發(fā)現(xiàn)JSSE框架不支持硬件加密卡的原因如下(1)硬件加密卡中的證書信息無法被按照J(rèn)SSE定義的接口返回給JSSE框架;
(2)因?yàn)镴SSE框架是在創(chuàng)建SSL連接前通過載入密碼保護(hù)文件(JKS文件)獲取私 鑰和證書并保存在SSL上下文中,而硬件加密卡中的私鑰是無法取出,更無法封裝成JSSE 框架需要的私鑰對(duì)象。目前,大部分硬件加密卡都是按照微軟的Windows CryptoAPI標(biāo)準(zhǔn)實(shí)現(xiàn)加解密服 務(wù),Windows CryptoAPI是微軟定義好的一組加密接口函數(shù)。Windows CSP (Windows加密 服務(wù)提供者)是微軟公司用來在Windows平臺(tái)上提供第三方加密模塊的底層加密接口標(biāo) 準(zhǔn),用于管理硬件或軟件形式的加密設(shè)備,實(shí)現(xiàn)數(shù)據(jù)加密、解密,數(shù)字簽名、驗(yàn)證和消息摘要 (哈希運(yùn)算)等,這些加密接口函數(shù)的具體實(shí)現(xiàn)者,可以是軟件或者硬件。對(duì)于運(yùn)行Windows操作系統(tǒng)的客戶端,本發(fā)明使用JNI (JAVA本地調(diào)用)技術(shù)封裝 Windows CSP的相關(guān)安全服務(wù)接口函數(shù)以供JAVA程序使用。這里的安全服務(wù)接口包括讀 取Windows本地證書庫中的所有證書信息的密鑰服務(wù)接口、以及使用指定容器對(duì)數(shù)據(jù)進(jìn)行 RSA(非對(duì)稱的公鑰加密算法)簽名的簽名服務(wù)接口。將JSSE與windows CSP結(jié)合起來使用 雖然失去了平臺(tái)獨(dú)立性,但是可以有效的使用Windows CryptoAPI標(biāo)準(zhǔn)加密接口函數(shù),從而 操縱硬件加密卡提供加密服務(wù),對(duì)于只運(yùn)行在Windows系統(tǒng)的JAVA程序來說是一個(gè)不錯(cuò)的 安全解決方式。另一方面,本發(fā)明為了使得JSSE框架按照正常的SSL流程進(jìn)行,滿足JSSE 框架獲取客戶端私鑰的步驟,臨時(shí)構(gòu)造一個(gè)符合JSSE框架要求的虛擬私鑰返回給JSSE框 架,以“欺騙”JSSE框架,使得JSSE框架得以正常進(jìn)行SSL協(xié)商。事實(shí)上這個(gè)虛擬私鑰是不 可用的,真正與公鑰對(duì)應(yīng)的私鑰保存在硬件加密卡中無法取出。當(dāng)需要使用真正的私鑰進(jìn) 行簽名時(shí),調(diào)用封裝好的簽名服務(wù)接口處理。進(jìn)一步的,在JSSE框架使用虛擬私鑰的時(shí)候,可以根據(jù)保存的公鑰與構(gòu)造私鑰的 對(duì)應(yīng)關(guān)系知道當(dāng)前JSSE框架是想用哪一個(gè)私鑰簽名,這樣就可以找到正確的硬件加密卡 進(jìn)行硬件簽名了 密鑰服務(wù)接口將虛擬私鑰返回給客戶端的JSSE框架后,本地還記錄該虛 擬私鑰與客戶端證書中公鑰的對(duì)應(yīng)關(guān)系;客戶端的JSSE框架向簽名服務(wù)提供者傳入的需 要簽名的消息摘要后,簽名服務(wù)提供者記錄JSSE框架傳入的需要簽名的消息摘要與該虛 擬私鑰的對(duì)應(yīng)關(guān)系,并根據(jù)所述需要簽名的消息摘要與該虛擬私鑰的對(duì)應(yīng)關(guān)系,將需要簽 名的消息摘要傳送至對(duì)應(yīng)的硬件加密卡中進(jìn)行簽名。進(jìn)一步的,為了完成硬件簽名無縫替換軟件簽名,客戶端的簽名服務(wù)提供者需要 將名稱為“Signature. NONEwithRSA"的使用硬件實(shí)現(xiàn)的簽名類注冊到JCA框架中,客戶端 的簽名服務(wù)接口使用Windows CSP實(shí)現(xiàn)的簽名服務(wù)接口模塊的RSA簽名函數(shù)進(jìn)行簽名。本發(fā)明的另一目的是,提供一種實(shí)現(xiàn)上述創(chuàng)建安全連接方法的客戶端設(shè)備,包括 JSSE框架模塊、JAVA加密系統(tǒng)框架模塊、由JAVA加密系統(tǒng)框架自定義的密鑰管理服務(wù)提供 者模塊、由JAVA加密系統(tǒng)框架自定義的簽名服務(wù)提供者模塊、利用JAVA本地調(diào)用技術(shù)封裝 Windows CSP的安全服務(wù)接口模塊;所述安全服務(wù)接口模塊包括密鑰服務(wù)接口模塊、簽名服 務(wù)接口模塊;JSSE框架模塊用于,獲取服務(wù)器端的證書以及已簽名的消息摘要,用JAVA實(shí)現(xiàn)與 服務(wù)器端的SSL連接;密鑰管理服務(wù)提供者模塊用于,將密鑰服務(wù)接口注冊到JCA框架,通過密鑰服務(wù) 接口模塊獲取客戶端證書信息,臨時(shí)構(gòu)造一個(gè)虛擬私鑰,將客戶端證書信息與虛擬私鑰一 同返回給JSSE框架;
簽名服務(wù)提供者模塊用于,將簽名服務(wù)接口注冊到JCA框架中,接收到JSSE框架 傳入的需要簽名的消息摘要后,將需要簽名的消息摘要傳入簽名服務(wù)接口模塊,通過簽名 服務(wù)接口模塊獲取已簽名的消息摘要,并將已簽名的消息摘要返回客戶端的JSSE框架;密鑰服務(wù)接口模塊用于,在Windows本地證書庫中讀取硬件加密卡的證書信息;簽名服務(wù)接口模塊用于,在硬件加密卡完成客戶端私鑰對(duì)消息摘要的簽名。進(jìn)一步的,當(dāng)密鑰服務(wù)接口模塊將虛擬私鑰返回給JSSE框架后,本地還記錄該虛 擬私鑰與客戶端證書中公鑰的對(duì)應(yīng)關(guān)系;簽名服務(wù)提供者模塊還用于,當(dāng)JSSE框架向簽名 服務(wù)提供者模塊傳入需要簽名的消息摘要后,并根據(jù)所述需要簽名的消息摘要與該虛擬私 鑰對(duì)應(yīng)關(guān)系,將需要簽名的消息摘要傳送至簽名服務(wù)接口模塊中對(duì)應(yīng)的硬件加密卡中進(jìn)行 簽名。進(jìn)一步的,簽名服務(wù)提供者模塊將客戶端的簽名服務(wù)接口以名稱“Signature. NONEwithRSA”注冊到JCA框架中,而客戶端的簽名服務(wù)接口模塊使用硬件加密卡中相同的 RSA簽名函數(shù)實(shí)現(xiàn)簽名。本發(fā)明的有益效果是,讓JSSE框架應(yīng)用能夠使用硬件加密卡簽名,使應(yīng)用系統(tǒng)關(guān) 鍵數(shù)據(jù)的安全性得到更好的保障,具有更好的安全性和擴(kuò)展性。
圖1為創(chuàng)建安全連接的系統(tǒng)示意圖;圖2為客戶端示意圖。
具體實(shí)施例方式如圖1所示,SSL建連過程中JAVA服務(wù)器端無需改動(dòng),仍然按照常規(guī)方式使用JKS 文件初始化SSL上下文對(duì)象,同時(shí)設(shè)置需要驗(yàn)證客戶端選項(xiàng),返回SSL服務(wù)器端套接字對(duì)象 監(jiān)聽連接請求,等候客戶端連接;運(yùn)行Windows操作系統(tǒng)的JAVA客戶端將JSSE框架與硬件加密卡結(jié)合起來完成 SSL連接的創(chuàng)建和數(shù)據(jù)傳輸加密的具體方法如下使用JNI技術(shù)(JAVA本地調(diào)用技術(shù))封裝Windows CSP的安全服務(wù)接口函數(shù),包括 用于讀取Windows本地證書庫的密鑰服務(wù)接口函數(shù)、用于使用指定容器對(duì)數(shù)據(jù)進(jìn)行RSA簽 名的簽名服務(wù)接口函數(shù)、加解密等接口函數(shù),形成一個(gè)本地動(dòng)態(tài)鏈接庫和對(duì)應(yīng)的供JAVA使 用的封裝類;JAVA客戶端實(shí)現(xiàn)自定義的密鑰管理服務(wù)提供者,用密鑰服務(wù)接口讀取Windows本 地證書庫中的所有證書信息,將硬件加密卡中的證書和公鑰返回給JSSE框架,同時(shí)構(gòu)造一 個(gè)合法的RSA私鑰返回給JSSE框架,使JSSE框架能獲得客戶端完整的密鑰和證書信息繼 續(xù)與服務(wù)器進(jìn)行SSL協(xié)商過程;JAVA客戶端實(shí)現(xiàn)自定義的簽名服務(wù)提供者,記錄JSSE框架傳入的需要簽名的消 息摘要,用簽名服務(wù)接口對(duì)它進(jìn)行RSA簽名,并返回?cái)?shù)字簽名值;JAVA客戶端啟動(dòng)時(shí)向JCA框架(JAVA加密系統(tǒng)框架)注冊實(shí)現(xiàn)的密鑰管理服務(wù)提 供者、簽名服務(wù)提供者。JAVA客戶端完成上面的實(shí)現(xiàn)后即可使用密鑰管理服務(wù)提供者初始化SSL上下文對(duì)象,創(chuàng)建SSL套接字與JAVA服務(wù)器建立SSL連接了。如圖2所示,JAVA客戶端除了包括用于實(shí)現(xiàn)與JAVA服務(wù)器端的SSL連接的JSSE 框架模塊之外,為了能在JSSE框架中使用Windows CSP的接口,在JAVA客戶端還需要實(shí)現(xiàn) 幾個(gè)JAVA類以及Windows CSP接口的封裝實(shí)現(xiàn),需要增加的模塊如下1、密鑰服務(wù)接口模塊繼承自類KeyManagerFactorySpi,用于返回給JSSE框架一 個(gè)X509KeyManager (決定使用哪一個(gè)基于X509證書的密鑰來驗(yàn)證本地安全套接字的類) 的實(shí)現(xiàn)類,這個(gè)實(shí)現(xiàn)類將調(diào)用使用JNI技術(shù)封裝好的Windows CSP接口為JSSE框架返回建 連需要的證書等信息,同時(shí)實(shí)現(xiàn)返回私鑰方法,返回一個(gè)虛擬的RSA私鑰用以“欺騙” JSSE 框架,因?yàn)閷?duì)于USBKEY等硬件加密卡產(chǎn)品,它存儲(chǔ)了證書和密鑰,但是私鑰是不能輸出的, 所有需要私鑰的計(jì)算都必須在硬件產(chǎn)品內(nèi)完成,所以此處臨時(shí)生成一個(gè)RSA私鑰,返回給 框架,保證框架能繼續(xù)后面的協(xié)商過程。當(dāng)需要使用私鑰計(jì)算時(shí),調(diào)用封裝好的Windows CSP接口處理;2、簽名服務(wù)接口模塊繼承自類java. security. SignatureSpi (該類用于為應(yīng)用 程序提供數(shù)字簽名算法功能的類定義服務(wù)提供程序接口),因?yàn)楸景l(fā)明解決的是JAVA客戶 端使用硬件產(chǎn)品與使用標(biāo)準(zhǔn)JKS文件的JAVA服務(wù)器建立SSL連接,所以這個(gè)類只需要對(duì)如 下幾個(gè)關(guān)鍵步驟進(jìn)行特殊處理為簽名初始化RSA簽名引擎JSSE框架在本步驟會(huì)把之前構(gòu)造的RSA私鑰傳進(jìn) 來,這個(gè)私鑰就是上述的密鑰提供者返回給JSSE框架的客戶端私鑰,沒有實(shí)際用處;更新數(shù)據(jù)到簽名或確認(rèn)操作JSSE框架會(huì)將需要簽名的消息摘要(哈希值)傳 入,這個(gè)哈希值需要記錄下來并在下面的函數(shù)中對(duì)其簽名;執(zhí)行簽名調(diào)用Windows CSP封裝接口對(duì)上面更新進(jìn)來的哈希值進(jìn)行RSA簽名操 作并返回?cái)?shù)字簽名。3、密鑰管理服務(wù)提供者模塊即實(shí)現(xiàn)密鑰管理服務(wù)提供者類,將其以名稱 “MSKMF”(〃 MSKMF",KeyManagerFactory. getlnstance 根據(jù)指定的提供程序?yàn)橹付ǖ拿?鑰管理算法生成基于密鑰內(nèi)容源的密鑰管理器的工廠的對(duì)象)注冊到JCA框架中。在客戶 端初始化SSL上下文對(duì)象時(shí)將通過KeyManagerFactory. getlnstance獲取自定義的Key管 理服務(wù)實(shí)現(xiàn),完成JSSE框架與Windows本地證書庫的集成。USBKEY就是一個(gè)CSP,它安裝 了驅(qū)動(dòng)后就可以被windows識(shí)別出來,把存儲(chǔ)在key中的證書信息裝載在window本地證書 庫中。第三方軟件可以通過本地證書庫訪問Key中的證書。4.簽名服務(wù)提供者模塊即實(shí)現(xiàn)簽名提供者類,將Signature. NONEwithRSA(RSA 簽名實(shí)現(xiàn)者)的實(shí)現(xiàn)類指定為我們上面實(shí)現(xiàn)的簽名服務(wù)實(shí)現(xiàn)類,因?yàn)镴SSE框架將使用這個(gè) 實(shí)現(xiàn)類進(jìn)行簽名操作,所以要想使用硬件產(chǎn)品中的簽名服務(wù)替換JSSE框架的軟件簽名,這 一步是必須的。接下來把此簽名服務(wù)提供者注冊到JCA框架中集成。Windows CSP封裝主要用于從Windows本地證書庫中獲取證書和對(duì)SSL建連過程 中的哈希值進(jìn)行簽名。這里的關(guān)鍵點(diǎn)在于對(duì)SSL建連過程中的哈希值進(jìn)行的簽名,由于私 鑰存儲(chǔ)于硬件加密卡中并且不能被導(dǎo)出,所以這個(gè)簽名過程需要在硬件加密卡中進(jìn)行,簽 名時(shí)需要采用CryptAcquireCertif icatePrivateKey函數(shù)創(chuàng)建加密服務(wù)提供者句柄,使用 CryptCreateHash函數(shù)創(chuàng)建哈希對(duì)象時(shí),需要指定ALG_ID參數(shù)(算法類型定義,其本質(zhì)為無 符號(hào)整型)為CALG_SSL3_SHAMD5 ( 一種哈希算法定義,作用是進(jìn)行SSL3客戶端認(rèn)證),否則無法與前面步驟所述的NONEwithRSA簽名算法進(jìn)行配合,簽名結(jié)果在服務(wù)器端將無法驗(yàn) 證。
權(quán)利要求
一種創(chuàng)建安全連接的方法,包括步驟服務(wù)器端、客戶端各自的JSSE框架獲取到各自的私鑰、證書以及已簽名的消息摘要;并將各自的證書、已簽名的消息摘要發(fā)送給對(duì)方;服務(wù)器端、客戶端各自的JSSE框架利用接收到的證書驗(yàn)證接收到的已簽名的消息摘要,驗(yàn)證成功后,服務(wù)器端的JSSE框架生成一個(gè)對(duì)稱加密密鑰發(fā)給客戶端;服務(wù)器端、客戶端雙方建立數(shù)據(jù)通信,均使用該對(duì)稱加密密鑰加解密通信數(shù)據(jù);其特征在于,所述客戶端使用JNI封裝Windows CSP的安全服務(wù)接口函數(shù),安全服務(wù)接口包括密鑰服務(wù)接口、簽名服務(wù)接口;客戶端按照J(rèn)CA框架自定義的密鑰管理服務(wù)提供者與簽名服務(wù)提供者,并將所述密鑰管理服務(wù)提供者與簽名服務(wù)提供者注冊到JCA框架中;所述客戶端的JSSE框架獲取其私鑰、證書以及已簽名的消息摘要的具體過程為客戶端中的密鑰管理服務(wù)提供者利用密鑰服務(wù)接口,從硬件加密卡中讀取客戶端證書信息,并臨時(shí)構(gòu)造一個(gè)虛擬私鑰,將客戶端證書信息與虛擬私鑰一同返回給客戶端的JSSE框架;客戶端的JSSE框架獲得證書信息,還要生成消息摘要,并向簽名服務(wù)提供者傳入需要簽名的消息摘要;客戶端中的簽名服務(wù)提供者利用簽名服務(wù)接口,在硬件加密卡完成客戶端私鑰對(duì)消息摘要的簽名,并將已簽名的消息摘要至返回客戶端的JSSE框架。
2.如權(quán)利要求1所述一種創(chuàng)建安全連接的方法,其特征在于,所述服務(wù)器端從其JSSE 框架獲取私鑰、證書以及已簽名的消息摘要的具體過程為服務(wù)器端的JSSE框架從本地的 JKS文件中獲取到其私鑰和證書,還要生成消息摘要,并用私鑰簽名該消息摘要,從而得到 已簽名的消息摘要。
3.如權(quán)利要求1或2所述的一種安全連接的創(chuàng)建方法,其特征在于,密鑰服務(wù)接口將虛 擬私鑰返回給客戶端的JSSE框架后,本地還記錄該虛擬私鑰與客戶端證書中公鑰的對(duì)應(yīng) 關(guān)系;客戶端的JSSE框架向簽名服務(wù)提供者傳入的需要簽名的消息摘要后,簽名服務(wù)提供 者記錄JSSE框架傳入的需要簽名的消息摘要與該虛擬私鑰的對(duì)應(yīng)關(guān)系,并根據(jù)所述需要 簽名的消息摘要與該虛擬私鑰的對(duì)應(yīng)關(guān)系,將需要簽名的消息摘要傳送至對(duì)應(yīng)的硬件加密 卡中進(jìn)行簽名。
4.如權(quán)利要求1所述的一種安全連接的創(chuàng)建方法,其特征在于,客戶端的簽名服務(wù)提 供者需要將名稱為“Signature. NONEwithRSA"的使用硬件實(shí)現(xiàn)的簽名類注冊到JCA框架 中,客戶端的簽名服務(wù)接口使用Windows CSP實(shí)現(xiàn)的簽名服務(wù)接口模塊的RSA簽名函數(shù)進(jìn) 行簽名。
5.用于創(chuàng)建安全連接的客戶端設(shè)備,其特征在于,包括JSSE框架模塊、由JCA框架自 定義的密鑰管理服務(wù)提供者模塊、由JCA框架自定義的簽名服務(wù)提供者模塊、由JNI封裝 Windows CSP的安全服務(wù)接口模塊;所述安全服務(wù)接口模塊包括密鑰服務(wù)接口模塊、簽名服 務(wù)接口模塊;所述JSSE框架模塊用于,獲取服務(wù)器端的證書以及已簽名的消息摘要,用JAVA實(shí)現(xiàn)與 服務(wù)器端的SSL連接;所述密鑰管理服務(wù)提供者模塊用于,將密鑰服務(wù)接口注冊到JCA框架,通過密鑰服務(wù)2接口模塊獲取客戶端證書信息,臨時(shí)構(gòu)造一個(gè)虛擬私鑰,將客戶端證書信息與虛擬私鑰一 同返回給JSSE框架;所述簽名服務(wù)提供者模塊用于,將簽名服務(wù)接口注冊到JCA框架中,接收到JSSE框架 傳入的需要簽名的消息摘要后,將需要簽名的消息摘要傳入簽名服務(wù)接口模塊,通過簽名 服務(wù)接口模塊獲取已簽名的消息摘要,并將已簽名的消息摘要返回客戶端的JSSE框架; 所述密鑰服務(wù)接口模塊用于,在Windows本地證書庫中讀取硬件加密卡的證書信息; 所述簽名服務(wù)接口模塊用于,在硬件加密卡中完成客戶端私鑰對(duì)消息摘要的RSA簽名。
6.如權(quán)利要求5所述用于創(chuàng)建安全連接的客戶端設(shè)備,其特征在于,當(dāng)密鑰服務(wù)接口 模塊將虛擬私鑰返回給JSSE框架后,本地還記錄該虛擬私鑰與客戶端證書中公鑰的對(duì)應(yīng) 關(guān)系;所述簽名服務(wù)提供者模塊還用于,當(dāng)JSSE框架向簽名服務(wù)提供者模塊傳入的需要簽 名的消息摘要后,簽名服務(wù)提供者模塊記錄JSSE框架傳入的需要簽名的消息摘要與該虛 擬私鑰的對(duì)應(yīng)關(guān)系,并根據(jù)所述需要簽名的消息摘要與該虛擬私鑰的對(duì)應(yīng)關(guān)系,將需要簽 名的消息摘要傳送至簽名服務(wù)接口模塊中對(duì)應(yīng)的硬件加密卡中進(jìn)行簽名。
7.如權(quán)利要求5所述用于創(chuàng)建安全連接的客戶端設(shè)備,其特征在于,簽名服務(wù)提供者 模塊將客戶端的簽名服務(wù)接口以名稱“Signature. NONEwithRSA"注冊到JCA框架中,而客 戶端的簽名服務(wù)接口模塊使用硬件加密卡中相同的RSA簽名函數(shù)實(shí)現(xiàn)簽名。
全文摘要
本發(fā)明提供一種支持使用硬件加密卡來創(chuàng)建SSL連接的方法,以及實(shí)現(xiàn)該方法的客戶端設(shè)備??蛻舳说腏SSE框架獲取服務(wù)器端的證書以及已簽名的消息摘要的具體過程為客戶端中的密鑰管理服務(wù)提供者利用密鑰服務(wù)接口,從硬件加密卡中讀取客戶端證書信息,并臨時(shí)構(gòu)造一個(gè)虛擬私鑰,將客戶端證書信息與虛擬私鑰一同返回給客戶端的JSSE框架;客戶端的JSSE框架獲得證書信息,生成消息摘要,并向簽名服務(wù)提供者傳入需要簽名的消息摘要;客戶端中的簽名服務(wù)提供者利用簽名服務(wù)接口,在硬件加密卡完成客戶端私鑰對(duì)消息摘要的簽名,并將已簽名的消息摘要至返回客戶端的JSSE框架。
文檔編號(hào)H04L9/32GK101883122SQ20101024127
公開日2010年11月10日 申請日期2010年7月30日 優(yōu)先權(quán)日2010年7月30日
發(fā)明者楊斌, 鄭昌宏 申請人:邁普通信技術(shù)股份有限公司