SSL高階加密網路通訊

2021-06-20 04:34:42 字數 4533 閱讀 1034

ssl(secure sockets layer 安全套接層),及其繼任者傳輸層安全(transport layer security,tls)是為網路通訊提供安全及資料完整性的一種安全協議。tls與ssl在傳輸層對網路連線進行加密。

ssl (secure socket layer)   為netscape所研發,用以保障在internet上資料傳輸之安全,利用資料加密(encryption)技術,可確保資料在網路上之傳輸過程中不會被擷取及竊聽。目前一般通用之規格為40 bit之安全標準,美國則已推出128 bit之更高安全標準,但限制出境。只要3.0版本以上之i.e.或netscape瀏覽器即可支援ssl。   當前版本為3.0。它已被廣泛地用於web瀏覽器與伺服器之間的身份認證和加密資料傳輸。  

ssl協議位於tcp/ip協議與各種應用層協議之間,為資料通訊提供安全支援。ssl協議可分為兩層: ssl記錄協議(ssl record protocol):它建立在可靠的傳輸協議(如tcp)之上,為高層協議提供資料封裝、壓縮、加密等基本功能的支援。 ssl握手協議(ssl handshake protocol):它建立在ssl記錄協議之上,用於在實際的資料傳輸開始前,通訊雙方進行身份認證、協商加密演算法、交換加密金鑰等。   

ssl協議提供的服務主要有:

1)認證使用者和伺服器,確保資料傳送到正確的客戶機和伺服器;  

2)加密資料以防止資料中途被竊取;  

3)維護資料的完整性,確保資料在傳輸過程中不被改變。   

ssl協議的工作流程:  

伺服器認證階段:

1)客戶端向伺服器傳送乙個開始資訊「hello」以便開始乙個新的會話連線;

2)伺服器根據客戶的資訊確定是否需要生成新的主金鑰,如需要則伺服器在響應客戶的「hello」資訊時將包含生成主金鑰所需的資訊;

3)客戶根據收到的伺服器響應資訊,產生乙個主金鑰,並用伺服器的公開金鑰加密後傳給伺服器;

4)伺服器恢復該主金鑰,並返回給客戶乙個用主金鑰認證的資訊,以此讓客戶認證伺服器。   

使用者認證階段:在此之前,伺服器已經通過了客戶認證,這一階段主要完成對客戶的認證。經認證的伺服器傳送乙個提問給客戶,客戶則返回(數字)簽名後的提問和其公開金鑰,從而向伺服器提供認證。  

從ssl 協議所提供的服務及其工作流程可以看出,ssl協議執行的基礎是商家對消費者資訊保密的承諾,這就有利於商家而不利於消費者。在電子商務初級階段,由於運作電子商務的企業大多是信譽較高的大公司,因此這問題還沒有充分暴露出來。但隨著電子商務的發展,各中小型公司也參與進來,這樣在電子支付過程中的單一認證問題就越來越突出。雖然在ssl3.0中通過數字簽名和數字證書可實現瀏覽器和web伺服器雙方的身份驗證,但是ssl協議仍存在一些問題,比如,只能提供交易中客戶與伺服器間的雙方認證,在涉及多方的電子交易中,ssl協議並不能協調各方間的安全傳輸和信任關係。在這種情況下,visa和 mastercard兩大信用卡公組織制定了set協議,為網上信用卡支付提供了全球性的標準。

我們來親自實現ssl網路通訊

客戶端**實現如下,請見注釋分析

[cpp]view plain

copy

print?

#include "commonlib.h"

#define cafile data_dir"\\rootcert.pem"

#define cadir null

#define clntcert data_dir"\\client.pem"

ssl_ctx *setup_client_ctx(void)  

int do_client_task(ssl *ssl)  

return 1;  

}  int main(int argc, char *argv)  

if (bio_do_connect(bio_con) <= 0)  

//建立ssl物件

if (!(ssl = ssl_new(ctx)))  

//將ssl物件和連線bio關聯起來

ssl_set_bio(ssl, bio_con, bio_con);  

//執行ssl握手

if (ssl_connect(ssl) <= 0)  

//執行ssl連線後檢查

//若收到得伺服器證書不是認證「server」(我們生成證書時這麼寫的),則返回錯誤

if ((err = post_connection_check(ssl, "server")) != x509_v_ok)  

printf("ssl連線已經開啟\n");  

if (do_client_task(ssl))  

else

printf("ssl連線已經關閉\n");  

ssl_free(ssl);//釋放ssl物件

ssl_ctx_free(ctx);//釋放ssl上下文物件

return 0;  

}  

#include "commonlib.h"

#define cafile data_dir"\\rootcert.pem"

#define cadir null

#define clntcert data_dir"\\client.pem"

ssl_ctx *setup_client_ctx(void)

int do_client_task(ssl *ssl)

return 1;

}int main(int argc, char *argv)

if (bio_do_connect(bio_con) <= 0)

//建立ssl物件

if (!(ssl = ssl_new(ctx)))

//將ssl物件和連線bio關聯起來

ssl_set_bio(ssl, bio_con, bio_con);

//執行ssl握手

if (ssl_connect(ssl) <= 0)

//執行ssl連線後檢查

//若收到得伺服器證書不是認證「server」(我們生成證書時這麼寫的),則返回錯誤

if ((err = post_connection_check(ssl, "server")) != x509_v_ok)

printf("ssl連線已經開啟\n");

if (do_client_task(ssl))

else

printf("ssl連線已經關閉\n");

ssl_free(ssl);//釋放ssl物件

ssl_ctx_free(ctx);//釋放ssl上下文物件

return 0;

}

服務端**實現如下,請見注釋分析

[cpp]view plain

copy

print?

#include "commonlib.h"

#define cafile data_dir"\\rootcert.pem"

#define cadir null

#define srvcert data_dir"\\server.pem"

ssl_ctx *setup_server_ctx(void)  

int do_server_task(ssl* ssl)  

return (ssl_get_shutdown(ssl) & ssl_received_shutdown) ? 1:0;  

}  void _cdecl server_thread(void *arg)  

printf("ssl連線已經開啟\n");  

//執行ssl連線後檢查

//若收到得客戶端證書不是認證「client」(我們生成證書時這麼寫的),則返回錯誤

if ((err = post_connection_check(ssl, "client")) != x509_v_ok)  

if (do_server_task(ssl)) //執行伺服器端連線迴圈

else

printf("ssl 連線已經關閉\n");  

ssl_free(ssl);//釋放ssl物件

err_remove_state(0);//清除錯誤狀態

_endthread();//結束執行緒

}  int main(int argc, char *argv)  

if (bio_do_accept(bio_acc) <= 0)  

for (;;)  

//取出當前連線

bio_clnt = bio_pop(bio_acc);  

if (!(ssl = ssl_new(ctx)))  

//將ssl物件和連線bio關聯起來

ssl_set_bio(ssl, bio_clnt, bio_clnt);  

//建立子執行緒處理該連線,並將ssl連線作為引數傳入該子執行緒

thread_create(tid, server_thread, ssl);  

}  ssl_ctx_free(ctx);//釋放ssl上下文物件

bio_free(bio_acc);//釋放伺服器套節字

return 0;  

}  

安全網路通訊SSL

ssl secure socket layer 是netscape公司開發的,用資料加密技術來保障internet上資料傳輸的安全,保證資料在傳輸過程中不會被擷取和竊聽。ssl協議位於tcp ip協議與各種應用層協議之間,為資料通訊提供安全支援。ssl協議分為兩層 1 ssl記錄協議,建立在可靠的傳...

網路通訊常用加密演算法研究

什麼是對稱加密 對稱加密採用了對稱密碼編碼技術,它的特點是檔案加密和解密使用相同的金鑰,即加密金鑰也可以用作解密金鑰,這種方法在密碼學中叫做對稱加密演算法,對稱加密演算法使用起來簡單快捷,金鑰較短,且破譯困難,除了資料加密標準 des 另乙個對稱金鑰加密系統是國際資料加密演算法 idea 它比des...

網路通訊中的加密和解密

內容明確 1.加密 包含秘鑰和加密演算法 2.解密 包含秘鑰和解密演算法 3.公鑰 公開的秘鑰 4.私鑰 私有的秘鑰 正文 對稱加密 通訊雙方使用同一秘鑰 私鑰 對資料加密 解密。可能產生的問題 雙方對於私鑰的獲取問題。非對稱加密 以典型的rsa舉例 通訊雙方各自有一對公鑰和私鑰 公鑰加密,只有對應...