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舉例 通訊雙方各自有一對公鑰和私鑰 公鑰加密,只有對應...