欧美日韩精品在线,国内精品久久久久久久久,一级毛片恃级毛片直播,清纯唯美亚洲综合欧美色

OPENSSL服務(wù)_安全信息傳輸_Windows教程

編輯Tag賺U幣
教程Tag:暫無Tag,歡迎添加,賺取U幣!

隨著計算機(jī)網(wǎng)絡(luò)技術(shù)的發(fā)展,方便快捷的互連網(wǎng)使人們漸漸習(xí)慣了從Web頁上收發(fā)E-mail、購物和交易,這時Web頁面上需要傳輸重要或敏感的數(shù)據(jù),例如用戶的銀行帳戶、密碼等,所以網(wǎng)絡(luò)安全就成為現(xiàn)代計算機(jī)網(wǎng)絡(luò)應(yīng)用急需解決的問題。

現(xiàn)行網(wǎng)上銀行和電子商務(wù)等大型的網(wǎng)上交易系統(tǒng)普遍采用HTTP和SSL相結(jié)合的方式。服務(wù)器端采用支持SSL的Web服務(wù)器,用戶端采用支持SSL的瀏覽器實現(xiàn)安全通信。

SSL是Secure Socket Layer(安全套接層協(xié)議)的縮寫,可以在Inte.net上提供秘密性傳輸。Netscape公司在推出第一個Web瀏覽器的同時,提出了SSL協(xié)議標(biāo)準(zhǔn),目前已有3.0版本。SSL采用公開密鑰技術(shù)。其目標(biāo)是保證兩個應(yīng)用間通信的保密性和可靠性,可在服務(wù)器端和用戶端同時實現(xiàn)支持。目前,利用公開密鑰技術(shù)的SSL協(xié)議,已成為Internet上保密通訊的工業(yè)標(biāo)準(zhǔn)。本文著重在SSL協(xié)議和SSL程序設(shè)計兩方面談?wù)勛髡邔SL的理解。

一. SSL協(xié)議初步介紹

安全套接層協(xié)議能使用戶/服務(wù)器應(yīng)用之間的通信不被攻擊者竊聽,并且始終對服務(wù)器進(jìn)行認(rèn)證,還可選擇對用戶進(jìn)行認(rèn)證。SSL協(xié)議要求建立在可靠的傳輸層協(xié)議(TCP)之上。SSL協(xié)議的優(yōu)勢在于它是與應(yīng)用層協(xié)議獨立無關(guān)的,高層的應(yīng)用層協(xié)議(例如:HTTP,F(xiàn)TP,TELNET等)能透明地建立于SSL協(xié)議之上。SSL協(xié)議在應(yīng)用層協(xié)議通信之前就已經(jīng)完成加密算法、通信密鑰的協(xié)商及服務(wù)器認(rèn)證工作。在此之后應(yīng)用層協(xié)議所傳送的數(shù)據(jù)都會被加密,從而保證通信的私密性。

通過以上敘述,SSL協(xié)議提供的安全信道有以下三個特性:

1) 數(shù)據(jù)的保密性

信息加密就是把明碼的輸入文件用加密算法轉(zhuǎn)換成加密的文件以實現(xiàn)數(shù)據(jù)的保密。加密的過程需要用到密匙來加密數(shù)據(jù)然后再解密。沒有了密鑰,就無法解開加密的數(shù)據(jù)。數(shù)據(jù)加密之后,只有密匙要用一個安全的方法傳送。加密過的數(shù)據(jù)可以公開地傳送。

2) 數(shù)據(jù)的一致性

加密也能保證數(shù)據(jù)的一致性。例如:消息驗證碼(MAC),能夠校驗用戶提供的加密信息,接收者可以用MAC來校驗加密數(shù)據(jù),保證數(shù)據(jù)在傳輸過程中沒有被篡改過。

3) 安全驗證

加密的另外一個用途是用來作為個人的標(biāo)識,用戶的密匙可以作為他的安全驗證的標(biāo)識。

SSL是利用公開密鑰的加密技術(shù)(RSA)來作為用戶端與服務(wù)器端在傳送機(jī)密資料時的加密通訊協(xié)定。目前,大部分的Web 服務(wù)器及瀏覽器都廣泛支持SSL 技術(shù)。當(dāng)瀏覽器試圖連接一個具有SSL認(rèn)證加密的服務(wù)器時,就會喚醒一個SSL會話,瀏覽器檢查認(rèn)證,必須具備下面三個條件:

1)有一個權(quán)威機(jī)構(gòu)發(fā)放證書,當(dāng)然可以創(chuàng)建自我簽訂的證書(x509 結(jié)構(gòu))。

2)證書不能過期。

3)證書是屬于它所連接的服務(wù)器的。

只有全部具備了這三個條件,瀏覽器才能成功完成認(rèn)證。通過這三個條件,用戶能確認(rèn)其瀏覽器連接到正確的服務(wù)器,而不是連接到一些想盜取用戶密碼等重要信息的虛假的服務(wù)器上。

在當(dāng)今的電子商務(wù)中還有一項被廣泛使用的安全協(xié)議是SET協(xié)議。SET(Secure Electronic Transaction,安全電子交易)協(xié)議是由VISA和MasterCard兩大信用卡公司于1997年5月聯(lián)合推出的規(guī)范。SET能在電子交易環(huán)節(jié)上提供更大的信任度、更完整的交易信息、更高的安全性和更少受欺詐的可能性。SET交易分三個階段進(jìn)行:用戶向商家購物并確定支付;商家與銀行核實;銀行向商家支付貨款。每個階段都涉及到RSA對數(shù)據(jù)加密,以及RSA數(shù)字簽名。使用SET協(xié)議,在一次交易中,要完成多次加密與解密操作,故有很高的安全性,但SET協(xié)議比SSL協(xié)議復(fù)雜,商家和銀行都需要改造系統(tǒng)以實現(xiàn)互操作。

Linux 下,比較流行支持SSL認(rèn)證的是OpenSSL服務(wù)器。OpenSSL項目是一個合作的項目,開發(fā)一個健壯的、商業(yè)等級的、完整的開放源代碼的工具包,用強(qiáng)大的加密算法來實現(xiàn)安全的Socket層(Secure Sockets Layer,SSL v2/v3)和傳輸層的安全性(Transport Layer Security,TLS v1)。這個項目是由全世界的志愿者管理和開發(fā)OpenSSL工具包和相關(guān)文檔。

如何在Linux下配置OpenSSL服務(wù)器,首先從OpenSSL的主頁(http://www.openssl.org/)上下載openssl-version.tar.gz軟件包來編譯安裝,與Apache服務(wù)器配合可以建立支持SSL的Web服務(wù)器,并可以使用自我簽訂的證書做認(rèn)證,關(guān)于如何編譯、安裝OpenSSL服務(wù)器,可以參考一下OpenSSL HOWTO文檔。

二. SSL 程序設(shè)計初步介紹

SSL 通訊模型為標(biāo)準(zhǔn)的C/S 結(jié)構(gòu),除了在 TCP 層之上進(jìn)行傳輸之外,與一般的通訊沒有什么明顯的區(qū)別。在這里,我們主要介紹如何使用OpenSSL進(jìn)行安全通訊的程序設(shè)計。關(guān)于OpenSSL 的一些詳細(xì)的信息請參考OpenSSL的官方主頁 http://www.openssl.org。

在使用OpenSSL前,必須先對OpenSSL 進(jìn)行初始化,以下的三個函數(shù)任選其一:

SSL_library_init(void);

OpenSSL_add_ssl_algorithms();

SSLeay_add_ssl_algorithms();

事實上 后面的兩個函數(shù)只是第一個函數(shù)的宏。

如果要使用OpenSSL的出錯信息,使用SSL_load_error_strings (void)進(jìn)行錯誤信息的初始化。以后可以使用void ERR_print_errors_fp(FILE *fp) 打印SSL的錯誤信息。

一次SSL連接會話一般要先申請一個SSL 環(huán)境,基本的過程是:

1. SSL_METHOD* meth = TLSv1_client_method(); 創(chuàng)建本次會話連接所使用的協(xié)議,如果是客戶端可以使用

SSL_METHOD* TLSv1_client_method(void); TLSv1.0 協(xié)議

SSL_METHOD* SSLv2_client_method(void); SSLv2 協(xié)議

SSL_METHOD* SSLv3_client_method(void); SSLv3 協(xié)議

SSL_METHOD* SSLv23_client_method(void); SSLv2/v3 協(xié)議

服務(wù)器同樣需要創(chuàng)建本次會話所使用的協(xié)議:

SSL_METHOD *TLSv1_server_method(void);

SSL_METHOD *SSLv2_server_method(void);

SSL_METHOD *SSLv3_server_method(void);

SSL_METHOD *SSLv23_server_method(void);

需要注意的是客戶端和服務(wù)器需要使用相同的協(xié)議。

2.申請SSL會話的環(huán)境 CTX,使用不同的協(xié)議進(jìn)行會話,其環(huán)境也是不同的。申請SSL會話環(huán)境的OpenSSL函數(shù)是

SSLK_CTX* SSL_CTX_new (SSL_METHOD*); 參數(shù)就是前面我們申請的 SSL通訊方式。返回當(dāng)前的SSL 連接環(huán)境的指針。

然后根據(jù)自己的需要設(shè)置CTX的屬性,典型的是設(shè)置SSL 握手階段證書的驗證方式和加載自己的證書。

void SSL_CTX_set_verify (SSL_CTX* , int , int* (int, X509_STORE_CTX*) )

設(shè)置證書驗證的方式。

第一個參數(shù)是當(dāng)前的CTX 指針,第二個是驗證方式,如果是要驗證對方的話,就使用 SSL_VERIFY_PEER。不需要的話,使用SSL_VERIFY_NONE.一般情況下,客戶端需要驗證對方,而服務(wù)器不需要。第三個參數(shù)是處理驗證的回調(diào)函數(shù),如果沒有特殊的需要,使用空指針就可以了。

void SSL_CTX_load_verify_locations(SSL_CTX*, const char* , const char*);

加載證書:第一個參數(shù)同上,參數(shù)二是證書文件的名稱,參數(shù)三是證書文件的路徑;

int SSL_CTX_use_certificate_file(SSL_CTX *ctx, const char *file, int type);

加載本地的證書;type 指明證書文件的結(jié)構(gòu)類型;失敗返回-1

int SSL_CTX_use_PrivateKey_file(SSL_CTX *ctx, const char *file, int type);

加載自己的私鑰;type 參數(shù)指明私鑰文件的結(jié)構(gòu)類型;失敗返回-1

加載了證書和文件之后,就可以驗證私鑰和證書是否相符:

BOOl SSL_CTX_check_private_key (SSL_CTX*);

3.既然SSL 使用TCP 協(xié)議,當(dāng)然需要把SSL attach 到已經(jīng)連接的套接字上了:

SSL* SSL_new (SSL_CTX*); 申請一個SSL 套節(jié)字;

int SSL_set_rfd (SSL*); 綁定只讀套接字

int SSL_set_wfd (SSL*); 綁定只寫套接字

int SSL_set_fd ( SSL*); 綁定讀寫套接字

綁定成功返回 1, 失敗返回0;

4.接下來就是SSL 握手的動作了

int SSL_connect (SSL*); 失敗返回 -1

5. 握手成功之后,就可以進(jìn)行通訊了,使用SSL_read 和SS_write 讀寫SSL 套接字代替?zhèn)鹘y(tǒng)的read 、write:

int SSL_read (SSL *ssl, char *buf, int num );

int SSL_write (SSL *ssl, char *buf, int num);

如果是服務(wù)器,則使用 SSL_aclearcase/" target="_blank" >ccept 代替?zhèn)鹘y(tǒng)的 accept 調(diào)用

int SSL_accept(SSL *ssl);

6. 通訊結(jié)束,需要釋放前面申請的SSL資源

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

void SSL_free (ssl); 釋放SSL套接字;

void SSL_CTX_free (ctx); 釋放SSL環(huán)境;

OpenSSL 雖然已經(jīng)發(fā)展到了0.9.96版本,但是它的文檔還很少,甚至連最基本的man 函數(shù)手冊都沒有完成。所以,本文緊緊是講述了使用OpenSSL 進(jìn)行程序設(shè)計的框架。更加詳細(xì)的資料可以參考OpenSSL 的文檔或者 Apache mod_ssl 的文檔。

通過以上的介紹,我想讀者對SSL協(xié)議已經(jīng)有了一定的了解,作者有機(jī)會將會繼續(xù)給大家介紹SSL協(xié)議的其他方面的內(nèi)容。

來源:網(wǎng)絡(luò)搜集//所屬分類:Windows教程/更新時間:2012-06-25
相關(guān)Windows教程