VC 網路安全程式設計範例(10) SSL網路通訊

2021-07-25 06:26:35 字數 3302 閱讀 5012

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

#include "commonlib.h"

#define clntcert data_dir"\\client.pem"

ssl_ctx *setup_client_ctx(void

)    

intdo_client_task(ssl *ssl)  

return

1;  

}  int

main(

intargc, 

char

*argv)  

if(bio_do_connect(bio_con) <= 0)  

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

//將ssl物件關聯到連線bio中

ssl_set_bio(ssl, bio_con, bio_con);  

if(ssl_connect(ssl) <= 0) 

// ssl握手

fprintf(stderr, "ssl連線已經開啟\n"

);  

if(do_client_task(ssl))  

else

fprintf(stderr, "ssl連線已經關閉\n"

);  

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

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

return

0;  

}  

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

[cpp]view plain

copy

#include "commonlib.h"

#define srvcert data_dir"\\server.pem"

ssl_ctx *setup_server_ctx(void

)    

intdo_server_task(ssl* ssl)  

return

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

}  void

_cdecl server_thread(

void

*arg)  

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

);  

if(do_server_task(ssl))  

else

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

);  

ssl_free(ssl);  

err_remove_state(0);  

_endthread();  

}  int

main(

intargc, 

char

*argv)  

if(bio_do_accept(bio_acc) <= 0)  

for(;;)  

//取出當前連線

bio_clnt = bio_pop(bio_acc);  

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

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

ssl_set_bio(ssl, bio_clnt, bio_clnt);  

thread_create(tid, server_thread, ssl);  

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

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

return

0;  

}  

網路安全協議SSL的知識梳理

在上資訊保安課程的時候,經常聽到ssl層協議為web安全提供一種安全保障機制,但是該協議的具體操作過程以及對協議的格式不甚了解。現所看 是對網路安全協議驗證方法的研究,並使用csp 通訊順序進場 語言對ssl協議進行了描述,在對抽象語言進行理解之前,我想首先得理清ssl的具體過程。秘密性 ssl客戶...

網路安全之SSL和SET協議的比較

在認證要求方面,早期的ssl並設有提供商家身份認證機制。雖然在ssl3.0中可以通過數字簽名和數字證書實現瀏覽器和web服務雙方的身份驗證,但仍不能實現多方認證。相比之下,set的安全要求較高,所有參與set交易的成員 持卡人 商家 發卡銀行 收單銀行和支付閘道器 都必須申請數字證書進行身份識別。在...

網路安全之python C S模式基礎程式設計

socket型別包括 tcp socket 和 udp socket。常規的客戶服務區模式。raw socket 可用於嗅探和注入 c s client server,客戶機 伺服器 模式又稱c s結構,是20世紀80年代末逐步成長起來的一種模式,是軟體系統體系結構的一種。c s結構的關鍵在於功能的...