真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

SSL連接,搭建網(wǎng)絡(luò)安全道路

SSL連接,搭建網(wǎng)絡(luò)安全道路

成都創(chuàng)新互聯(lián)公司網(wǎng)絡(luò)公司擁有十年的成都網(wǎng)站開發(fā)建設(shè)經(jīng)驗,近千家客戶的共同信賴。提供成都做網(wǎng)站、網(wǎng)站制作、網(wǎng)站開發(fā)、網(wǎng)站定制、友情鏈接、建網(wǎng)站、網(wǎng)站搭建、成都響應(yīng)式網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計師打造企業(yè)風格,提供周到的售前咨詢和貼心的售后服務(wù)

什么是 SSL連接

SSL 連接,當前版本為3.1(SSL3.1就是TLS1.0)。它已被廣泛地用于Web瀏覽器與服務(wù)器之間的身份認證和加密數(shù)據(jù)傳輸.它位于TCP/IP協(xié)議與各種應(yīng)用層協(xié)議之間,為數(shù)據(jù)通訊提供安全支持。SSL協(xié)議可分為兩層: SSL記錄協(xié)議(SSL Record Protocol):它建立在可靠的傳輸協(xié)議(如TCP)之上,為高層協(xié)議提供數(shù)據(jù)封裝、壓縮、加密等基本功能的支持。 SSL握手協(xié)議(SSL Handshake Protocol):它建立在SSL記錄協(xié)議之上,用于在實際的數(shù)據(jù)傳輸開始前,通訊雙方進行身份認證、協(xié)商加密算法、交換加密密鑰等。

SSL連接,搭建網(wǎng)絡(luò)安全道路

SSL連接建立過程

(以O(shè)penSSL API為例)

OpenSSL是一套開放源代碼的SSL套件,其函數(shù)庫是以C語言所寫成,實現(xiàn)了基本的傳輸層數(shù)據(jù)加密功能。此軟件是以兩個加拿大人Eric A. Young 和Tim J. Hudson所寫的SSLeay為基礎(chǔ)所發(fā)展的,SSLeay隨著兩人前往RSA公司任職而停止開發(fā)。1998年,OpenSSL項目組接管了OpenSSL的開發(fā)工作,并推出了OpenSSL的0.9.1版,到目前為止,OpenSSL的算法已經(jīng)非常完善,對SSL2.0、SSL3.0以及TLS1.0都支持。

OpenSSL同時實現(xiàn)了客戶端與服務(wù)器的開發(fā)接口,使用OpenSSL進行安全通信的大致流程如下圖所示。

SSL連接,搭建網(wǎng)絡(luò)安全道路

一、OpenSSL API

SSL通信模型采用標準的C/S結(jié)構(gòu),因此基于OpenSSL的程序可以被分為兩個部分:Client和Server。上圖是建立SSL通信的流程簡圖,說明了基于OpenSSL的程序所要遵循的以下幾個重要步驟:

(1)OpenSSL初始化

OpenSSL在使用之前,必須進行相應(yīng)的初始化工作。完成初始化功能的函數(shù)原型為:

void SSL_load_error_strings(void); // 錯誤信息的初始化

int SSL_library_int(void);         // 初始化SSL算法庫函數(shù)( 加載要用到的算法 ),調(diào)用SSL函數(shù)之前必須調(diào)用此函數(shù)

在建立SSL連接之前,要為Client和Server分別指定本次連接采用的協(xié)議及其版本,目前能夠使用的協(xié)議版本包括SSLv2、SSLv3、SSLv2/v3和TLSv1.0。SSL連接若要正常建立,則要求Client和Server必須使用相互兼容的協(xié)議。

(2)創(chuàng)建CTX

在OpenSSL中,CTX是指SSL會話環(huán)境。建立連接時使用不同的協(xié)議,其CTX也不一樣。創(chuàng)建CTX的過程中會依次用到以下OpenSSL函數(shù):

//客戶端、服務(wù)端都需要調(diào)用的

SSL_CTX_new()         //申請SSL會話環(huán)境

//若有驗證對方證書的需求,則需調(diào)用

SSL_CTX_set_verify()            //指定證書驗證方式

SSL_CTX_load_verify_location()  //為SSL會話環(huán)境加載本應(yīng)用所信任的CA證書列表

//若有加載證書的需求,則需調(diào)用

SSL_CTX_use_certificate_file()       //為SSL會話加載本應(yīng)用的證書

SSL_CTX_use_certificate_chain_file() //為SSL會話加載本應(yīng)用的證書所屬的證書鏈

SSL_CTX_use_PrivateKey_file()        //為SSL會話加載本應(yīng)用的私鑰

SSL_CTX_check_private_key()          //驗證所加載的私鑰和證書是否相匹配

(3)創(chuàng)建SSL套接字

在此之前要先創(chuàng)建普通的流套接字,完成TCP三次握手,建立普通的TCP連接。然后創(chuàng)建SSL套接字,并將之與流套接字綁定。這一過程中會使用以下幾個函數(shù):

SSL *SSl_new(SSL_CTX *ctx);  //創(chuàng)建一個SSL套接字

int SSL_set_fd(SSL *ssl,int fd);   //以讀寫模式綁定流套接字

int SSL_set_rfd(SSL *ssl,int fd);  //以只讀模式綁定流套接字

int SSL_set_wfd(SSL *ssl,int fd);  //以只寫模式綁定流套接字

(4)完成SSL握手

在這一步,我們需要在普通TCP連接的基礎(chǔ)上,建立SSL連接。與普通流套接字建立連接的過程類似:Client使用函數(shù)SSL_connect()【類似于流套接字中用的connect()】發(fā)起握手,而Server使用函數(shù)SSL_ accept()【類似于流套接字中用的accept()】對握手進行響應(yīng),從而完成握手過程。兩函數(shù)原型如下:

int SSL_connect(SSL *ssl);

int SSL_accept(SSL *ssl);

握手過程完成之后,Client通常會要求Server發(fā)送證書信息,以便對Server進行鑒別。其實現(xiàn)會用到以下兩個函數(shù):

X509 *SSL_get_peer_certificate(SSL *ssl);  //從SSL套接字中獲取對方的證書信息

X509_NAME *X509_get_subject_name(X509 *a); //得到證書所用者的名字

(5)進行數(shù)據(jù)傳輸

經(jīng)過前面的一系列過程后,就可以進行安全的數(shù)據(jù)傳輸了。在數(shù)據(jù)傳輸階段,需要使用SSL_read( )和SSL_write( )來代替普通流套接字所使用的read( )和write( )函數(shù),以此完成對SSL套接字的讀寫操作,兩個新函數(shù)的原型分別如下:

int SSL_read(SSL *ssl,void *buf,int num);            //從SSL套接字讀取數(shù)據(jù)

int SSL_write(SSL *ssl,const void *buf,int num);     //向SSL套接字寫入數(shù)據(jù)

(6)會話結(jié)束

當Client和Server之間的通信過程完成后,就使用以下函數(shù)來釋放前面過程中申請的SSL資源:

int SSL_shutdown(SSL *ssl);       //關(guān)閉SSL套接字

void SSl_free(SSL *ssl);          //釋放SSL套接字

void SSL_CTX_free(SSL_CTX *ctx);  //釋放SSL會話環(huán)境

SSL連接,搭建網(wǎng)絡(luò)安全道路

全球可信CA機構(gòu)


網(wǎng)站欄目:SSL連接,搭建網(wǎng)絡(luò)安全道路
本文來源:http://weahome.cn/article/jedhos.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部