版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p><b> 青島農(nóng)業(yè)大學(xué)</b></p><p> 畢 業(yè) 論 文(設(shè)計)</p><p> 題 目: 基于OpenSSL的安全Web服務(wù)器的設(shè)計與實現(xiàn) </p><p> 姓 名: </p><p> 學(xué)
2、 院: 理學(xué)與信息科學(xué)學(xué)院 </p><p> 專 業(yè): 計算機科學(xué)與技術(shù) </p><p> 班 級: 08級03班 </p><p> 學(xué) 號: 2008285
3、4 </p><p> 指導(dǎo)教師: </p><p> 2012 年 6 月 16 日</p><p> 基于OpenSSL的安全Web服務(wù)器的設(shè)計與實現(xiàn)</p><p> 摘要:隨著計算機網(wǎng)絡(luò)技術(shù)的飛速發(fā)展,
4、基于計算機網(wǎng)絡(luò)諸多業(yè)務(wù),如電子商務(wù)、電子政務(wù)、網(wǎng)上銀行迅猛的發(fā)展,為人們的生活和工作帶來了很多的方便。然而,由于Internet的開放性、靈活性、共享性等特點,也為人們帶來了巨大的安全威脅。如何在網(wǎng)絡(luò)中共享信息的同時更加有效地保障我們的信息不被他人竊取、利用——保護個人的信息安全,已成為人們共同關(guān)注的問題。</p><p> 默認情況下Web服務(wù)使用的傳輸協(xié)議是HTTP,而HTTP協(xié)議是沒有任何加密措施的,服務(wù)
5、器和客戶之間通訊的所有的信息全部采用明文傳輸,惡意的攻擊者可以通過安裝監(jiān)聽程序來獲得我們和服務(wù)器之間的通訊內(nèi)容。因此,如何保證服務(wù)器和客戶之間通訊的安全性,保證雙方交易信息的保密性、完整性已成為亟待解決的問題。</p><p> 本設(shè)計基于Linux平臺,利用OpenSSL開放源碼庫,實現(xiàn)了具有安全性的Web服務(wù)器,實現(xiàn)了服務(wù)器和客戶之間的安全通信。服務(wù)器端通過出示數(shù)字證書進行身份認證,Server同時限定Cl
6、ient也要出示身份驗證,實現(xiàn)了更具有可信性的雙向認證;通過采用SSL中的加密算法對傳輸?shù)臄?shù)據(jù)進行加密,以保證雙方傳輸數(shù)據(jù)的機密性;采用相關(guān)哈希函數(shù)如MAC,對數(shù)據(jù)進行驗證,以保證數(shù)據(jù)的完整性,確保信息數(shù)據(jù)在傳輸途中不會被非法篡改。從而為完成服務(wù)器與瀏覽器之間的安全通訊提供了保障。</p><p> 關(guān)鍵詞:信息安全;安全套接接字層; OpenSSL; HTTPS</p><p> T
7、he Design and Implementation of Secure Web Server Based on OpenSSL</p><p> Abstract:With the rapid development of computer network technology, business such as e-commerce, e-government, e-bank based on comp
8、uter network, has brought a lot of convenience for our daily life. However, due to the openness, flexibility, and sharing of the Internet, it also exposes us to the threat of leaking our personal information. It causes h
9、ighly heightened concerns to ensure our personal information secured in computer networks, recently.</p><p> HTTP is used to deliver messages in Web servers, which has no protection in any way. All messages
10、, which can be monitored by attackers, are plaintext in communication between server and client. Thus, it has become an emergency to secure confidentiality, integrity of the information in transactions.</p><p&
11、gt; In this article, we construct the project using OpenSSL to implement Web server program, which ensure a secure communication between the server and client. Double-sided authentication protects the information from a
12、ttackers among the server and client through digital certificates. In the framework of SSL, a specific encryption algorithm is used to achieve the confidentiality and one kind of hash algorithms is applied to guarantee t
13、he integrity of the data in transmission, which provides a guaran</p><p> Keywords:Information Security;SSL; OpenSSL; HTTPS</p><p><b> 目錄</b></p><p><b> 第一章 引言
14、1</b></p><p> 1.1 課題的研究背景1</p><p> 1.2 課題研究的目的和意義3</p><p> 1.3 課題的研究內(nèi)容及目標4</p><p> 1.4 本文的組織結(jié)構(gòu)4</p><p> 第二章 信息安全理論知識5</p><p>
15、 2.1 密碼學(xué)基礎(chǔ)5</p><p> 2.1.1 密碼體制5</p><p> 2.1.2 密碼體制的分類6</p><p> 2.1.3 對稱密碼體制6</p><p> 2.1.4 公鑰密碼體制7</p><p> 2.2 消息認證與數(shù)字簽名8</p><p>
16、2.2.1 消息摘要8</p><p> 2.2.2 數(shù)字簽名8</p><p> 2.3 公鑰基礎(chǔ)設(shè)施9</p><p> 2.3.1 公鑰基礎(chǔ)設(shè)施的概念9</p><p> 2.3.2 公鑰基礎(chǔ)設(shè)施的組成10</p><p> 2.3.3 數(shù)字證書11</p><p>
17、 2.4安全套接字層11</p><p> 2.4.1 SSL概述11</p><p> 2.4.2 SSL協(xié)議的結(jié)構(gòu)12</p><p> 2.4.3 SSL記錄協(xié)議12</p><p> 2.4.4 SSL握手協(xié)議13</p><p> 2.5本章小結(jié)16</p><p&
18、gt; 第三章 Web服務(wù)器開發(fā)基礎(chǔ)17</p><p> 3.1 Linux操作系統(tǒng)17</p><p> 3.1.1 Linux操作系統(tǒng)簡介17</p><p> 3.1.2 GNU編譯器套裝18</p><p> 3.1.3 make命令與Makefile文件19</p><p> 3.1.
19、4 GDB調(diào)試工具21</p><p> 3.2 OpenSSL介紹22</p><p> 3.2.1 OpenSSL的功能23</p><p> 3.2.2 OpenSSL的組成23</p><p> 3.2.3 OpenSSL的優(yōu)缺點25</p><p> 3.3 TCP/IP協(xié)議分析25&l
20、t;/p><p> 3.3.1 TCP/IP協(xié)議概述25</p><p> 3.3.2 網(wǎng)絡(luò)層協(xié)議(IP協(xié)議)26</p><p> 3.3.3 傳輸層協(xié)議(TCP和UDP)26</p><p> 3.4 HTTP協(xié)議分析27</p><p> 3.4.1 客戶端請求27</p><
21、p> 3.4.2 服務(wù)器響應(yīng)28</p><p> 3.4.3 HTTP消息交換28</p><p> 3.5 HTTPS協(xié)議簡介29</p><p> 3.6 Socket編程30</p><p> 3.6.1 套接字連接30</p><p> 3.6.2 套接字屬性31</p&g
22、t;<p> 3.7 本章小結(jié)31</p><p> 第四章 基于OpenSSL的安全Web服務(wù)器的設(shè)計33</p><p> 4.1 系統(tǒng)實現(xiàn)的功能33</p><p> 4.2 程序的設(shè)計思路33</p><p> 4.3 安全Web服務(wù)器程序的模塊設(shè)計37</p><p> 4
23、.3.1 初始化模塊37</p><p> 4.3.2 Web服務(wù)模塊37</p><p> 4.4 本章小結(jié)39</p><p> 第五章 基于OpenSSL的安全Web服務(wù)器的實現(xiàn)40</p><p> 5.1 開發(fā)環(huán)境的搭建40</p><p> 5.1.1編譯OpenSSL40</p
24、><p> 5.1.2 編譯生成OpenSSL動態(tài)鏈接庫40</p><p> 5.1.3搭建CA生成證書文件41</p><p> 5.2 詳細設(shè)計42</p><p> 5.2.1 初始化編程環(huán)境42</p><p> 5.2.2 創(chuàng)建Socket45</p><p> 5
25、.2.3創(chuàng)建監(jiān)聽線程46</p><p> 5.2.4 創(chuàng)建客戶端線程48</p><p> 5.2.5 分析請求48</p><p> 5.2.6 發(fā)送請求文件50</p><p> 5.3 本章小結(jié)55</p><p> 第六章 總結(jié)與展望56</p><p> 6.
26、1 全文總結(jié)56</p><p> 6.2 研究展望56</p><p><b> 致謝58</b></p><p><b> 參考文獻59</b></p><p><b> 第一章 引言</b></p><p> 隨著計算機網(wǎng)絡(luò)技術(shù)的
27、發(fā)展,21世紀已經(jīng)成為一個數(shù)字化、網(wǎng)絡(luò)化、信息化的時代,而它的核心是網(wǎng)絡(luò)。要實現(xiàn)信息化就要依靠完善的網(wǎng)絡(luò),因為網(wǎng)絡(luò)可以實現(xiàn)跨時間、空間的數(shù)據(jù)傳輸,從而使信息得到共享。自上個世紀90年代以來,以因特網(wǎng)(Internet)為代表的計算機網(wǎng)絡(luò)得到了飛速的發(fā)展,已從最初的教育科研網(wǎng)逐步發(fā)展成商業(yè)網(wǎng)絡(luò),并已成為僅次于全球電話網(wǎng)的世界第二大網(wǎng)絡(luò)。如今,因特網(wǎng)正在改變我們?nèi)粘I詈凸ぷ鞯母鱾€方面,加速了全球信息革命的進程。可以毫不夸張的說,因特網(wǎng)是人
28、類自印刷術(shù)發(fā)明以來在通信方面最偉大的變革。</p><p> 1.1 課題的研究背景</p><p> 據(jù)中國互聯(lián)網(wǎng)絡(luò)信息中心(CNNIC)于2012年1月16日在北京發(fā)布的《第29次中國互聯(lián)網(wǎng)絡(luò)發(fā)展狀況統(tǒng)計報告》顯示, 截至 2011 年 12 月底,中國網(wǎng)民數(shù)量突破 5 億,達到 5.13 億,全年新增網(wǎng)民 5580 萬?;ヂ?lián)網(wǎng)普及率較上年底提升 4 個百分點,達到 38.3%。&
29、lt;/p><p> 圖 1-1中國網(wǎng)民規(guī)模與普及率</p><p> 此外,2008-2010 年,網(wǎng)絡(luò)購物用戶規(guī)模連續(xù) 3 年保持 50%左右的高速增長。我國網(wǎng)絡(luò)購物用戶規(guī)模達到 1.94 億人,網(wǎng)絡(luò)購物使用率提升至37.8%。與 2010 年相比,網(wǎng)絡(luò)購物用戶增長 3344 萬人,增長率為 20.8%。隨著我國電子商務(wù)的普及,網(wǎng)民的理財習(xí)慣正逐步向網(wǎng)上交易轉(zhuǎn)移,針對網(wǎng)上銀行、證券機構(gòu)
30、和第三方支付的攻擊將劇增。</p><p> 圖 1-2 2007.12-2011.12 我國網(wǎng)購用戶數(shù)量、增長率及滲透率</p><p> 以上兩組數(shù)據(jù)表明中國有著極其龐大的網(wǎng)絡(luò)用戶群和接近兩億的網(wǎng)購用戶。在這個驚人的數(shù)字背后,有一個我們不得不面對的問題,那就是網(wǎng)絡(luò)信息安全。這個問題自從網(wǎng)絡(luò)誕生以來就一直困擾著我們,只不過如今計算機網(wǎng)絡(luò)的發(fā)展遠超出了以前的預(yù)計,所以在網(wǎng)絡(luò)社會日益發(fā)達
31、的今天,個人信息安全問題似乎變得尤為重要。</p><p> 2011年12月21日,中國互聯(lián)網(wǎng)遭遇了一次強大的“地震”,從國內(nèi)最大的中文技術(shù)社區(qū) CSDN 用戶數(shù)據(jù)庫被泄漏開始,幾天時間內(nèi),國內(nèi)多家大型網(wǎng)站用戶數(shù)據(jù)庫被陸續(xù)曝光,在互聯(lián)網(wǎng)上廣泛流傳。更為嚴重的是,被泄漏的用戶數(shù)據(jù)庫大多數(shù)包含明文保存的用戶密碼,受影響用戶數(shù)以億計。</p><p> 據(jù)2011年中國互聯(lián)網(wǎng)網(wǎng)絡(luò)安全報告顯
32、示,截至 2011年12月29日,CNCERT 通過公開渠道獲得疑似泄露的數(shù)據(jù)庫有26 個,涉及帳號、密碼 2.78 億條。其中,具有與網(wǎng)站、論壇相關(guān)聯(lián)信息的(例如,被聲稱屬于某個網(wǎng)站的數(shù)據(jù))數(shù)據(jù)庫有 12 個,涉及數(shù)據(jù) 1.36 億條;無法判斷網(wǎng)站、論壇關(guān)聯(lián)性的數(shù)據(jù)庫有 14 個,涉及數(shù)據(jù) 1.42 億條。</p><p> 這次“地震”過去僅僅一個月時間,2012年1月25日,新浪微博中再次爆出 Putty
33、、WinSCP 等 SSH 管理軟件中文版本(漢化版)存在后門程序?qū)е掠脩粜畔⑿孤兜氖录闆r。至 1月30日、31日,網(wǎng)絡(luò)安全企業(yè)、相關(guān)博客、論壇以及業(yè)內(nèi)人士等紛紛披露并確認后門程序存在的情況,同時還披露了黑客通過后門程序竊取大量 SSH 管理軟件用戶信息系統(tǒng)相關(guān)的賬號和口令信息、存儲在后門程序服務(wù)器的情況。隨后,由于黑客的后門程序服務(wù)器存在 SQL 注入漏洞以及目錄權(quán)限漏洞,導(dǎo)致其存儲的竊取信息被更多的人獲得。</p>
34、<p> CSDN和天涯社區(qū)用戶數(shù)據(jù)泄漏、部分SSH管理軟件中文版本存在后門程序?qū)е掠脩粜畔⑿孤兜劝踩录砹藦V泛的社會影響,再一次對互聯(lián)網(wǎng)企業(yè)和互聯(lián)網(wǎng)用戶敲響了安全警鐘?;ヂ?lián)網(wǎng)安全已經(jīng)受到非常嚴峻的挑戰(zhàn)。</p><p> 1.2 課題研究的目的和意義</p><p> 互聯(lián)網(wǎng)技術(shù)的快速發(fā)展,給我們的計算機信息系統(tǒng),特別是網(wǎng)絡(luò)通訊帶來了極其危險的安全隱患,面對日益嚴重的
35、網(wǎng)絡(luò)安全問題,計算機網(wǎng)絡(luò)應(yīng)用必須考慮和解決一個重要的課題,即如何在網(wǎng)絡(luò)中共享信息的同時更加有效地保障我們的信息不被他人竊取、利用——保護個人的信息安全。</p><p> 正如Bruce Schneier 所說,安全問題就如同一條鏈子,必須保證每一個環(huán)節(jié)的安全才能達到使整個鏈子具有安全性。所以在解決每一個安全問題之前,都應(yīng)先分析其可能存在的安全缺陷,進而采取相應(yīng)的安全措施。而以下的幾個方面體現(xiàn)了信息的安全性:&
36、lt;/p><p> ?。?)機密性(Confidentiality):通過加密等手段,保護信息免受主動的非法竊取、閱讀等攻擊;</p><p> ?。?)完整性(Integrity):確保信息數(shù)據(jù)在傳輸途中不會被非法篡改,也可以防止假冒的信息;</p><p> ?。?)鑒別(Authentication):確認訪問者的身份或消息的來源,防止冒充他人的行為發(fā)生;<
37、;/p><p> ?。?)不可否認性(Non-repudiation):保證消息制造者或發(fā)出者不能在事后否認他制造或發(fā)出的消息。</p><p> 本課題研究的目的就是通過設(shè)計一個安全Web服務(wù)器程序來保證信息傳遞過程中的安全,從而實現(xiàn)信息的安全傳輸。本文在Linux平臺下利用OpenSSL源碼庫,成功地實現(xiàn)了安全Web服務(wù)器的設(shè)計,也是在SSL協(xié)議的基本框架下搭建的一個網(wǎng)絡(luò)安全Web平臺,
38、用戶可以在請求頁面的同時受到SSL安全連接的保護,使用戶的個人信息安全得到保障。</p><p> 1.3 課題的研究內(nèi)容及目標</p><p> 本文的撰寫分為三部分:首先是對密碼學(xué)基礎(chǔ)知識、數(shù)字簽名(Digital Signature)、信息摘要(Message Digest)、公鑰基礎(chǔ)設(shè)施(PKI)、安全套接字層協(xié)議(SSL協(xié)議)等信息安全知識的介紹,為下一步安全Web服務(wù)器的設(shè)
39、計和實現(xiàn)打下理論基礎(chǔ),做好實踐的鋪墊;第二部分是進行Web服務(wù)器開發(fā)的編程基礎(chǔ),包括對Linux平臺、OpenSSL源碼、TCP/IP協(xié)議、HTTP(S)協(xié)議、Socket編程相關(guān)知識的補充;最后則是根據(jù)以上兩部分的理論研究和闡述,利用OpenSSL源碼在Linux平臺下用C語言實現(xiàn)安全Web服務(wù)器。</p><p> 利用此服務(wù)器程序來實現(xiàn)用戶信息及用戶所請求頁面信息的機密性、完整性、鑒別和不可否認性。<
40、;/p><p> 1.4 本文的組織結(jié)構(gòu)</p><p> 本文的組織結(jié)構(gòu)安排如下:</p><p> 第一章引言,簡要闡明本課題的研究背景、目的和意義,以及要實現(xiàn)的目標。</p><p> 第二章信息安全的理論知識,闡述了諸如密碼學(xué)基礎(chǔ)知識、信息摘要(Message Digest)、數(shù)字簽名(Digital Signature)、公鑰基
41、礎(chǔ)設(shè)施(PKI)、安全套接字層協(xié)議(SSL協(xié)議)等相關(guān)理論知識。</p><p> 第三章Web服務(wù)器開發(fā)的基礎(chǔ),包括對Linux平臺、OpenSSL源碼、TCP/IP協(xié)議、HTTP(S)協(xié)議、Socket編程的介紹。</p><p> 第四章講述的是基于OpenSSL的安全Web服務(wù)器程序的設(shè)計,提出設(shè)計思路、結(jié)構(gòu)、目標、各模塊整體流程。</p><p>
42、第五章是根據(jù)前面章節(jié)服務(wù)器程序的設(shè)計,實現(xiàn)一個基于OpenSSL的安全Web服務(wù)器程序,并通過測試驗證網(wǎng)絡(luò)的安全性。</p><p> 第六章主要是總結(jié)全文,提出本次設(shè)計和實踐中的不足,對一下步的研究方向及程序改進提出建議。</p><p> 第二章 信息安全理論知識</p><p> 在這一章我們主要介紹一些有關(guān)的信息安全理論知識,包括密碼學(xué)基礎(chǔ),消息認證,
43、數(shù)字簽名,公鑰基礎(chǔ)設(shè)施(PKI)和安全套接字層。</p><p><b> 2.1 密碼學(xué)基礎(chǔ)</b></p><p> 密碼學(xué)(Cryptology)是研究信息系統(tǒng)安全保密的科學(xué)。它包含兩個分支,一個是對信息進行編碼以保護信息的密碼編碼學(xué)(Cryptography),另外一個是研究分析破譯密碼的密碼分析學(xué)(Cryptanalysis)。</p>&
44、lt;p> 密碼技術(shù)的思想是偽裝信息,使未授權(quán)者不能理解它的真實含義。它分為兩個部分,第一部分是信息保密,第二部分是信息認證。信息保密用來抵抗被動攻擊,保證信息的機密性,信息認證用來抵抗主動攻擊,保證信息的完整性和不可否認性。本小節(jié)前一部分主要是實現(xiàn)信息保密,比如對稱密碼體制的密碼算法。而后面的一部分主要是消息認證,像非對稱密碼體制的密碼算法。</p><p> 2.1.1 密碼體制</p>
45、<p> 一個密碼系統(tǒng),通常簡稱為密碼體制(Cryptosystem),它由五個部分組成:</p><p> 明文空間M,它是全體明文的集合。</p><p> 密文空間C,它是全體密文的集合。</p><p> 密鑰空間K,它是全體密鑰的集合。其中每一個密鑰K均由加密密鑰Ke和解密密鑰Kd組成,即K=<Ke,Kd>。</p&
46、gt;<p> 加密算法E,它是一族由M到C的加密變換。</p><p> 解密算法D,它是一族由C到M的解密變換。</p><p> 對于每一個確定的密鑰,加密算法將確定一個具體的加密變換,解密算法將確定一個具體的解密變換,而且解密變換就是加密變換的逆變換。對于明文空間M中的每一個明文M,加密算法E在密鑰Ke的控制下將明文M加密成密文C,即C=E(M,Ke);而解密算
47、法D在密鑰Kd的控制下將密文C解密成明文M,即M=D(C,Kd)=D(E(M,Ke), Kd)。</p><p> 2.1.2 密碼體制的分類</p><p> 密碼體制的核心是加解密算法。在加解密過程中,根據(jù)密碼算法所使用的加密密鑰是否相同或者是否能由其中一個很容易推出另一個,可將密碼體制分為對稱密碼體制(又稱單鑰密碼體制)和非對稱密碼體制(又稱雙鑰密碼體制,也稱為公鑰密碼體制)。&
48、lt;/p><p> 也就是說,如果一個密碼體制的Ke=Kd,或由其中一個很容易推出另一個,則稱為單密鑰密碼體制或?qū)ΨQ密碼體制,否則稱為雙密鑰密碼體制或非對稱密碼體制。進而,如果在計算機上Kd不能由Ke推出,這樣將Ke公開也不會損害Kd的安全,于是便可將Ke公開。這種密碼體制稱為公開密鑰密碼體制,簡稱為公鑰密碼體制。</p><p> 2.1.3 對稱密碼體制</p><
49、;p> 對稱密碼體制對明文消息加密有兩種方式:一是明文消息按字符(如二元數(shù)字)逐位進行加密,稱之為流密碼;另一種是將明文消息分組(含有多個字符),逐組地進行加密,稱之為分組密碼。</p><p> 以往存在的密碼絕大多數(shù)都是對稱密碼,它已經(jīng)存在了很長時間。比如最早使用密碼技術(shù)的應(yīng)該是四千年前的古代埃及人。而在公元前約50年,羅馬皇帝朱利葉·凱撒(Julius Casesar)發(fā)明了一種用于戰(zhàn)時
50、秘密通信的方法,后來被稱為凱撒密碼。</p><p> 隨著計算機技術(shù)的飛速發(fā)展,由于商業(yè)應(yīng)用和大量網(wǎng)絡(luò)通信的需要,密碼技術(shù)得到了前所未有的發(fā)展。1977年美國國家標準局正式發(fā)布數(shù)據(jù)加密標準DES(Data Encryption Standard)作為聯(lián)邦標準,并免費提交美國公眾使用。不得不說自從DES出現(xiàn)后密碼學(xué)領(lǐng)域得到了重大的革新,從原來的保護加密算法,到如今的保護加密密鑰,使密碼學(xué)這個古老的學(xué)科煥發(fā)出新的
51、活力。</p><p> 而事實證明對稱密碼體制的確有著非常重要的特點,集中表現(xiàn)在以下幾個方面:</p><p> 在對稱密碼體制中,同一個密鑰既用于加密也用于解密。</p><p><b> 對稱加密速度快。</b></p><p> 因為接收者需要得到對稱密鑰,所以對稱加密容易受到中途攔截竊聽的攻擊。<
52、/p><p> 對稱密碼體制中密鑰的個數(shù)大約是以參與者數(shù)目的平方的速度增長,因此難將它的應(yīng)用擴展到大范圍的人群中。</p><p> 對稱密碼體制需要復(fù)雜的密鑰管理。</p><p> 對稱密碼技術(shù)不適用于數(shù)字簽名和不可否認性。</p><p> 2.1.4 公鑰密碼體制</p><p> 公鑰密碼體制的概念于1
53、976年由W.Diffie和M.Hellman提出,它的產(chǎn)生是密碼學(xué)歷史上的一次革命,它對于保密通信、密鑰分發(fā)和鑒別等領(lǐng)域有著深遠的影響,它的出現(xiàn)是密碼發(fā)展史上的里程碑。</p><p> 公鑰密碼體制的出現(xiàn)解決了對稱密碼體制中密鑰分發(fā)的難題,使密鑰的個數(shù)不再是以參與者的數(shù)目的平方的速度增長,它提供了一種全新的的加密模式。在公鑰密碼之前的整個密碼學(xué)的發(fā)展史中,所有的密碼算法,都是基于代換和置換這兩個工具的。而公
54、鑰密碼體制不再基于代換和置換,而是基于數(shù)學(xué)函數(shù)。</p><p> 但是我們要注意的是,并不是說公鑰密碼在防范密碼分析上比對稱密碼更安全。事實上任何密碼方案的安全程度都依賴于密鑰的長度和破譯密碼所包含的計算工作量,從抗擊密碼分析的角度講,無論對稱密碼還是公鑰密碼原則上都沒有比對方優(yōu)越的地方。還有就是也并不能說公鑰密碼使得對稱密碼已經(jīng)過時了。相反,由于當(dāng)前公開密鑰加密在計算上的巨大開銷,導(dǎo)致公鑰密碼必須與對稱密碼
55、相互取長補短,結(jié)合使用。</p><p> 下面是公鑰密碼體制的一些特點:</p><p> 使用公鑰密碼技術(shù)時,用一個密鑰加密的東西只能用另外一個密鑰解密。</p><p> 需要分發(fā)的密鑰數(shù)目和參與者的數(shù)目一樣,這樣,在參與者數(shù)目很大的情況下,公鑰密碼技術(shù)仍然會很好工作。</p><p> 公鑰密碼技術(shù)支持數(shù)字簽名和消息認證,可以
56、保證消息的不可否認性。</p><p> 公鑰密碼加密速度相比對稱密碼加密要慢。</p><p> 2.2 消息認證與數(shù)字簽名</p><p> 在這一節(jié)我們主要介紹一下消息認證與數(shù)字簽名,這兩種技術(shù)分別保證了消息的完整性和不可否認性。</p><p> 2.2.1 消息摘要</p><p> 消息摘要(Me
57、ssage Digest)又稱為數(shù)字摘要(Digital Digest)。它是一個固定長度的值,這個值對一段消息或文本來說是唯一的,它由一個單向Hash函數(shù)對消息進行運算而產(chǎn)生。如果消息在途中改變了,則接收者通過比較消息的新摘要與原摘要,就可知道消息是否被改變了。因此消息摘要保證了消息的完整性。而其中最關(guān)鍵的部分莫過于Hash函數(shù)。</p><p> Hash函數(shù)可以接受可變長度的數(shù)據(jù)輸入,并生成輸入數(shù)據(jù)的固定
58、長度表示。由于其獨特的屬性,Hash函數(shù)有時也叫做單向函數(shù),這使得逆過程的實現(xiàn)非常困難,甚至不可能實現(xiàn)。一些人把消息摘要叫做輸入數(shù)據(jù)的數(shù)字指紋。重要的是Hash函數(shù)的輸出結(jié)果都是可以預(yù)測的,并沒有隨機性的存在空間。即如果兩次輸入同樣的數(shù)據(jù),那么,Hash函數(shù)應(yīng)該能夠生成相同的消息摘要值。輸入數(shù)據(jù)中的一位發(fā)生了變化,都會導(dǎo)致生成非常不同的哈希值。</p><p> Hash函數(shù)的輸出結(jié)果應(yīng)該是足夠小的,以便管理這
59、些生成的摘要。同時,這些摘要又要足夠大,這樣才不易受到攻擊。諸如MD5(RFC 1321)和SHA-1這樣的哈希算法是當(dāng)前最常用的算法。MD5會生成128位(16字節(jié))的消息摘要,而SHA-1生成160位(20字節(jié))的摘要塊。Hash函數(shù)并不能提供機密性,并且它們不能使用秘密密鑰以生成摘要。</p><p> Hash函數(shù)還可以被視為壓縮函數(shù),它能將大的輸入數(shù)據(jù)塊表示為可管理的數(shù)據(jù)塊。大型的消息進行數(shù)字簽名時,
60、都是在其哈希值上執(zhí)行的,而不是在消息自身上執(zhí)行,主要是因為性能方面的原因。</p><p> 2.2.2 數(shù)字簽名</p><p> 數(shù)字簽名(Digital Signature)的功用類似寫在紙上的簽名,但它又不同于普通簽名,它使用了公鑰加密領(lǐng)域的技術(shù)實現(xiàn),是一種用于鑒別數(shù)字信息的方法。一套數(shù)字簽名通常定義兩種互補的運算,一個用于簽名,另一個用于認證。</p><
61、p> 數(shù)字簽名是通過復(fù)雜的加密技術(shù)而產(chǎn)生的。盡管這些技術(shù)難以設(shè)計,但他們的基本原理卻是非常簡單,易于理解。數(shù)字簽名的安全性基于非對稱加密,其加密與解密過程使用不同的密鑰。</p><p> 公鑰算法用于數(shù)據(jù)加密時,一般來說加密密鑰是公開的,而解密密鑰是保密的,并且具有根據(jù)加密密鑰不能推算出解密密鑰的特點。當(dāng)公開密鑰算法用于數(shù)字簽名時,要求就有所不同。因為數(shù)字簽名是要求所有人都能夠驗證的,所以要求用于數(shù)字
62、簽名的公鑰算法的解密密鑰是公開的,而用于簽名的加密密鑰是保密的。為了安全和防止簽名偽造,同時要求根據(jù)解密密鑰不能推算出加密密鑰。并非所有的公鑰算法都能滿足于數(shù)字簽名的這些要求,目前常用于數(shù)字簽名的算法有RSA和DSA等。事實上,用于數(shù)字簽名的公開密鑰算法有時也不能用于數(shù)據(jù)加密,如DSA算法就是這樣一個專門用于數(shù)字簽名的公鑰算法。</p><p> 數(shù)字簽名的計算過程首先是計算出待簽名數(shù)據(jù)的摘要,然后對這個摘要用
63、簽名者的私鑰加密。摘要提供了一種檢測數(shù)據(jù)是否被改動過的方法,而數(shù)字簽名則能夠防止摘要本身被篡改。這樣數(shù)字簽名就有力地證明了一份數(shù)據(jù)是否就是簽名計算時使用的數(shù)據(jù)。</p><p> 2.3 公鑰基礎(chǔ)設(shè)施</p><p> 從字面上理解,公鑰基礎(chǔ)設(shè)施(Public Key Infrastructure,PKI)就是利用公鑰理論和技術(shù)建立的提供安全服務(wù)的基礎(chǔ)設(shè)施。所謂基礎(chǔ)設(shè)施,就是在某個大環(huán)
64、境下普遍適用的系統(tǒng)和準則。例如現(xiàn)實生活中的電力系統(tǒng),它提供的服務(wù)是電能,我們可以把電燈、電視、空調(diào)等看成是電力系統(tǒng)這個基礎(chǔ)設(shè)施的一些應(yīng)用。公鑰基礎(chǔ)設(shè)施則是希望從技術(shù)上解決網(wǎng)上身份認證、信息的機密性、信息的完整性和不可否認性等安全問題,為網(wǎng)絡(luò)應(yīng)用提供可靠的安全服務(wù)。</p><p> 2.3.1 公鑰基礎(chǔ)設(shè)施的概念</p><p> PKI是一套完整的Internet安全解決方案。PKI
65、技術(shù)采用證書管理公鑰,通過第三方的可信任機構(gòu)——認證機構(gòu)(Certification Authority,CA),把用戶的公鑰和用戶的其他信息(如名稱、E-mail、身份證號等)捆綁在一起,防止公鑰被假冒。PKI的主要目的是通過自動管理密鑰和證書,為用戶建立起一個安全的網(wǎng)絡(luò)運行環(huán)境。按照X.509標準的定義,PKI“是一個包括硬件、軟件、人員、策略和規(guī)程的集合,用來實現(xiàn)基于公鑰密碼體制和證書的產(chǎn)生、管理、存儲、分發(fā)、和撤銷等功能”。&l
66、t;/p><p> 認證機構(gòu)(CA)是PKI的核心。它是一個或多個用戶信任、提供用戶身份驗證的第三方機構(gòu),承擔(dān)公鑰體系中公鑰的合法性檢驗的責(zé)任。</p><p> 2.3.2 公鑰基礎(chǔ)設(shè)施的組成</p><p> PKI包括認證機構(gòu)、注冊機構(gòu)、證書庫、檔案庫以及PKI用戶。</p><p> (1)認證機構(gòu)(CA)</p>
67、<p> 認證機構(gòu)和公正人類似。認證機構(gòu)(CA)是PKI一個基本的組成部分,是提供PKI安全服務(wù)的中心。CA是計算機硬件、軟件和操作人員的集合體,它的兩個重要屬性是名稱和公鑰。</p><p> CA執(zhí)行4個基本的PKI功能:簽發(fā)證書;維持證書狀態(tài)信息和簽發(fā)CRL;發(fā)布它的當(dāng)前證書和CRL;維持有關(guān)到期證書的狀態(tài)信息檔案。</p><p> ?。?)注冊機構(gòu)(RA)</
68、p><p> 注冊機構(gòu)(RA)是一個可以被CA信任的實體,它能夠為用戶注冊提供擔(dān)保。RA是為CA驗證證書內(nèi)容的,RA需要驗證證書的申請者與在證書中反映的內(nèi)容是否相符,然后把這些信息提供給CA,由CA簽發(fā)證書。和CA相似RA也是計算機硬件、軟件和操作人員的集合。但和CA不同的是,RA通常由一個人來操作。每一個CA包括一張可信任的RA列表。</p><p><b> ?。?)證書庫&l
69、t;/b></p><p> 證書庫是CA系統(tǒng)中活動的數(shù)字證書的數(shù)據(jù)庫。證書庫的主要任務(wù)是為收到數(shù)字簽名消息的個人和商務(wù)提供可證實數(shù)字證書狀態(tài)的數(shù)據(jù)。</p><p> PKI應(yīng)用在很大程度上依賴于發(fā)布證書和證書狀態(tài)信息的目錄服務(wù)。目錄提供了一種證書分發(fā)、存儲、管理、更新的方法。目錄服務(wù)是X.500標準或者該標準子集的典型實現(xiàn)。</p><p><b
70、> ?。?)檔案庫</b></p><p> 檔案庫是一個解決將來爭執(zhí)的信息庫,為CA承擔(dān)長期存儲文檔信息的責(zé)任。檔案的主要任務(wù)是存儲和保護充足的信息,以確定在一份舊的文檔中數(shù)字簽名是可以信任的。檔案庫聲明在某個時刻它收到的信息是正確的,并且在檔案庫中沒有被修改。</p><p><b> ?。?)PKI用戶</b></p><
71、p> PKI用戶有兩種:證書持有者和證書依賴方。證書依賴方是指信息接收方,依賴方將驗證持有的證書是否有效。</p><p> 2.3.3 數(shù)字證書</p><p> 數(shù)字證書是公開密鑰體制的一種密鑰管理媒介。證書提供了一種在Internet上驗證身份的方式,其作用類似于駕駛執(zhí)照和身份證。證書包含了能夠證明證書持有者身份的可靠信息,是持有者在網(wǎng)絡(luò)上證明自己身份的憑證。</p
72、><p> 從證書的使用者來看,證書可分為系統(tǒng)證書和用戶證書。系統(tǒng)證書指CA系統(tǒng)自身的證書,包括CA的證書、業(yè)務(wù)受理點的證書以及CA系統(tǒng)操作員的證書;用戶證書從應(yīng)用角度可將其分為個人用戶證書、企業(yè)用戶證書和服務(wù)器證書。</p><p> 從證書的用途來看,數(shù)字證書可分為加密證書和簽名證書。加密證書用于對用戶傳送信息進行加密,以保證信息的真實性和完整性;簽名證書用于對用戶信息進行簽名,以保證
73、信息的不可否認性。</p><p><b> 2.4安全套接字層</b></p><p> 2.4.1 SSL概述</p><p> 安全套接層(Secure Socket Layer,SSL)是一種在兩臺機器之間提供安全通道的協(xié)議。它具有保護傳輸數(shù)據(jù)以及識別通信機器的功能。安全通道是透明的,意思就是說它對傳輸?shù)臄?shù)據(jù)不加變更。客戶與服務(wù)器
74、之間的數(shù)據(jù)是經(jīng)過加密的,一端寫入的數(shù)據(jù)完全是另一端讀取的內(nèi)容。透明性使得幾乎所有基于 TCP 的協(xié)議稍加改動就可以在 SSL 上運行,非常方便。</p><p> SSL 的首要用途就是保護使用 HTTP 的 Web 通信。與傳統(tǒng)連接的區(qū)別是,當(dāng)在 HTTP 中建立了 TCP 連接后,客戶端先發(fā)送一個請求,服務(wù)器隨即回應(yīng)一個文檔。而在使用 SSL 的時候,客戶端先創(chuàng)建一個 TCP 連接,并在其上建立一條 SSL
75、 通道,然后再在 SSL 通道上發(fā)送同樣的請求,而服務(wù)器則以相同的方式沿 SSL 連接予以響應(yīng)。</p><p> 2.4.2 SSL協(xié)議的結(jié)構(gòu)</p><p> 圖2-1給出了的結(jié)構(gòu)示意圖。SSL借助TCP協(xié)議來提供端到端的安全服務(wù),SSL并不是一個單獨的協(xié)議,而是兩層結(jié)構(gòu)的協(xié)議集合,上層包括SSL握手協(xié)議、SSL修改密文規(guī)約協(xié)議和SSL警告協(xié)議,下層包括SSL記錄協(xié)議。</p
76、><p> 圖2-1 SSL協(xié)議棧</p><p> 2.4.3 SSL記錄協(xié)議</p><p> SSL記錄協(xié)議為通信提供機密性和完整性保護,圖2-2給出了該協(xié)議的工作流程,具體工作過程如下:</p><p> 圖2-2 SSL記錄協(xié)議操作流程圖</p><p> 接收到應(yīng)用層數(shù)據(jù)后,SSL記錄協(xié)議首先對其進行
77、分組,分組后數(shù)據(jù)塊的長度不超過214(16384)字節(jié)。</p><p> 對數(shù)據(jù)塊進行壓縮,壓縮過程中不能出現(xiàn)信息的丟失,同時增加的長度不能超過1024字節(jié)(壓縮處理是可選的,現(xiàn)有SSL3.0和TLS1.0都沒有指定壓縮算法)。</p><p> 在壓縮后的數(shù)據(jù)上計算機消息認證碼MAC,并把MAC附加在數(shù)據(jù)塊之后。</p><p> 對添加MAC后的數(shù)據(jù)塊進
78、行加密,加密可以采用流加密或組加密的方式。</p><p> 為加密后的數(shù)據(jù)添加SSL記錄協(xié)議的頭部。</p><p> 2.4.4 SSL握手協(xié)議</p><p> SSL 握手有三個目的。第一,客戶端與服務(wù)器需要就一組用于保護數(shù)據(jù)的算法達成一致。第二,它們需要確立一組由那些算法所使用的加密密鑰。第三,握手還可以選擇對客戶端進行認證。</p>
79、<p> 整個工作過程如圖2-3所示:</p><p> 圖2-3 SSL握手概述</p><p> (1)客戶端將它所支持的算法列表連同一個密鑰產(chǎn)生過程用作輸入的隨機數(shù)發(fā)送給服務(wù)器。</p><p> ?。?)服務(wù)器根據(jù)從列表的內(nèi)容中選擇一種加密算法,并將其連同一份包含服務(wù)器公用密鑰的證書發(fā)回給客戶端。該證書還包含了用于認證目的的服務(wù)器標識,服務(wù)器
80、同時還提供了一個作為密鑰產(chǎn)生過程部分輸入的隨機數(shù)。</p><p> ?。?)客戶端對服務(wù)器的證書進行驗證,并抽取服務(wù)器的公用密鑰。然后,再產(chǎn)生一個稱做 pre_master_secret 的隨機密碼串,并使用服務(wù)器的公用密鑰對其進行加密。最后,客戶端將加密后的信息發(fā)送給服務(wù)器。</p><p> ?。?)客戶端與服務(wù)器端根據(jù) pre_master_secret 以及客戶端與服務(wù)器的隨機數(shù)
81、值獨立計算出加密和 MAC 密鑰。</p><p> ?。?)客戶端將所有握手消息的 MAC 值發(fā)送給服務(wù)器。</p><p> ?。?)服務(wù)器將所有握手消息的 MAC 值發(fā)送給客戶端。</p><p> 第一和第二步實現(xiàn)了第一個目標:用于保護數(shù)據(jù)的算法達成一致??蛻舳烁嬖V服務(wù)器它所支持的算法,而服務(wù)器選擇其中的一種算法。當(dāng)客戶端收到了服務(wù)器在第二步所發(fā)的消息時,
82、它也會知道這種算法,所以雙方現(xiàn)在就都知道要使用什么算法了。第二個目標,確立一組加密密鑰是通過第二和第三步來實現(xiàn)的。在第二步服務(wù)器向客戶端提供其證書,這樣就可以允許客戶端給服務(wù)器傳送密碼。經(jīng)過第三步后,客戶端與服務(wù)器端就都知道了 pre_master_secret??蛻舳酥?pre_master_secret 是因為這是它產(chǎn)生的,而服務(wù)器則是通過解密而得到pre_master_secret 的。其中第 3 步是握手過程中的關(guān)鍵一步。所有
83、要被保護的數(shù)據(jù)都依賴于 pre_master_secret的安全。原理非常簡單:客戶端使用服務(wù)器的公用密鑰(從證書中抽取的)來加密共享密鑰,而服務(wù)器使用其私用密鑰對共享密鑰進行解密。</p><p> 握手的剩余步驟主要用于確保這種交換過程的安全進行。然后在第 4 步,客戶端與服務(wù)器分別使用相同的密鑰導(dǎo)出函數(shù)(key derivation function,KDF)來產(chǎn)生 master_secret,最后再次通
84、過 KDF 使用 master_secret來產(chǎn)生加密密鑰。</p><p> 第五與第六步用以防止握手本身遭受篡改。設(shè)想一個攻擊者想要控制客戶端與服務(wù)器所使用的算法。客戶端提供多種算法的情況相當(dāng)常見,某些強度弱而某些強度強,以便能夠與僅支持弱強度算法的服務(wù)器進行通信。攻擊者可以刪除客戶端在第 1 步所提供的所有高強度算法,于是就迫使服務(wù)器選擇一種弱強度的算法。第 5 步與第 6 步的 MAC 交換就能阻止這種
85、攻擊,因為客戶端的 MAC 是根據(jù)原始消息計算得出的,而服務(wù)器的 MAC 是根據(jù)攻擊者修改過的消息計算得出的,這樣經(jīng)過檢查就會發(fā)現(xiàn)不匹配。由于客戶端與服務(wù)器所提供的隨機數(shù)為密鑰產(chǎn)生過程的輸入,所以握手不會受到重放攻擊的影響。這些消息是首個在新的加密算法與密鑰下加密的消息。</p><p> 因此,在此過程結(jié)束時,客戶端與服務(wù)器已就使用的加密算法達成一致,并擁有了一組與那些算法一起使用的密鑰。更重要的是,它們可以
86、確信攻擊者沒有干擾握手過程,所以磋商過程反映了雙方的真實意圖。</p><p> 以上所描述的每一步都需要通過一條或多條握手消息來實現(xiàn)。圖2-4描述了握手中的各條消息。</p><p> 圖2-4 SSL握手消息</p><p> 第 1 步對應(yīng)一條單一的握手消息,ClientHello。</p><p> 第 2 步對應(yīng)一系列 SS
87、L 握手消息,服務(wù)器發(fā)送的第一條件消息為 ServerHello,其中包含了它所選擇的算法,接著再在 Certificate 消息中發(fā)送其證書。最后,服務(wù)器發(fā)送ServerHelloDone 消息以表示這一握手階段的完成。需要 ServerHelloDone 的原因是一些更為復(fù)雜的握手變種還要在 Certificate 之后發(fā)送其他一些消息。當(dāng)客戶端接收到 ServerHelloDone消息時,它就知道不會再有其他類似的消息過來了,于是
88、就可以繼續(xù)它這一方的握手。</p><p> 第 3 步對應(yīng) ClientKeyExchange 消息。</p><p> 第 5 與第 6 步對應(yīng) Finished 消息。該消息是第一條使用剛剛磋商過的算法加以保護的消息。為了防止握手過程遭到篡改,該消息的內(nèi)容是前一階段所有握手消息的 MAC 值。然而,由于 Finished 消息是以磋商好的算法加以保護的,所以也要與新磋商的 MAC
89、 密鑰一起計算消息本身的 MAC 值。</p><p> 以上就是SSL握手協(xié)議的整個過程,在此協(xié)議的保證下,我們建立一個安全的信息通道才成為可能。</p><p><b> 2.5本章小結(jié)</b></p><p> 通過本章的介紹,我們了解了有關(guān)信息安全的理論知識,其中重點介紹了密碼學(xué)體制,公鑰基礎(chǔ)設(shè)施和安全套接字層。安全套接字層中我們
90、主要講述了SSL協(xié)議的握手協(xié)議。這些都為以后的設(shè)計作了理論的鋪墊。</p><p> 第三章 Web服務(wù)器開發(fā)基礎(chǔ)</p><p> 在這一章,我們將介紹有關(guān)Web服務(wù)器開發(fā)的基礎(chǔ)知識,包括對Linux平臺、OpenSSL源碼、TCP/IP協(xié)議、HTTP(S)協(xié)議、Socket編程,以便我們更方便快捷地開發(fā)出應(yīng)用程序。</p><p> 3.1 Linux操作
91、系統(tǒng)</p><p> Linux是一個開放源代碼的操作系統(tǒng),它的出現(xiàn)打破了傳統(tǒng)商業(yè)操作系統(tǒng)長久以來形成的技術(shù)壟斷和壁壘,進一步推動了人類信息技術(shù)的發(fā)展。更為重要的是,Linux樹立了“自由開放之路”的成功典范。</p><p> 3.1.1 Linux操作系統(tǒng)簡介</p><p> 在網(wǎng)絡(luò)日益發(fā)達的今天,Linux幾乎成為了Web服務(wù)器的代名詞,當(dāng)Linux
92、似乎已經(jīng)成為習(xí)慣,我們不得不感嘆于它的強大,不得不佩服Linus Torvalds和因特網(wǎng)上廣大UNIX程序員的智慧。</p><p> 任何事物的發(fā)展都是要有一定的先決條件的,當(dāng)然Linux的發(fā)展也不例外,其巨大的成功要歸功于在它之前誕生的UNIX和GNU。</p><p> 1969年,貝爾實驗室(AT&T)的系統(tǒng)程序員Ken Thompson和Dennis Richie共
93、同開發(fā)了第一個版本的UNIX。早期的UNIX是由匯編語言編寫,但是從第3版后使用了C語言重寫。隨后UNIX逐漸走出實驗室并成為了主流的操作系統(tǒng)之一。但是UNIX一直是企業(yè)級服務(wù)器或工作站上所使用的操作系統(tǒng),而這些大型的服務(wù)器或是工作站都是非常昂貴的。有些人想在相對廉價的計算機上開發(fā)出具有UNIX一樣強大功能的操作系統(tǒng),用來降低開發(fā)和維護的成本,Linux就是在這個大背景下出現(xiàn)的。</p><p> Linux能
94、夠存在并在今天得到巨大的發(fā)展是無數(shù)人共同努力的結(jié)果。前面所說的Linux實際上僅是一個內(nèi)核,它是Linux操作系統(tǒng)的核心部分,但是僅有內(nèi)核是遠遠不夠的,系統(tǒng)中的大多數(shù)工具都來自于自由軟件基金會的GNU項目。包括像GCC、GDB、GNU make、bash、GNU Emacs等軟件。</p><p> 3.1.2 GNU編譯器套裝</p><p> GCC(GNU Compiler Co
95、llection,GNU編譯器套裝),是一套由 GNU 開發(fā)的編程語言編譯器。它是一套以 GPL(General Public License,GNU通用公共許可證)及 LGPL(GNU Lesser General Public License ,GNU 寬通用公共許可證)許可證所發(fā)行的自由軟件,也是 GNU計劃的關(guān)鍵部分。</p><p> 雖然我們經(jīng)常稱GCC是C語言的編譯器,但是它可以由C語言的源文件生
96、成相應(yīng)的可執(zhí)行文件,所以說整個過程不僅僅是編譯而是分別要經(jīng)歷:預(yù)處理、編譯、匯編、鏈接四個相互關(guān)聯(lián),相互依存的步驟。表3-1是在編程過程中用到的幾個GCC的重要的命令參數(shù)及其對應(yīng)的說明。</p><p> 表3-1 GCC對應(yīng)的部分命令參數(shù)及說明</p><p> 3.1.3 make命令與Makefile文件</p><p> GNU make是一個命令工具
97、,是一個用來控制軟件構(gòu)建過程的自動化管理工具。make工具通過稱為Makefile的文件來完成并自動維護編譯工作,它是由Richard Stallman與Roland McGrath設(shè)計開發(fā)的。</p><p> make命令設(shè)計用于解決多個源文件編譯、測試所帶來的不便,它會在必要的時候重新編譯所有受改動影響的源文件,而對于那一些沒有改變的源文件,make命令則不會對其進行重新編譯。<
98、/p><p> 雖然說make內(nèi)部內(nèi)置了諸多智能的機制,但只憑借自身是無法了解應(yīng)該如何建立相應(yīng)的應(yīng)用程序的,而Makefile文件則是由此而產(chǎn)生,它會告訴它的make命令,應(yīng)該如何構(gòu)造相應(yīng)的應(yīng)用程序。只要寫好了Makefile文件那么只需要一個命令便能編譯好整個工程,極大地提高了軟件開發(fā)的效率。</p><p> 默認的情況下,make命令會在當(dāng)前目錄下按順序找尋文件名為“GNUmakef
99、ile”、“Makefile”、“makefile”的文件,找到后便解釋這個文件,以生成目標。在這三個文件名中,最好使用“Makefile”這個文件名,因為,這個文件名第一個字符為大寫,這樣有一種醒目的感覺。最好不要用“GNUmakefile”,這個文件是GNU的make識別的。有另外一些make只對全小寫的“makefile”文件名敏感,但是基本上來說,大多數(shù)的make都支持“Makefile”和“makefile”這兩種默認文件名。
100、但如果要指定特定的Makefile,你可以使用make的“-f”和“--file”參數(shù)。此外在Makefile中的命令,必須要以[Tab]鍵開始</p><p> 表3-2和表3-3分別列出了自己在編寫Makefile文件時常用到的一些知識。</p><p> 表3-2 Makefile文件的組成</p><p> 表3-3 make的主要預(yù)定義變量<
101、/p><p> 3.1.4 GDB調(diào)試工具</p><p> GDB調(diào)試工具能讓我們觀察另一個程序在執(zhí)行時的內(nèi)部活動,或程序出錯時發(fā)生了什么。它主要為我們做四件事:</p><p> ?。?)運行程序,設(shè)置所有的能影響程序運行的東西。</p><p> (2)保證程序在指定的條件下停止。</p><p> ?。?)當(dāng)
102、程序停止時,我們可以檢查發(fā)生了什么。</p><p> ?。?)改變我們的程序。那樣我們可以試著修正某個bug引起的問題,然后繼續(xù)查找另一個bug。</p><p> 表3-4列出了GDB調(diào)試工具常用的命令。</p><p> 表3-4 GDB調(diào)試工具常用命令</p><p> 因為在程序中加入了線程模塊,所以在這我們簡單介紹一下GDB
103、多線程調(diào)試的知識。主要介紹一下GDB多線程調(diào)試的基本命令:</p><p> info threads:顯示當(dāng)前可調(diào)試的所有線程,每個線程會有一個GDB為其分配的ID,后面操作線程的時候會用到這個ID。 </p><p> thread ID:切換當(dāng)前調(diào)試的線程為指定ID的線程。 </p><p> break thread_test.c:123 thread
104、 all:在所有線程中相應(yīng)的行上設(shè)置斷點。</p><p> thread apply ID1 ID2 command:讓一個或者多個線程執(zhí)行GDB命令。</p><p> thread apply all command:讓所有被調(diào)試線程執(zhí)行GDB命令command。</p><p> 3.2 OpenSSL介紹</p><p>
105、上一章我們介紹了SSL協(xié)議,但它只是一個規(guī)程,也就是說真正想要應(yīng)用SSL協(xié)議必須將這些協(xié)議轉(zhuǎn)換成代碼,這樣才能應(yīng)用到我們的網(wǎng)絡(luò)或是程序中。</p><p> OpenSSL最初是由Eric A.Yang和Tim J.Hudson開發(fā),現(xiàn)在它由OpenSSL項目組負責(zé)改進和開發(fā),他們是由全球的一些技術(shù)精湛的志愿技術(shù)人員組成,它是一個開放源碼的SSL協(xié)議實現(xiàn),它采用C語言作為開發(fā)語言,具有很好的可移植性。</
106、p><p> 3.2.1 OpenSSL的功能</p><p> 作為一個基于密碼學(xué)的安全開發(fā)包,OpenSSL提供的功能相當(dāng)強大和全面,囊括了主要的密碼算法、常用的密鑰和證書封裝管理功能及SSL協(xié)議,并提供了豐富的應(yīng)用程序,供測試或其他目的使用。下面介紹一下源碼實現(xiàn)的各種功能:</p><p> 對稱加密算法。OpenSSL一共提供了8種對稱加密算法,其中7種是
107、分組加密算法,僅有的一種是流加密算法RC4。其中7種分別是DES,AES,Blowfish,CAST,IDEA,RC2,RC5并且支持四種常用的分組加密模式。</p><p> 非對稱加密算法。OpenSSL一共實現(xiàn)了4種加密算法,包括DH算法、RSA算法、DSA算法和橢圓曲線算法(EC)。</p><p> 信息摘要算法。OpenSSL實現(xiàn)了5種信息摘要算法,分別是MD2,MD5,M
108、DC2,SHA(SHA1),和RIPEMD。</p><p> 密鑰和證書管理。這一部分是PKI的一個重要組成部分,OpenSSL為之提供了豐富的功能,支持多種標準。支持對各種證書格式的編解碼,可以對證書進行管理,包括對密鑰產(chǎn)生、請求產(chǎn)生、證書簽發(fā)、吊銷和驗證等功能。</p><p> SSL和TLS協(xié)議功能。OpenSSL實現(xiàn)了SSL協(xié)議的SSLv2,SSLv3和TLS1.0的版本。
109、TLS是SSLv3的標準化版,區(qū)別不大,但是很多細節(jié)還是不同的。</p><p> 3.2.2 OpenSSL的組成</p><p> OpenSSL整個軟件包大概可以分為三個主要的功能部分:密碼算法庫、SSL協(xié)議庫及應(yīng)用程序。圖3-1 描述了OpenSSL的組成:</p><p> 圖3-1 OpenSSL的組成</p><p>
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于web的文件服務(wù)器的設(shè)計與實現(xiàn)
- 基于WEB的應(yīng)用服務(wù)器設(shè)計與實現(xiàn).pdf
- 基于協(xié)程的web服務(wù)器原型的設(shè)計與實現(xiàn).pdf
- 基于LWIP的WEB服務(wù)器的研究與實現(xiàn).pdf
- 嵌入系統(tǒng)的Web服務(wù)器設(shè)計與實現(xiàn).pdf
- 基于fpga的web服務(wù)器設(shè)計
- 基于嵌入式的Web服務(wù)器的設(shè)計與實現(xiàn).pdf
- 基于Web和ACE的考試系統(tǒng)服務(wù)器設(shè)計與實現(xiàn).pdf
- 輕量級web服務(wù)器的設(shè)計與實現(xiàn).pdf
- 基于跨平臺的輕量級Web服務(wù)器設(shè)計與實現(xiàn).pdf
- 基于DeviceNet的嵌入式Web服務(wù)器設(shè)計與實現(xiàn).pdf
- 基于Web服務(wù)器的Android手機管理系統(tǒng)的設(shè)計與實現(xiàn).pdf
- 基于HTTP協(xié)議的WEB代理服務(wù)器的設(shè)計與實現(xiàn).pdf
- 基于Linux操作系統(tǒng)的Web服務(wù)器的設(shè)計與實現(xiàn).pdf
- 基于MCU的嵌入式WEB服務(wù)器的設(shè)計與實現(xiàn).pdf
- web服務(wù)器安全畢業(yè)設(shè)計
- 嵌入式web服務(wù)器設(shè)計與實現(xiàn)
- 基于網(wǎng)站web服務(wù)器網(wǎng)絡(luò)安全的分析與設(shè)計.pdf
- 探析嵌入式web服務(wù)器的設(shè)計與實現(xiàn)
- WEB服務(wù)器集群系統(tǒng)的設(shè)計與實現(xiàn).pdf
評論
0/150
提交評論