本發(fā)明涉及互聯(lián)網(wǎng)技術(shù)領(lǐng)域,尤其涉及一種加速設(shè)備以及基于加速設(shè)備獲取會話秘鑰的方法。
背景技術(shù):
數(shù)據(jù)壓縮是廣域網(wǎng)加速的基本手段之一,經(jīng)過ssl(securesocketslayer,安全套接層)加密的數(shù)據(jù)如果想要通過數(shù)據(jù)壓縮來獲得加速效果,那么必須先對數(shù)據(jù)進行解密。
目前加速ssl加密數(shù)據(jù)常用的方法是,參照圖1所示,客戶端處的加速設(shè)備代理服務(wù)端與真實的客戶端建立ssl連接1,服務(wù)端處的加速設(shè)備代理客戶端與真實的服務(wù)端建立ssl連接2,這樣就把原始的客戶端與服務(wù)端之間的一條ssl連接拆為了兩條ssl連接,而不同的ssl連接協(xié)商出的會話秘鑰是不一樣的,也就是說,客戶端與代理服務(wù)端的加速設(shè)備之間協(xié)商出會話秘鑰a,服務(wù)端與代理客戶端的加速設(shè)備之間協(xié)商出會話秘鑰b,兩臺加速設(shè)備在接收到加密數(shù)據(jù)時,分別需要通過各自的會話秘鑰將數(shù)據(jù)解密后,再壓縮傳輸,這就導(dǎo)致客戶端和服務(wù)端收發(fā)的解密前數(shù)據(jù)流發(fā)生了改變,即服務(wù)端接收到的解密前的數(shù)據(jù)流與客戶端發(fā)出的解密前的數(shù)據(jù)流不一致,此時,如果服務(wù)端上的應(yīng)用要校驗解密前數(shù)據(jù)流,或者要校驗協(xié)商出的會話秘鑰時就會出現(xiàn)校驗失敗的現(xiàn)象,從而導(dǎo)致應(yīng)用訪問異常。
技術(shù)實現(xiàn)要素:
本發(fā)明提供一種加速設(shè)備以及基于加速設(shè)備獲取會話秘鑰的方法,其主要目的在于解決現(xiàn)有加速ssl應(yīng)用技術(shù)中采用加速設(shè)備分別作為代理客戶端與代理服務(wù)端和真實的服務(wù)器與客戶端進行ssl握手時導(dǎo)致傳輸客戶端與服務(wù)端之間的數(shù)據(jù)時引起的數(shù)據(jù)流變化從而影響應(yīng)用正常訪問的技術(shù)問題。
為實現(xiàn)上述目的,本發(fā)明提供一種基于加速設(shè)備獲取會話秘鑰的方法,該基于加速設(shè)備獲取會話秘鑰的方法包括:
位于客戶端與服務(wù)端之間的加速設(shè)備攔截所述客戶端與所述服務(wù)端之間的ssl握手信息;
所述加速設(shè)備根據(jù)存儲的服務(wù)器私鑰以及攔截到的所述握手信息計算所述客戶端與所述服務(wù)端之間協(xié)商出的會話秘鑰;
所述加速設(shè)備存儲所述會話秘鑰,以供所述加速設(shè)備基于所述會話秘鑰對所述客戶端與所述服務(wù)端之間加密傳輸?shù)臄?shù)據(jù)進行解密和加密。
可選地,所述加速設(shè)備根據(jù)攔截到的所述握手信息獲取所述客戶端與所述服務(wù)端之間協(xié)商出的會話秘鑰的步驟包括:
所述加速設(shè)備解析所述握手信息獲取客戶端隨機數(shù)、服務(wù)端隨機數(shù)、ssl版本、ssl加密套件以及加密后的預(yù)主秘鑰;
基于獲取到的所述客戶端隨機數(shù)、服務(wù)端隨機數(shù)、ssl版本、ssl加密套件和加密后的預(yù)主秘鑰,以及所述服務(wù)器私鑰,基于ssl的rfc文檔計算出所述會話秘鑰。
可選地,所述位于客戶端與服務(wù)端之間的加速設(shè)備攔截所述客戶端與所述服務(wù)端之間的ssl握手信息的步驟包括:
所述加速設(shè)備獲取所述客戶端向所述服務(wù)端發(fā)起ssl握手請求的請求信息,從所述請求信息中獲取所述客戶端隨機數(shù);
在攔截到所述服務(wù)端對所述ssl握手請求的響應(yīng)信息時,從所述響應(yīng)信息中獲取所述服務(wù)端隨機數(shù)、所述ssl版本和所述ssl加密套件;
所述加速設(shè)備獲取所述客戶端在接收到所述響應(yīng)信息后向所述服務(wù)端發(fā)送的秘鑰交換信息,從所述秘鑰交換信息中獲取所述加密后的預(yù)主秘鑰。
可選地,所述加速設(shè)備包括與所述客戶端通信的第一加速設(shè)備,以及與所述服務(wù)端通信的第二加速設(shè)備;
所述加速設(shè)備存儲所述會話秘鑰的步驟之后,所述基于加速設(shè)備獲取會話秘鑰的方法還包括:
所述第一加速設(shè)備在接收到所述客戶端發(fā)送的加密后的數(shù)據(jù)時,通過所述會話秘鑰將所述數(shù)據(jù)解密,并將解密后的所述數(shù)據(jù)壓縮處理后發(fā)送至所述第二加速設(shè)備,所述第二加速設(shè)備將壓縮處理后的所述數(shù)據(jù)解壓縮后,基于所述會話秘鑰將解壓縮后的所述數(shù)據(jù)加密后發(fā)送至所述服務(wù)端;
或者,所述第二加速設(shè)備在接收到所述服務(wù)端發(fā)送的加密后的數(shù)據(jù)時,通過所述會話秘鑰將所述數(shù)據(jù)解密,并將解密后的所述數(shù)據(jù)壓縮處理后發(fā)送至所述第一加速設(shè)備,所述第一加速設(shè)備將壓縮處理后的所述數(shù)據(jù)解壓縮后,基于所述會話秘鑰將解壓縮后的所述數(shù)據(jù)加密后發(fā)送至所述客戶端。
可選地,所述會話秘鑰包括服務(wù)端驗證密鑰、客戶端驗證密鑰、服務(wù)端加密密鑰、客戶端加密密鑰、服務(wù)端初始化向量、客戶端初始化向量。
此外,為實現(xiàn)上述目的,本發(fā)明還提供一種加速設(shè)備,該加速設(shè)備包括:
數(shù)據(jù)攔截模塊,用于攔截所述客戶端與所述服務(wù)端之間的ssl握手信息,所述加速設(shè)備連接于所述客戶端與所述服務(wù)端之間;
秘鑰計算模塊,用于根據(jù)存儲的服務(wù)器私鑰以及攔截到的所述握手信息計算所述客戶端與所述服務(wù)端之間協(xié)商出的會話秘鑰;
秘鑰存儲模塊,用于存儲所述會話秘鑰,以供所述加速設(shè)備基于所述會話秘鑰對所述客戶端與所述服務(wù)端之間加密傳輸?shù)臄?shù)據(jù)進行解密和加密。
可選地,所述秘鑰計算模塊還用于:解析所述握手信息獲取客戶端隨機數(shù)、服務(wù)端隨機數(shù)、ssl版本、ssl加密套件以及加密后的預(yù)主秘鑰;以及,基于獲取到的所述客戶端隨機數(shù)、服務(wù)端隨機數(shù)、ssl版本、ssl加密套件和加密后的預(yù)主秘鑰,以及所述服務(wù)器私鑰,基于ssl的rfc文檔計算出所述會話秘鑰。
可選地,所述數(shù)據(jù)攔截模塊用于:獲取所述客戶端向所述服務(wù)端發(fā)起ssl握手請求的請求信息,從所述請求信息中獲取所述客戶端隨機數(shù);在攔截到所述服務(wù)端對所述ssl握手請求的響應(yīng)信息時,從所述響應(yīng)信息中獲取所述服務(wù)端隨機數(shù)、所述ssl版本和所述ssl加密套件;以及,獲取所述客戶端在接收到所述響應(yīng)信息后向所述服務(wù)端發(fā)送的秘鑰交換信息,從所述秘鑰交換信息中獲取所述加密后的預(yù)主秘鑰。
可選地,所述加速設(shè)備包括與所述客戶端通信的第一加速設(shè)備,以及與所述服務(wù)端通信的第二加速設(shè)備;所述第一加速設(shè)備包括第一解密模塊、第一壓縮模塊、第一解壓縮模塊以及第一加密模塊;所述第二加速設(shè)備包括第二解密模塊、第二壓縮模塊、第二解壓縮模塊以及第二加密模塊
所述第一解密模塊用于:在接收到所述客戶端發(fā)送的加密后的數(shù)據(jù)時,通過所述會話秘鑰將所述數(shù)據(jù)解密;
所述第一壓縮模塊用于:將解密后的所述數(shù)據(jù)壓縮處理后發(fā)送至所述第二加速設(shè)備,所述第二解壓縮模塊將壓縮處理后的所述數(shù)據(jù)解壓縮后,通過第二加密模塊基于所述會話秘鑰將解壓縮后的所述數(shù)據(jù)加密后發(fā)送至所述服務(wù)端;
所述第二解密模塊用于:在接收到所述服務(wù)端發(fā)送的加密后的數(shù)據(jù)時,通過所述會話秘鑰將所述數(shù)據(jù)解密;
所述第二壓縮模塊用于:將解密后的所述數(shù)據(jù)壓縮處理后發(fā)送至所述第一加速設(shè)備,所述第一解壓縮模塊將壓縮處理后的所述數(shù)據(jù)解壓縮后,通過第一加密模塊基于所述會話秘鑰將解壓縮后的所述數(shù)據(jù)加密后發(fā)送至所述客戶端。
可選地,所述會話秘鑰包括服務(wù)端驗證密鑰、客戶端驗證密鑰、服務(wù)端加密密鑰、客戶端加密密鑰、服務(wù)端初始化向量、客戶端初始化向量。
本發(fā)明提出的加速設(shè)備以及基于加速設(shè)備獲取會話秘鑰的方法,通過位于客戶端與服務(wù)端之間的加速設(shè)備攔截客戶端與服務(wù)端之間的ssl握手信息,并對ssl握手信息進行解析,并結(jié)合存儲的服務(wù)器私鑰計算出客戶端與服務(wù)端之間協(xié)商出的會話秘鑰并存儲所述會話秘鑰,客戶端與服務(wù)端之間的數(shù)據(jù)在通過加速設(shè)備進行壓縮傳輸時,可以通過會話秘鑰對加密傳輸?shù)臄?shù)據(jù)進行加密和解密,采用這樣的方式,客戶端與加速設(shè)備以及服務(wù)端之間實際上只建立了一條ssl連接,該條ssl連接產(chǎn)生了一個會話秘鑰,因此,在數(shù)據(jù)壓縮傳輸?shù)倪^程中不會改變原始數(shù)據(jù)流,如果服務(wù)端上的應(yīng)用要校驗解密前數(shù)據(jù)流,或者要校驗協(xié)商出的會話秘鑰時,可以成功校驗,即應(yīng)用可以成功訪問,解決了現(xiàn)有加速ssl應(yīng)用技術(shù)中采用加速設(shè)備分別作為代理服務(wù)端與代理客戶端和真實的服務(wù)器與客戶端進行ssl握手時導(dǎo)致傳輸客戶端與服務(wù)端之間的數(shù)據(jù)時引起的數(shù)據(jù)流變化從而影響應(yīng)用正常訪問的技術(shù)問題。
附圖說明
圖1為現(xiàn)有技術(shù)中客戶端、服務(wù)端以及加速設(shè)備之間的通信連接示意圖;
圖2為本發(fā)明基于加速設(shè)備獲取會話秘鑰的方法第一實施例的流程圖;
圖3為本發(fā)明基于加速設(shè)備獲取會話秘鑰的方法第一實施例中客戶端、服務(wù)端以及加速設(shè)備之間的通信連接示意圖;
圖4為本發(fā)明基于加速設(shè)備獲取會話秘鑰的方法第一實施例中攔截握手信息的過程的示意圖;
圖5為本發(fā)明加速設(shè)備第一實施例的功能模塊示意圖;
圖6為本發(fā)明加速設(shè)備第二實施例中第一加速設(shè)備的功能模塊示意圖;
圖7為本發(fā)明加速設(shè)備第二實施例中第二加速設(shè)備的功能模塊示意圖。
本發(fā)明目的的實現(xiàn)、功能特點及優(yōu)點將結(jié)合實施例,參照附圖做進一步說明。
具體實施方式
應(yīng)當理解,此處所描述的具體實施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
本發(fā)明提供一種基于加速設(shè)備獲取會話秘鑰的方法。參照圖2所示,為本發(fā)明基于加速設(shè)備獲取會話秘鑰的方法第一實施例的流程圖。
在本實施例中,該基于加速設(shè)備獲取會話秘鑰的方法包括:
步驟s10,位于客戶端與服務(wù)端之間的加速設(shè)備攔截所述客戶端與所述服務(wù)端之間的ssl握手信息。
步驟s20,所述加速設(shè)備根據(jù)存儲的服務(wù)器私鑰以及攔截到的所述握手信息計算所述客戶端與所述服務(wù)端之間協(xié)商出的會話秘鑰。
參照圖3所示,為本實施例中客戶端、服務(wù)端以及加速設(shè)備之間的通信連接示意圖。該實施例中分別為客戶端以及服務(wù)端提供一臺加速設(shè)備用于他們之間的數(shù)據(jù)壓縮傳輸,包括客戶端處的客戶端加速設(shè)備以及服務(wù)端處的服務(wù)端加速設(shè)備,這兩臺設(shè)備之間進行數(shù)據(jù)的壓縮傳輸,客戶端與服務(wù)端之間建立一條ssl連接,產(chǎn)生一個會話秘鑰c,以下實施例中所述的會話秘鑰均是指會話秘鑰c。在該實施例中,可以由客戶端加速設(shè)備或者服務(wù)端加速設(shè)備中的任意一臺設(shè)備攔截ssl握手信息并解析獲取到會話秘鑰后傳輸給另一臺,或者可以由兩臺設(shè)備同時進行攔截并各自進行解析獲取會話秘鑰。以下以兩臺設(shè)備同時進行ssl握手信息的攔截為例進行說明。
客戶端與服務(wù)端之間進行ssl會話之前,會先基于ssl協(xié)議進行握手,握手的過程中產(chǎn)生握手信息。預(yù)先在加速設(shè)備中導(dǎo)入ssl證書,基于該ssl證書獲取服務(wù)器私鑰并預(yù)先存儲在加速設(shè)備中,加速設(shè)備可以在客戶端與服務(wù)端進行握手時攔截握手信息,結(jié)合存儲的服務(wù)器私鑰和攔截到的握手信息計算出會話密鑰。
具體地,步驟s10可以包括如下細化步驟:所述加速設(shè)備解析所述握手信息獲取客戶端隨機數(shù)、服務(wù)端隨機數(shù)、ssl版本、ssl加密套件以及加密后的預(yù)主秘鑰;基于獲取到的所述客戶端隨機數(shù)、服務(wù)端隨機數(shù)、ssl版本、ssl加密套件和加密后的預(yù)主秘鑰,以及所述服務(wù)器私鑰,基于ssl的rfc(requestforcomments,請求測評)文檔計算出所述會話秘鑰,具體地,根據(jù)上述獲取到的各個參數(shù)、服務(wù)器私鑰以及ssl的rfc文檔中公布的方法計算出會話秘鑰。
一般完整的握手過程為:客戶端向服務(wù)端發(fā)起ssl握手請求,請求信息為client_hello,服務(wù)端接收到client_hello時,向客戶端返回響應(yīng)信息,包括server_hello、certificate、server_hello_done;客戶端在接收到響應(yīng)信息后,向服務(wù)端發(fā)送一個秘鑰交換信息,即client_key_exchange,以與服務(wù)端協(xié)商會話秘鑰;最后,客戶端再發(fā)送一個加密指示信息,即change_cipher_spec,以告知服務(wù)端從現(xiàn)在開始發(fā)送的消息都是加密過的,最后,服務(wù)端向客戶端發(fā)送一個完成信息,即finishd,該信息包含了前面所有握手信息的哈希值,可以讓客戶端驗證握手過程是否被第三方篡改,完成握手過程。
加速設(shè)備攔截的握手信息包括:請求信息、響應(yīng)信息以及秘鑰交換信息,即client_hello、server_hello、certificate、server_hello_done以及client_key_exchange。在攔截得到這些信息后,進行解析獲取到客戶端隨機數(shù)、服務(wù)端隨機數(shù)、ssl版本、ssl加密套件以及加密后的預(yù)主秘鑰,然后根據(jù)ssl的rfc文檔計算出所述會話秘鑰,該會話秘鑰就是客戶端與服務(wù)端后續(xù)會話過程中使用的數(shù)據(jù)加密秘鑰。
具體地,攔截握手信息的過程參照圖4所示,客戶端發(fā)送client_hello給服務(wù)端,客戶端加速設(shè)備收到client_hello時,記錄下數(shù)據(jù)包中的客戶端隨機數(shù),然后把client_hello發(fā)送給服務(wù)端加速設(shè)備,服務(wù)端加速設(shè)備收到client_hello,記錄下數(shù)據(jù)包中的客戶端隨機數(shù),把client_hello發(fā)送給服務(wù)端。
服務(wù)端發(fā)送server_hello、certificate、server_hello_done給客戶端,服務(wù)端加速設(shè)備收到server_hello、certificate、server_hello_done,記錄下數(shù)據(jù)包中的服務(wù)端隨機數(shù)、ssl版本、ssl算法套件,把server_hello發(fā)送給客戶端加速設(shè)備,客戶端加速設(shè)備收到server_hello、certificate、server_hello_done,記錄下數(shù)據(jù)包中的服務(wù)端隨機數(shù)、ssl版本、ssl算法套件,把server_hello、certificate、server_hello_done發(fā)送給客戶端。
客戶端發(fā)送client_key_exchange給服務(wù)端,客戶端加速設(shè)備收到client_key_exchange,記錄下數(shù)據(jù)包中加密后的預(yù)主密鑰,把client_key_exchange發(fā)送給服務(wù)端加速設(shè)備,服務(wù)端加速設(shè)備收到client_key_exchange,記錄下數(shù)據(jù)包中加密后的預(yù)主密鑰,把client_key_exchange發(fā)送給服務(wù)端。
客戶端發(fā)送change_cipher_spec給服務(wù)端,客戶端加速設(shè)備收到change_cipher_spec,根據(jù)前面記錄的客戶端隨機數(shù)、服務(wù)端隨機數(shù)、ssl版本、ssl加密套件、加密后的預(yù)主密鑰計算出加密、解密原始數(shù)據(jù)需要的服務(wù)端驗證密鑰、客戶端驗證密鑰、服務(wù)端加密密鑰、客戶端加密密鑰、服務(wù)端初始化向量、客戶端初始化向量,把change_cipher_spec發(fā)送給服務(wù)端加速設(shè)備,服務(wù)端加速設(shè)備收到change_cipher_spec,和客戶端加速設(shè)備做一樣的操作后change_cipher_spec發(fā)送給服務(wù)端。
上述計算得到的服務(wù)端驗證密鑰、客戶端驗證密鑰、服務(wù)端加密密鑰、客戶端加密密鑰、服務(wù)端初始化向量、客戶端初始化向量構(gòu)成所述會話秘鑰。其中,客戶端加速設(shè)備使用客戶端驗證密鑰、客戶端加密密鑰、客戶端初始化向量進行數(shù)據(jù)的解密,服務(wù)端加速設(shè)備使用服務(wù)端驗證密鑰、服務(wù)端加密密鑰、服務(wù)端初始化向量進行數(shù)據(jù)的解密,服務(wù)端加速設(shè)備使用客戶端驗證密鑰、客戶端加密密鑰、客戶端初始化向量進行數(shù)據(jù)的加密,客戶端加速設(shè)備使用服務(wù)端驗證密鑰、服務(wù)端加密密鑰、服務(wù)端初始化向量進行數(shù)據(jù)的加密。
步驟s30,所述加速設(shè)備存儲所述會話秘鑰,以供所述加速設(shè)備基于所述會話秘鑰對所述客戶端與所述服務(wù)端之間加密傳輸?shù)臄?shù)據(jù)進行解密和加密。
加速設(shè)備在獲取到上述會話秘鑰后進行存儲,并在客戶端與服務(wù)端后續(xù)的數(shù)據(jù)傳輸過程中,使用該會話秘鑰對壓縮前的數(shù)據(jù)進行解密操作、對解壓縮后的數(shù)據(jù)進行加密操作。
此外,如果客戶端與服務(wù)端之間建立的通信協(xié)議支持會話秘鑰的復(fù)用,則存儲的會話秘鑰可以在多次會話中重復(fù)使用,例如https,其全稱為hypertexttransferprotocoloversecuresocketlayer,是以安全為目標的超文本傳輸協(xié)議通道,可以支持會話秘鑰的復(fù)用,在其他不支持會話秘鑰的復(fù)用的情況下,加速設(shè)備需要對于每一次握手進行握手信息的攔截,并解析獲取相應(yīng)的會話秘鑰。
本實施例提出的基于加速設(shè)備獲取會話秘鑰的方法,通過位于客戶端與服務(wù)端之間的加速設(shè)備攔截客戶端與服務(wù)端之間的ssl握手信息,并對ssl握手信息進行解析,并結(jié)合存儲的服務(wù)器私鑰計算出客戶端與服務(wù)端之間協(xié)商出的會話秘鑰并存儲所述會話秘鑰,客戶端與服務(wù)端之間的數(shù)據(jù)在通過加速設(shè)備進行壓縮傳輸時,可以通過會話秘鑰對加密傳輸?shù)臄?shù)據(jù)進行加密和解密,采用這樣的方式,客戶端與加速設(shè)備以及服務(wù)端之間實際上只建立了一條ssl連接,該條ssl連接產(chǎn)生了一個會話秘鑰,因此,在數(shù)據(jù)壓縮傳輸?shù)倪^程中不會改變原始數(shù)據(jù)流,如果服務(wù)端上的應(yīng)用要校驗解密前數(shù)據(jù)流,或者要校驗協(xié)商出的會話秘鑰時,可以成功校驗,即應(yīng)用可以成功訪問,解決了現(xiàn)有加速ssl應(yīng)用技術(shù)中采用加速設(shè)備分別作為代理客戶端與代理服務(wù)端和真實的服務(wù)器與客戶端進行ssl握手時導(dǎo)致傳輸客戶端與服務(wù)端之間的數(shù)據(jù)引起的數(shù)據(jù)流變化從而影響應(yīng)用正常訪問的技術(shù)問題。
基于第一實施例提出本發(fā)明基于加速設(shè)備獲取會話秘鑰的方法的第二實施例。在本實施例中,所述加速設(shè)備包括與所述客戶端通信的第一加速設(shè)備,以及與所述服務(wù)端通信的第二加速設(shè)備;在步驟s30之后,該基于加速設(shè)備獲取會話秘鑰的方法還包括:
所述第一加速設(shè)備在接收到所述客戶端發(fā)送的加密后的數(shù)據(jù)時,通過所述會話秘鑰將所述數(shù)據(jù)解密,并將解密后的所述數(shù)據(jù)壓縮處理后發(fā)送至所述第二加速設(shè)備;所述第二加速設(shè)備將壓縮處理后的所述數(shù)據(jù)解壓縮后,基于所述會話秘鑰將解壓縮后的所述數(shù)據(jù)加密后發(fā)送至所述服務(wù)端;
或者,所述第二加速設(shè)備在接收到所述服務(wù)端發(fā)送的加密后的數(shù)據(jù)時,通過所述會話秘鑰將所述數(shù)據(jù)解密,并將解密后的所述數(shù)據(jù)壓縮處理后發(fā)送至所述第一加速設(shè)備;所述第一加速設(shè)備將壓縮處理后的所述數(shù)據(jù)解壓縮后,基于所述會話秘鑰將解壓縮后的所述數(shù)據(jù)加密后發(fā)送至所述客戶端。
在該實施例中,第一加速設(shè)備為客戶端加速設(shè)備,第二加速設(shè)備為服務(wù)端加速設(shè)備。在客戶端與服務(wù)端之間的數(shù)據(jù)壓縮傳輸?shù)倪^程中,會有加密后的數(shù)據(jù)的相互傳輸:客戶端發(fā)送加密后的數(shù)據(jù)給服務(wù)端,客戶端加速設(shè)備收到加密后的數(shù)據(jù),用前面計算出的客戶端驗證密鑰、客戶端加密密鑰、客戶端初始化向量解密數(shù)據(jù),把解密后的數(shù)據(jù)壓縮處理后發(fā)送給服務(wù)端加速設(shè)備,服務(wù)端加速設(shè)備收到數(shù)據(jù)后先解壓縮處理,然后用前面計算出的客戶端驗證密鑰、客戶端加密密鑰、客戶端初始化向量把解壓縮后的數(shù)據(jù)重新加密,把加密后的數(shù)據(jù)發(fā)送給服務(wù)端;服務(wù)端發(fā)送加密后的數(shù)據(jù)給客戶端,服務(wù)端加速設(shè)備收到加密后的數(shù)據(jù),用前面計算出的服務(wù)端驗證密鑰、服務(wù)端加密密鑰、服務(wù)端初始化向量解密數(shù)據(jù),把解密后的數(shù)據(jù)壓縮處理后發(fā)送給客戶端加速設(shè)備,客戶端加速設(shè)備收到數(shù)據(jù)后先解壓縮處理,然后用前面計算出的服務(wù)端驗證密鑰、服務(wù)端加密密鑰、服務(wù)端初始化向量把解壓縮得到的數(shù)據(jù)重新加密處理,把加密后的數(shù)據(jù)發(fā)送給客戶端。
在上述過程中,客戶端加速設(shè)備與加速設(shè)備解密前的數(shù)據(jù)流是一樣的,未發(fā)生改變,實現(xiàn)了在不修改原始數(shù)據(jù)流的情況下,對ssl加密數(shù)據(jù)進行解密,對解密的數(shù)據(jù)進行壓縮,從而獲得加速效果。
此外,本發(fā)明提出的方法中,還可以根據(jù)使用了ssl的應(yīng)用是否需要進行上層校驗,采用不同的解密方式,對于需要進行上層校驗的應(yīng)用來說,可以采用本發(fā)明提出這種建立單條ssl連接的方式對ssl數(shù)據(jù)解密,對于不需要上層校驗的應(yīng)用來說,可以采用現(xiàn)有的通過兩臺加速設(shè)備代理客戶端與服務(wù)端,分別與真實的服務(wù)端和客戶端建立兩條ssl連接的方式對ssl數(shù)據(jù)解密??梢灶A(yù)先配置應(yīng)用識別表,在該應(yīng)用識別表中為不同的應(yīng)用配置不同的解密方式,將該應(yīng)用識別表存儲在設(shè)備內(nèi)。
本發(fā)明還提出一種加速設(shè)備。
參照圖5所示,為本發(fā)明加速設(shè)備第一實施例的功能模塊示意圖。
在該實施例中,該加速設(shè)備包括:
數(shù)據(jù)攔截模塊10,用于攔截所述客戶端與所述服務(wù)端之間的ssl握手信息,所述加速設(shè)備連接于所述客戶端與所述服務(wù)端之間;
秘鑰計算模塊20,用于根據(jù)存儲的服務(wù)器私鑰以及攔截到的所述握手信息計算所述客戶端與所述服務(wù)端之間協(xié)商出的會話秘鑰。
參照圖3所示,為本實施例中客戶端、服務(wù)端以及加速設(shè)備之間的通信連接示意圖。該實施例中分別為客戶端以及服務(wù)端提供一臺加速設(shè)備用于他們之間的數(shù)據(jù)壓縮傳輸,包括客戶端處的客戶端加速設(shè)備以及服務(wù)端處的服務(wù)端加速設(shè)備,這兩臺設(shè)備之間進行數(shù)據(jù)的壓縮傳輸,客戶端與服務(wù)端之間建立一條ssl連接,產(chǎn)生一個會話秘鑰c,以下實施例中所述的會話秘鑰均是指會話秘鑰c。本實施例提出的加速設(shè)備可以是客戶端加速設(shè)備,也可以是服務(wù)端加速設(shè)備。在該實施例中,可以由客戶端加速設(shè)備或者服務(wù)端加速設(shè)備中的任意一臺設(shè)備攔截ssl握手信息并解析獲取到會話秘鑰后傳輸給另一臺,或者可以由兩臺設(shè)備同時進行攔截并各自進行解析獲取會話秘鑰。以下以兩臺設(shè)備同時進行ssl握手信息的攔截為例進行說明。
客戶端與服務(wù)端之間進行ssl會話之前,會先基于ssl協(xié)議進行握手,握手的過程中產(chǎn)生握手信息。預(yù)先在加速設(shè)備中導(dǎo)入ssl證書,基于該ssl證書獲取服務(wù)器私鑰并預(yù)先存儲在加速設(shè)備中,加速設(shè)備可以在客戶端與服務(wù)端進行握手時攔截握手信息,結(jié)合存儲的服務(wù)器私鑰和攔截到的握手信息計算出會話密鑰。
具體地,秘鑰計算模塊20還用于:解析所述握手信息獲取客戶端隨機數(shù)、服務(wù)端隨機數(shù)、ssl版本、ssl加密套件以及加密后的預(yù)主秘鑰;以及,基于獲取到的所述客戶端隨機數(shù)、服務(wù)端隨機數(shù)、ssl版本、ssl加密套件和加密后的預(yù)主秘鑰,以及所述服務(wù)器私鑰,基于ssl的rfc(requestforcomments,請求測評)文檔計算出所述會話秘鑰,具體地,根據(jù)上述獲取到的各個參數(shù)、服務(wù)器私鑰以及ssl的rfc文檔中公布的方法計算出會話秘鑰。
一般完整的握手過程為:客戶端向服務(wù)端發(fā)起ssl握手請求,請求信息為client_hello,服務(wù)端接收到client_hello時,向客戶端返回響應(yīng)信息,包括server_hello、certificate、server_hello_done;客戶端在接收到響應(yīng)信息后,向服務(wù)端發(fā)送一個秘鑰交換信息,即client_key_exchange,以與服務(wù)端協(xié)商會話秘鑰;最后,客戶端再發(fā)送一個加密指示信息,即change_cipher_spec,以告知服務(wù)端從現(xiàn)在開始發(fā)送的消息都是加密過的,最后,服務(wù)端向客戶端發(fā)送一個完成信息,即finishd,該信息包含了前面所有握手信息的哈希值,可以讓客戶端驗證握手過程是否被第三方篡改,完成握手過程。
加速設(shè)備的數(shù)據(jù)攔截模塊10攔截的握手信息包括:請求信息、響應(yīng)信息以及秘鑰交換信息,即client_hello、server_hello、certificate、server_hello_done以及client_key_exchange。在攔截得到這些信息后,進行解析獲取到客戶端隨機數(shù)、服務(wù)端隨機數(shù)、ssl版本、ssl加密套件以及加密后的預(yù)主秘鑰,然后根據(jù)ssl的rfc文檔計算出所述會話秘鑰,該會話秘鑰就是客戶端與服務(wù)端后續(xù)會話過程中使用的數(shù)據(jù)加密秘鑰。
具體地,攔截握手信息的過程參照圖4所示,客戶端發(fā)送client_hello給服務(wù)端,客戶端加速設(shè)備收到client_hello時,記錄下數(shù)據(jù)包中的客戶端隨機數(shù),然后把client_hello發(fā)送給服務(wù)端加速設(shè)備,服務(wù)端加速設(shè)備收到client_hello,記錄下數(shù)據(jù)包中的客戶端隨機數(shù),把client_hello發(fā)送給服務(wù)端。
服務(wù)端發(fā)送server_hello、certificate、server_hello_done給客戶端,服務(wù)端加速設(shè)備收到server_hello、certificate、server_hello_done,記錄下數(shù)據(jù)包中的服務(wù)端隨機數(shù)、ssl版本、ssl算法套件,把server_hello發(fā)送給客戶端加速設(shè)備,客戶端加速設(shè)備收到server_hello、certificate、server_hello_done,記錄下數(shù)據(jù)包中的服務(wù)端隨機數(shù)、ssl版本、ssl算法套件,把server_hello、certificate、server_hello_done發(fā)送給客戶端。
客戶端發(fā)送client_key_exchange給服務(wù)端,客戶端加速設(shè)備收到client_key_exchange,記錄下數(shù)據(jù)包中加密后的預(yù)主密鑰,把client_key_exchange發(fā)送給服務(wù)端加速設(shè)備,服務(wù)端加速設(shè)備收到client_key_exchange,記錄下數(shù)據(jù)包中加密后的預(yù)主密鑰,把client_key_exchange發(fā)送給服務(wù)端。
客戶端發(fā)送change_cipher_spec給服務(wù)端,客戶端加速設(shè)備收到change_cipher_spec,根據(jù)前面記錄的客戶端隨機數(shù)、服務(wù)端隨機數(shù)、ssl版本、ssl加密套件、加密后的預(yù)主密鑰計算出加密、解密原始數(shù)據(jù)需要的服務(wù)端驗證密鑰、客戶端驗證密鑰、服務(wù)端加密密鑰、客戶端加密密鑰、服務(wù)端初始化向量、客戶端初始化向量,把change_cipher_spec發(fā)送給服務(wù)端加速設(shè)備,服務(wù)端加速設(shè)備收到change_cipher_spec,和客戶端加速設(shè)備做一樣的操作后change_cipher_spec發(fā)送給服務(wù)端。
秘鑰計算模塊20計算得到的服務(wù)端驗證密鑰、客戶端驗證密鑰、服務(wù)端加密密鑰、客戶端加密密鑰、服務(wù)端初始化向量、客戶端初始化向量構(gòu)成所述會話秘鑰。其中,客戶端加速設(shè)備使用客戶端驗證密鑰、客戶端加密密鑰、客戶端初始化向量進行數(shù)據(jù)的解密,服務(wù)端加速設(shè)備使用服務(wù)端驗證密鑰、服務(wù)端加密密鑰、服務(wù)端初始化向量進行數(shù)據(jù)的解密,客戶端加速設(shè)備使用服務(wù)端驗證密鑰、服務(wù)端加密密鑰、服務(wù)端初始化向量進行數(shù)據(jù)的加密,服務(wù)端加速設(shè)備使用客戶端驗證密鑰、客戶端加密密鑰、客戶端初始化向量進行數(shù)據(jù)的加密。
秘鑰存儲模塊30,用于存儲所述會話秘鑰,以供所述加速設(shè)備基于所述會話秘鑰對所述客戶端與所述服務(wù)端之間加密傳輸?shù)臄?shù)據(jù)進行解密和加密。
加速設(shè)備在獲取到上述會話秘鑰后,秘鑰存儲模塊30存儲會話秘鑰,并在客戶端與服務(wù)端后續(xù)的數(shù)據(jù)傳輸過程中,由加速設(shè)備使用該會話秘鑰對壓縮前的數(shù)據(jù)進行解密操作、對解壓縮后的數(shù)據(jù)進行加密操作。
此外,如果客戶端與服務(wù)端之間建立的通信協(xié)議支持會話秘鑰的復(fù)用,則存儲的會話秘鑰可以在多次會話中重復(fù)使用,例如https,其全稱為hypertexttransferprotocoloversecuresocketlayer,是以安全為目標的超文本傳輸協(xié)議通道,可以支持會話秘鑰的復(fù)用,在其他不支持會話秘鑰的復(fù)用的情況下,加速設(shè)備需要對于每一次握手進行握手信息的攔截,并解析獲取相應(yīng)的會話秘鑰。
本實施例通過位于客戶端與服務(wù)端之間的加速設(shè)備攔截客戶端與服務(wù)端之間的ssl握手信息,并對ssl握手信息進行解析,并結(jié)合存儲的服務(wù)器私鑰計算出客戶端與服務(wù)端之間協(xié)商出的會話秘鑰并存儲所述會話秘鑰,客戶端與服務(wù)端之間的數(shù)據(jù)在通過加速設(shè)備進行壓縮傳輸時,可以通過會話秘鑰對加密傳輸?shù)臄?shù)據(jù)進行加密和解密,采用這樣的方式,客戶端與加速設(shè)備以及服務(wù)端之間實際上只建立了一條ssl連接,該條ssl連接產(chǎn)生了一個會話秘鑰,因此,在數(shù)據(jù)壓縮傳輸?shù)倪^程中不會改變原始數(shù)據(jù)流,如果服務(wù)端上的應(yīng)用要校驗解密前數(shù)據(jù)流,或者要校驗協(xié)商出的會話秘鑰時,可以成功校驗,即應(yīng)用可以成功訪問,解決了現(xiàn)有加速ssl應(yīng)用技術(shù)中采用加速設(shè)備分別作為代理客戶端與代理服務(wù)端和真實的服務(wù)器與客戶端進行ssl握手時導(dǎo)致傳輸客戶端與服務(wù)端之間的數(shù)據(jù)時引發(fā)的數(shù)據(jù)流變化從而影響應(yīng)用正常訪問的技術(shù)問題。
基于第一實施例提出本發(fā)明加速設(shè)備的第二實施例。在本實施例中,參照圖6所示,加速設(shè)備包括與客戶端通信的第一加速設(shè)備,以及與服務(wù)端通信的第二加速設(shè)備;第一加速設(shè)備還包括第一解密模塊40、第一壓縮模塊50、第一解壓縮模塊60以及第一加密模塊70;第二加速設(shè)備還包括第二解密模塊80、第二壓縮模塊90、第二解壓縮模塊100以及第二加密模塊110。
第一解密模塊40用于:在接收到所述客戶端發(fā)送的加密后的數(shù)據(jù)時,通過所述會話秘鑰將所述數(shù)據(jù)解密;
第一壓縮模塊50用于:將解密后的所述數(shù)據(jù)壓縮處理后發(fā)送至所述第二加速設(shè)備,第二解壓縮模塊100將壓縮處理后的所述數(shù)據(jù)解壓縮后,通過第二加密模塊110基于所述會話秘鑰將解壓縮后的所述數(shù)據(jù)加密后發(fā)送至所述服務(wù)端;
第二解密模塊80用于:在接收到所述服務(wù)端發(fā)送的加密后的數(shù)據(jù)時,通過所述會話秘鑰將所述數(shù)據(jù)解密;
第二壓縮模塊90用于:將解密后的所述數(shù)據(jù)壓縮處理后發(fā)送至所述第一加速設(shè)備,第一解壓縮模塊60將壓縮處理后的所述數(shù)據(jù)解壓縮后,通過第一加密模塊70基于所述會話秘鑰將解壓縮后的所述數(shù)據(jù)加密后發(fā)送至所述客戶端。
在該實施例中,第一加速設(shè)備為客戶端加速設(shè)備,第二加速設(shè)備為服務(wù)端加速設(shè)備,可以理解的是,一臺加速設(shè)備中可以同時包括第一解密模塊40、第一壓縮模塊50、第一解壓縮模塊60和第一加密模塊70,以及第二解密模塊80、第二壓縮模塊90、第二解壓縮模塊100和第二加密模塊110,當他與客戶端連接時,作為客戶端加速設(shè)備,第一解密模塊40、第一壓縮模塊50、第一解壓縮模塊60和第一加密模塊70工作;當它與服務(wù)端連接時,作為服務(wù)端加速設(shè)備,第二解密模塊80、第二壓縮模塊90、第二解壓縮模塊100和第二加密模塊110工作。在客戶端與服務(wù)端之間的數(shù)據(jù)壓縮傳輸?shù)倪^程中,會有加密后的數(shù)據(jù)的相互傳輸:客戶端發(fā)送加密后的數(shù)據(jù)給服務(wù)端,客戶端加速設(shè)備收到加密后的數(shù)據(jù),用前面計算出的客戶端驗證密鑰、客戶端加密密鑰、客戶端初始化向量解密數(shù)據(jù),把解密后的數(shù)據(jù)壓縮處理后發(fā)送給服務(wù)端加速設(shè)備,服務(wù)端加速設(shè)備收到數(shù)據(jù)后先解壓縮處理,然后用前面計算出的客戶端驗證密鑰、客戶端加密密鑰、客戶端初始化向量把解壓縮后的數(shù)據(jù)重新加密,把加密后的數(shù)據(jù)發(fā)送給服務(wù)端;服務(wù)端發(fā)送加密后的數(shù)據(jù)給客戶端,服務(wù)端加速設(shè)備收到加密后的數(shù)據(jù),用前面計算出的服務(wù)端驗證密鑰、服務(wù)端加密密鑰、服務(wù)端初始化向量解密數(shù)據(jù),把解密后的數(shù)據(jù)壓縮處理后發(fā)送給客戶端加速設(shè)備,客戶端加速設(shè)備收到數(shù)據(jù)后先解壓縮處理,然后用前面計算出的服務(wù)端驗證密鑰、服務(wù)端加密密鑰、服務(wù)端初始化向量把解壓縮得到的數(shù)據(jù)重新加密處理,把加密后的數(shù)據(jù)發(fā)送給客戶端。
在上述過程中,客戶端加速設(shè)備與加速設(shè)備解密前的數(shù)據(jù)流是一樣的,未發(fā)生改變,實現(xiàn)了在不修改原始數(shù)據(jù)流的情況下,對ssl加密數(shù)據(jù)進行解密,對解密的數(shù)據(jù)進行壓縮,從而獲得加速效果。
此外,本發(fā)明提出的加速設(shè)備,還可以根據(jù)使用了ssl的應(yīng)用是否需要進行上層校驗,采用不同的解密方式,對于需要進行上層校驗的應(yīng)用來說,可以采用本發(fā)明提出這種建立單條ssl連接的方式對ssl數(shù)據(jù)解密,對于不需要上層校驗的應(yīng)用來說,可以采用現(xiàn)有的通過兩臺加速設(shè)備代理客戶端與服務(wù)端,分別與真實的服務(wù)端和客戶端建立兩條ssl連接的方式對ssl數(shù)據(jù)解密??梢灶A(yù)先配置應(yīng)用識別表,在該應(yīng)用識別表中為不同的應(yīng)用配置不同的解密方式,將該應(yīng)用識別表存儲在設(shè)備內(nèi)。
以上僅為本發(fā)明的優(yōu)選實施例,并非因此限制本發(fā)明的專利范圍,凡是利用本發(fā)明說明書及附圖內(nèi)容所作的等效結(jié)構(gòu)或等效流程變換,或直接或間接運用在其他相關(guān)的技術(shù)領(lǐng)域,均同理包括在本發(fā)明的專利保護范圍內(nèi)。