ssl加密的方法參考模板_第1頁
ssl加密的方法參考模板_第2頁
ssl加密的方法參考模板_第3頁
ssl加密的方法參考模板_第4頁
ssl加密的方法參考模板_第5頁
已閱讀5頁,還剩18頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、ssl加密的方法關(guān)鍵詞: ssl加密的方法 隨著計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)的發(fā)展,方便快捷的互連網(wǎng)使人們漸漸習(xí)慣了從Web頁上收發(fā)E-mail、購物和交易,這時(shí)Web頁面上需要傳輸重要或敏感的數(shù)據(jù),例如用戶的銀行帳戶、密碼等,所以網(wǎng)絡(luò)安全就成為現(xiàn)代計(jì)算機(jī)網(wǎng)絡(luò)應(yīng)用急需解決的問題?,F(xiàn)行網(wǎng)上銀行和電子商務(wù)等大型的網(wǎng)上交易系統(tǒng)普遍采用HTTP和SSL相結(jié)合的方式。服務(wù)器端采用支持SSL的Web服務(wù)器,用戶端采用支持SSL的瀏覽器實(shí)現(xiàn)安全通信。SSL是Secure Socket Layer(安全套接層協(xié)議)的縮寫,可以在Internet上提供秘密性傳輸。Netscape公司在推出第一個(gè)Web瀏覽器的同時(shí),提出了SS

2、L協(xié)議標(biāo)準(zhǔn),目前已有3.0版本。SSL采用公開密鑰技術(shù)。其目標(biāo)是保證兩個(gè)應(yīng)用間通信的保密性和可靠性,可在服務(wù)器端和用戶端同時(shí)實(shí)現(xiàn)支持。目前,利用公開密鑰技術(shù)的SSL協(xié)議,已成為Internet上保密通訊的工業(yè)標(biāo)準(zhǔn)。本文著重在SSL協(xié)議和SSL程序設(shè)計(jì)兩方面談?wù)勛髡邔?duì)SSL的理解。SSL協(xié)議初步介紹安全套接層協(xié)議能使用戶/服務(wù)器應(yīng)用之間的通信不被攻擊者竊聽,并且始終對(duì)服務(wù)器進(jìn)行認(rèn)證,還可選擇對(duì)用戶進(jìn)行認(rèn)證。SSL協(xié)議要求建立在可靠的傳輸層協(xié)議(TCP)之上。SSL協(xié)議的優(yōu)勢(shì)在于它是與應(yīng)用層協(xié)議獨(dú)立無關(guān)的,高層的應(yīng)用層協(xié)議(例如:HTTP,F(xiàn)TP,TELNET等)能透明地建立于SSL協(xié)議之上。SS

3、L協(xié)議在應(yīng)用層協(xié)議通信之前就已經(jīng)完成加密算法、通信密鑰的協(xié)商及服務(wù)器認(rèn)證工作。在此之后應(yīng)用層協(xié)議所傳送的數(shù)據(jù)都會(huì)被加密,從而保證通信的私密性。通過以上敘述,SSL協(xié)議提供的安全信道有以下三個(gè)特性:1.數(shù)據(jù)的保密性信息加密就是把明碼的輸入文件用加密算法轉(zhuǎn)換成加密的文件以實(shí)現(xiàn)數(shù)據(jù)的保密。加密的過程需要用到密匙來加密數(shù)據(jù)然后再解密。沒有了密鑰,就無法解開加密的數(shù)據(jù)。數(shù)據(jù)加密之后,只有密匙要用一個(gè)安全的方法傳送。加密過的數(shù)據(jù)可以公開地傳送。2.數(shù)據(jù)的一致性加密也能保證數(shù)據(jù)的一致性。例如:消息驗(yàn)證碼(MAC),能夠校驗(yàn)用戶提供的加密信息,接收者可1 / 23以用MAC來校驗(yàn)加密數(shù)據(jù),保證數(shù)據(jù)在傳輸過程中

4、沒有被篡改過。3.安全驗(yàn)證加密的另外一個(gè)用途是用來作為個(gè)人的標(biāo)識(shí),用戶的密匙可以作為他的安全驗(yàn)證的標(biāo)識(shí)。SSL是利用公開密鑰的加密技術(shù)(RSA)來作為用戶端與服務(wù)器端在傳送機(jī)密資料時(shí)的加密通訊協(xié)定。目前,大部分的Web 服務(wù)器及瀏覽器都廣泛支持SSL 技術(shù)。當(dāng)瀏覽器試圖連接一個(gè)具有SSL認(rèn)證加密的服務(wù)器時(shí),就會(huì)喚醒一個(gè)SSL會(huì)話,瀏覽器檢查認(rèn)證,必須具備下面三個(gè)條件:1)有一個(gè)權(quán)威機(jī)構(gòu)發(fā)放證書,當(dāng)然可以創(chuàng)建自我簽訂的證書(x509 結(jié)構(gòu))。2)證書不能過期。3)證書是屬于它所連接的服務(wù)器的。只有全部具備了這三個(gè)條件,瀏覽器才能成功完成認(rèn)證。通過這三個(gè)條件,用戶能確認(rèn)其瀏覽器連接到正確的服務(wù)器,

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

6、T協(xié)議比SSL協(xié)議復(fù)雜,商家和銀行都需要改造系統(tǒng)以實(shí)現(xiàn)互操作。在Linux 下,比較流行支持SSL認(rèn)證的是OpenSSL服務(wù)器。OpenSSL項(xiàng)目是一個(gè)合作的項(xiàng)目,開發(fā)一個(gè)健壯的、商業(yè)等級(jí)的、完整的開放源代碼的工具包,用強(qiáng)大的加密算法來實(shí)現(xiàn)安全的Socket層(Secure Sockets Layer,SSL v2/v3)和傳輸層的安全性(Transport Layer Security,TLS v1)。這個(gè)項(xiàng)目是由全世界的志愿者管理和開發(fā)OpenSSL工具包和相關(guān)文檔。如何在Linux下配置OpenSSL服務(wù)器,首先從OpenSSL的主頁(/)上下載

7、openssl-version.tar.gz軟件包來編譯安裝,與Apache服務(wù)器配合可以建立支持SSL的Web服務(wù)器,并可以使用自我簽訂的證書做認(rèn)證,關(guān)于如何編譯、安裝OpenSSL服務(wù)器,可以參考一下OpenSSL HOWTO文檔。SSL 程序設(shè)計(jì)初步介紹SSL 通訊模型為標(biāo)準(zhǔn)的C/S 結(jié)構(gòu),除了在 TCP 層之上進(jìn)行傳輸之外,與一般的通訊沒有什么明顯的區(qū)別。在這里,我們主要介紹如何使用OpenSSL進(jìn)行安全通訊的程序設(shè)計(jì)。關(guān)于OpenSSL 的一些詳細(xì)的信息請(qǐng)參考OpenSSL的官方主頁 。在使用OpenSSL前,必須先對(duì)OpenSSL 進(jìn)行初始

8、化,以下的三個(gè)函數(shù)任選其一:SSL_library_init(void);OpenSSL_add_ssl_algorithms();SSLeay_add_ssl_algorithms();事實(shí)上 后面的兩個(gè)函數(shù)只是第一個(gè)函數(shù)的宏。如果要使用OpenSSL的出錯(cuò)信息,使用SSL_load_error_strings (void)進(jìn)行錯(cuò)誤信息的初始化。以后可以使用void ERR_print_errors_fp(FILE *fp) 打印SSL的錯(cuò)誤信息。一次SSL連接會(huì)話一般要先申請(qǐng)一個(gè)SSL 環(huán)境,基本的過程是:1. SSL_METHOD* meth = TLSv1_client_method(

9、); 創(chuàng)建本次會(huì)話連接所使用的協(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ù)器同樣需要?jiǎng)?chuàng)建本次會(huì)話所使用的協(xié)議:SSL_METHOD *TLSv1_server_method(void);SSL_METHOD *SSLv2_se

10、rver_method(void);SSL_METHOD *SSLv3_server_method(void);SSL_METHOD *SSLv23_server_method(void);需要注意的是客戶端和服務(wù)器需要使用相同的協(xié)議。2申請(qǐng)SSL會(huì)話的環(huán)境 CTX,使用不同的協(xié)議進(jìn)行會(huì)話,其環(huán)境也是不同的。申請(qǐng)SSL會(huì)話環(huán)境的OpenSSL函數(shù)是SSLK_CTX* SSL_CTX_new (SSL_METHOD*); 參數(shù)就是前面我們申請(qǐng)的 SSL通訊方式。返回當(dāng)前的SSL 連接環(huán)境的指針。然后根據(jù)自己的需要設(shè)置CTX的屬性,典型的是設(shè)置SSL 握手階段證書的驗(yàn)證方式和加載自己的證書。voi

11、d SSL_CTX_set_verify (SSL_CTX* , int , int* (int, X509_STORE_CTX*) )設(shè)置證書驗(yàn)證的方式。第一個(gè)參數(shù)是當(dāng)前的CTX 指針,第二個(gè)是驗(yàn)證方式,如果是要驗(yàn)證對(duì)方的話,就使用SSL_VERIFY_PEER。不需要的話,使用SSL_VERIFY_NONE.一般情況下,客戶端需要驗(yàn)證對(duì)方,而服務(wù)器不需要。第三個(gè)參數(shù)是處理驗(yàn)證的回調(diào)函數(shù),如果沒有特殊的需要,使用空指針就可以了。void SSL_CTX_load_verify_locations(SSL_CTX*, const char* , const char*);加載證書;第一個(gè)參數(shù)同

12、上,參數(shù)二是證書文件的名稱,參數(shù)三是證書文件的路徑;int SSL_CTX_use_certificate_file(SSL_CTX *ctx, const char *file, int type);加載本地的證書;type 指明證書文件的結(jié)構(gòu)類型;失敗返回-1int SSL_CTX_use_PrivateKey_file(SSL_CTX *ctx, const char *file, int type);加載自己的私鑰;type 參數(shù)指明私鑰文件的結(jié)構(gòu)類型;失敗返回-1加載了證書和文件之后,就可以驗(yàn)證私鑰和證書是否相符:BOOl SSL_CTX_check_private_key (SSL

13、_CTX*);3既然SSL 使用TCP 協(xié)議,當(dāng)然需要把SSL attach 到已經(jīng)連接的套接字上了:SSL* SSL_new (SSL_CTX*); 申請(qǐng)一個(gè)SSL 套節(jié)字;int SSL_set_rfd (SSL*); 綁定只讀套接字int SSL_set_wfd (SSL*); 綁定只寫套接字int SSL_set_fd ( SSL*); 綁定讀寫套接字綁定成功返回 1, 失敗返回0;4 接下來就是SSL 握手的動(dòng)作了int SSL_connect (SSL*); 失敗返回 -15. 握手成功之后,就可以進(jìn)行通訊了,使用SSL_read 和SS_write 讀寫SSL 套接字代替?zhèn)鹘y(tǒng)的r

14、ead 、writeint SSL_read (SSL *ssl, char *buf, int num );int SSL_write (SSL *ssl, char *buf, int num);如果是服務(wù)器,則使用 SSL_accept 代替?zhèn)鹘y(tǒng)的 accept 調(diào)用int SSL_accept(SSL *ssl);6. 通訊結(jié)束,需要釋放前面申請(qǐng)的 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ā)展到

15、了0.9.96版本,但是它的文檔還很少,甚至連最基本的man 函數(shù)手冊(cè)都沒有完成。所以,本文緊緊是講述了使用OpenSSL 進(jìn)行程序設(shè)計(jì)的框架。更加詳細(xì)的資料可以參考OpenSSL 的文檔或者 Apache mod_ssl 的文檔。通過以上的介紹,我想讀者對(duì)SSL協(xié)議已經(jīng)有了一定的了解,作者有機(jī)會(huì)將會(huì)繼續(xù)給大家介紹SSL協(xié)議的其他方面的內(nèi)容。SSL原理解密本文出自:范曉明RSA公鑰加密在計(jì)算機(jī)產(chǎn)業(yè)中被廣泛使用在認(rèn)證和加密??梢詮腞SA Data Security Inc.獲得的RSA公鑰加密許可證。公鑰加密是使用一對(duì)非對(duì)稱的密碼加密或解密的方法。每一對(duì)密碼由公鑰和私鑰組成。公鑰被廣泛發(fā)布。私鑰

16、是隱密的,不公開。用公鑰加密的數(shù)據(jù)只能夠被私鑰解密。反過來,使用私鑰加密的數(shù)據(jù)只能用公鑰解密。這個(gè)非對(duì)稱的特性使得公鑰加密很有用。使用公鑰加密法認(rèn)證認(rèn)證是一個(gè)身份認(rèn)證的過程。在下列例子中包括甲和乙,公鑰加密會(huì)非常輕松地校驗(yàn)身份。符號(hào)數(shù)據(jù) key意味著"數(shù)據(jù)"已經(jīng)使用密碼加密或解密。假如甲想校驗(yàn)乙的身份。乙有一對(duì)密碼,一個(gè)是公開的,另一個(gè)是私有的。乙透露給甲他的公鑰。甲產(chǎn)生一個(gè)隨機(jī)信息發(fā)送給乙。甲乙:random-message乙使用他的私鑰加密消息,返回甲加密后的消息。 乙甲:random-message乙的私鑰甲收到這個(gè)消息然后使用乙的以前公開過的公鑰解密。他比較解密后的

17、消息與他原先發(fā)給乙的消息。如果它們完全一致,就會(huì)知道在與乙說話。任意一個(gè)中間人不會(huì)知道乙的私鑰,也不能正確加密甲檢查的隨機(jī)消息。除非你清楚知道你加密的消息。用私鑰加密消息,然后發(fā)送給其他人不是一個(gè)好主意。因?yàn)榧用苤悼赡鼙挥脕韺?duì)付你,需要注意的是:因?yàn)橹挥心悴庞兴借€,所以只有你才能加密消息。所以,代替加密甲發(fā)來的原始消息,乙創(chuàng)建了一個(gè)信息段并且加密。信息段取自隨機(jī)消息(random-message)并具有以下有用的特性:1. 這個(gè)信息段難以還原。任何人即使偽裝成乙,也不能從信息段中得到原始消息;2. 假冒者將發(fā)現(xiàn)不同的消息計(jì)算出相同的信息段值;3. 使用信息段,乙能夠保護(hù)自己。他計(jì)算甲發(fā)出的隨機(jī)

18、信息段,并且加密結(jié)果,并發(fā)送加密信息段返回甲。甲能夠計(jì)算出相同的信息段并且解密乙的消息認(rèn)證乙。這個(gè)技術(shù)僅僅描繪了數(shù)字簽名。通過加密甲產(chǎn)生的隨機(jī)消息,乙已經(jīng)在甲產(chǎn)生的消息簽名。因此我們的認(rèn)證協(xié)議還需要一次加密。一些消息由乙產(chǎn)生:甲乙:你好,你是乙么?乙甲:甲,我是乙信息段甲,我是乙 乙的私鑰當(dāng)你使用這個(gè)協(xié)議,乙知道他發(fā)送給乙的消息,他不介意在上面簽名。他先發(fā)送不加密的信息,"甲,我是乙。",然后發(fā)送信息段加密的消息版本。甲可以非常方便地校驗(yàn)乙就是乙,同時(shí),乙還沒有在他不想要的信息上簽名。提交公鑰那么,乙怎樣以可信的方式提交他的公鑰呢?看看認(rèn)證協(xié)議如下所示:甲乙:你好乙甲:嗨,

19、我是乙,乙的公鑰甲乙:prove it乙甲:甲,我是乙 信息段甲,我是乙 乙的私鑰在這個(gè)協(xié)議下,任何人都能夠成為"乙"。所有你所要的只是公鑰和私鑰。你發(fā)送給甲說你就是乙,這樣你的公鑰就代替了乙的密碼。然后,你發(fā)送用你的私鑰加密的消息,證明你的身份。甲卻不能發(fā)覺你并不是乙。為了解決這個(gè)問題,標(biāo)準(zhǔn)組織已經(jīng)發(fā)明了證書。一個(gè)證書有以下的內(nèi)容:* 證書的發(fā)行者姓名* 發(fā)行證書的組織* 標(biāo)題的公鑰* 郵戳證書使用發(fā)行者的私鑰加密。每一個(gè)人都知道證書發(fā)行者的公鑰(這樣,每個(gè)證書的發(fā)行者擁有一個(gè)證書)。證書是一個(gè)把公鑰與姓名綁定的協(xié)議。通過使用證書技術(shù),每一個(gè)人都可以檢查乙的證書,判斷是否

20、被假冒。假設(shè)乙控制好他的私鑰,并且他確實(shí)是得到證書的乙,就萬事大吉了。這些是修訂后的協(xié)議:甲乙:你好乙甲:嗨,我是乙,乙的校驗(yàn)甲乙:prove it乙甲:甲,我是乙 信息段甲, 我是乙 乙的私鑰現(xiàn)在當(dāng)甲收到乙的第一個(gè)消息,他能檢查證書,簽名(如上所述,使用信息段和公鑰解密),然后檢查標(biāo)題(乙的姓名),確定是乙。他就能相信公鑰就是乙的公鑰和要求乙證明自己的身份。乙通過上面的過程,制作一個(gè)信息段,用一個(gè)簽名版本答復(fù)甲。甲可以校驗(yàn)乙的信息段通過使用從證書上得到的公鑰并檢查結(jié)果。如果一個(gè)黑客,叫H甲H:你好H不能建立一個(gè)令甲相信的從乙的消息。交換密碼(secret)一旦甲已經(jīng)驗(yàn)證乙后,他可以發(fā)送給乙一

21、個(gè)只有乙可以解密、閱讀的消息:甲乙:secret乙的公鑰唯一找到密碼的方法只有使用乙的私鑰解碼上述的信息。交換密碼是另一個(gè)有效使用密碼加密的方法。即使在甲和乙之間的通訊被偵聽,只有乙才能得到密碼。使用密碼作為另一個(gè)secret-key增強(qiáng)了網(wǎng)絡(luò)的安全性,但是這次這是一個(gè)對(duì)稱的加密算法(例如DES、RC4、IDE甲)。因?yàn)榧自诎l(fā)送給乙之前產(chǎn)生了密碼,所以甲知道密碼。乙知道密碼因?yàn)橐矣兴借€,能夠解密甲的信息。但他們都知道密碼,他們都能夠初始化一個(gè)對(duì)稱密碼算法,而且開始發(fā)送加密后的信息。這兒是修定后的協(xié)議:甲乙:你好乙甲:嗨,我是乙,乙的校驗(yàn)甲乙:prove it乙甲:甲,我是乙 信息段甲,我是乙

22、乙的私鑰甲乙:ok 乙,here is a secret secret乙的公鑰乙甲:some messagesecret-key黑客竊聽那么如果有一個(gè)惡意的黑客H在甲和乙中間,雖然不能發(fā)現(xiàn)甲和乙已經(jīng)交換的密碼,但能干擾他們的交談。他可以放過大部分信息,選擇破壞一定的信息(這是非常簡單的,因?yàn)樗兰缀鸵彝ㄔ挷捎玫膮f(xié)議)。甲H:你好H乙:你好乙H:嗨,我是乙,乙的校驗(yàn)H甲:嗨,我是乙,乙的校驗(yàn)甲H:prove itH乙:prove it乙H:甲,我是乙 信息段甲,我是乙 乙的私鑰H甲:甲,我是乙 信息段甲,我是乙 乙的私鑰甲H:ok 乙,here is a secret secret 乙的公鑰H

23、乙:ok 乙,here is a secret secret 乙的公鑰乙H:some messagesecret-keyH甲:Garblesome messagesecret-key H忽略一些數(shù)據(jù)不修改,直到甲和乙交換密碼。然后H干擾乙給甲的信息。在這一點(diǎn)上,甲相信乙,所以他可能相信已經(jīng)被干擾的消息并且盡力解密。需要注意的是,H不知道密碼,他所能做的就是毀壞使用秘鑰加密后的數(shù)據(jù)?;趨f(xié)議,H可能不能產(chǎn)生一個(gè)有效的消息。但下一次呢?為了阻止這種破壞,甲和乙在他們的協(xié)議中產(chǎn)生一個(gè)校驗(yàn)碼消息(message authentication code)。一個(gè)校驗(yàn)碼消息(MAC)是一部分由密碼和一些傳輸

24、消息產(chǎn)生的數(shù)據(jù)。信息段算法描述的上述特性正是它們抵御H的功能:MAC= Digestsome message,secret 因?yàn)镠不知道密碼,他不能得出正確的值。即使H隨機(jī)干擾消息,只要數(shù)據(jù)量大,他成功的機(jī)會(huì)微乎其微。例如,使用HD5(一個(gè)RSA發(fā)明的好的加密算法),甲和乙能夠發(fā)送128位MAC值和他們的消息。H猜測(cè)正確的MAC的幾率將近1/18,446,744,073,709,551,616約等于零。這是又一次修改后的協(xié)議:甲乙:你好乙甲:嗨,我是乙,乙的校驗(yàn)甲乙:prove it乙甲:嗨,我是乙,乙的校驗(yàn)甲,我是乙信息段甲,我是乙 乙的私鑰ok 乙,here is a secret sec

25、ret 乙的公鑰some message,MACsecret-key現(xiàn)在H已經(jīng)無技可施了。他干擾了得到的所有消息,但MAC計(jì)算機(jī)能夠發(fā)現(xiàn)他。甲和乙能夠發(fā)現(xiàn)偽造的MAC值并且停止交談。H不再能與乙通訊。OpenSSL FAQ參考資料: /linux_server/0360apache.php#www_ssl_files20.5 建立連線加密網(wǎng)站 (https) 及防砍站腳本從本章一開始的 20.1 就談過 http 這個(gè)通訊協(xié)定是明碼傳送資料,而那個(gè) https 才是加密傳輸?shù)?!那加密的方法是透過 SSL 啊,這個(gè) SSL 就是以 openssl 軟體來

26、提供的一個(gè)加密函式庫。更多與 https 有關(guān)的資訊,請(qǐng)參考 20.1.4 吧!20.5.1 SSL 所需軟體與憑證檔案及預(yù)設(shè)的 https要達(dá)成讓 apache 支援 https 協(xié)定的話,你必須要有 mod_ssl 這個(gè)軟體才行!請(qǐng)先自行使用 yum 去裝好這個(gè)軟體吧! 同時(shí),我們的 CentOS 5.x 也已經(jīng)預(yù)設(shè)提供了 SSL 機(jī)制所需要的私鑰與憑證檔案囉!相關(guān)軟體提供的檔案如下:· /etc/httpd/conf.d/ssl.conf:mode_ssl 提供的 Apache 設(shè)定檔; · /etc/pki/tls/private/localhost.key:系統(tǒng)私

27、鑰檔,可以用來製作憑證的! · /etc/pki/tls/certs/localhost.crt:就是加密過的憑證檔!(signed certificate) 既然系統(tǒng)都已經(jīng)幫我們搞定了,那麼就讓我們直接來瀏覽一下,看看系統(tǒng)預(yù)設(shè)提供的 https 是長的什麼模樣吧! 打開你的瀏覽器,輸入 https:/你的IP 來連線看看:圖 20.5-1、在 firefox 底下看到的 SSL 安全問題圖示就如同本章 20.1.4 談到的,因?yàn)槲覀冞@個(gè) Apache 網(wǎng)站並沒有將此憑證向 CA 註冊(cè),因此就會(huì)出現(xiàn)上述的訊息了! 這就類似 ssh 連線時(shí),系統(tǒng)需要你輸入 yes 是一樣的啦!要接受憑

28、證後才能夠進(jìn)行加密的功能。所以,請(qǐng)點(diǎn)選上圖中的箭頭 1,此時(shí)就會(huì)延伸出箭頭 2 的位置,按下去吧!然後就會(huì)出現(xiàn)如下所示:圖 20.5-2、在 firefox 底下接受一把私有的憑證所需要的流程如果你確定這個(gè)網(wǎng)站是你自己的可信任網(wǎng)站,那就按下 1 及 2 的箭頭處!如果還想要看一下這個(gè)網(wǎng)站所提供的相關(guān)憑證內(nèi)容, 就按下 3 箭頭的地方:圖 20.5-3、在 firefox 底下觀察憑證的詳細(xì)內(nèi)容由於這個(gè)憑證檔案的建置是在第一次啟動(dòng) Linux 時(shí)就安裝好了憑證檔,而在 CentOS 5.x 底下,預(yù)設(shè)的憑證有效期限為 1 年,所以你就會(huì)看到上圖中箭頭 2 所指的,簽發(fā)日到到期日共有一年啊!當(dāng)你按

29、下關(guān)閉後,就能夠看到實(shí)際的 https:/ 提供的網(wǎng)站內(nèi)容囉!這就是預(yù)設(shè)的 SSL 網(wǎng)站啦!你的重要資訊可以放在這裡讓資料在網(wǎng)路上傳輸更佳的安全!20.5.2 擁有自製憑證的 https·建立憑證檔預(yù)設(shè)的憑證雖然已經(jīng)可以讓你順利的使用 https 了,不過,憑證的有效日僅有 1 年而已實(shí)在討厭 所以,我們還是得要自製憑證才行這個(gè)憑證的製作僅是私有 WWW 網(wǎng)站的用途,並沒有要拿去 CA 註冊(cè)喔! 那麼自製憑證需要什麼步驟呢?基本上需要的流程是:1. 先建立一把 private key 預(yù)備提供給 SSL 憑證簽章要求所用; 2. 最後建立 SSL 憑證 (test certifica

30、tes)。 那麼建立憑證有沒有很困難呢?沒有啦!因?yàn)?CentOS 5.x 已經(jīng)幫我們寫好了 Makefile 了!你先到 /etc/pki/tls/certs 這個(gè)目錄下,然後直接輸入 make 這個(gè)指令,就能夠看到所有可行的目標(biāo)動(dòng)作!我們就可以很快速的建置好憑證喔! 不過,因?yàn)轭A(yù)設(shè)的私鑰檔需要加上密碼才能夠進(jìn)行建立,所以我們還得要額外進(jìn)行一下動(dòng)作就是了。好! 現(xiàn)在假設(shè)我們要建立的是名為 vbird 的憑證!那麼底下流程中,所有的關(guān)鍵字就是 vbird!簡單流程如下所示:# 1. 先到 /etc/pki/tls/certs 去建立一把給 Apache 使用的私鑰檔案:rootwww # cd

31、 /etc/pki/tls/certsrootwww certs# make vbird.keyumask 77 ; /usr/bin/openssl genrsa -des3 1024 > vbird.key <=其實(shí)是這個(gè)指令Generating RSA private key, 1024 bit long modulus.+.+e is 65537 (0x10001)Enter pass phrase: <=這裡輸入這把私鑰的密碼,需要多於四個(gè)字元!Verifying - Enter pass phrase: <=再一次!# 2. 將剛剛建立的檔案中,裡面的密碼取

32、消掉!不要有密碼存在啦!rootwww certs# mv vbird.key vbird.key.rawrootwww certs# openssl rsa -in vbird.key.raw -out vbird.keyEnter pass phrase for vbird.key.raw: <=輸入剛剛的密碼啦!writing RSA keyrootwww certs# rm -f vbird.key.raw <=舊的金鑰檔移除rootwww certs# chmod 400 vbird.key <=權(quán)限一定是 400 才行!# 3. 建置所需要的最終憑證檔!rootw

33、ww certs# make vbird.crt SERIAL=2011052601umask 77 ; /usr/bin/openssl req -utf8 -new -key vbird.key -x509 -days 365 -out vbird.crt -set_serial 2011052601 <=可以加入日期序號(hào)You are about to be asked to enter information that will be incorporatedinto your certificate request.-Country Name (2 letter code) G

34、B:TWState or Province Name (full name) Berkshire:TaiwanLocality Name (eg, city) Newbury:TainanOrganization Name (eg, company) My Company Ltd:KSUOrganizational Unit Name (eg, section) :DICCommon Name (eg, your name or your server's hostname) :www.centos.vbirdEmail Address :vbirdwww.centos.vbirdro

35、otwww certs# ll vbird*-rw- 1 root root 1273 5月 26 15:37 vbird.crt <=最終憑證檔!-rw- 1 root root 887 5月 26 15:04 vbird.key <=系統(tǒng)私鑰檔這樣就建立好憑證檔了!接下來就是得要去處理 ssl.conf 這個(gè)設(shè)定內(nèi)容喔!另外,這把憑證依舊只能使用 1 年!如果你想要建立十年的憑證,那就得要修改一下 Makefile 裡面的內(nèi)容,將 365 改成 3650 即可!Tips:如果你曾經(jīng)多次重複進(jìn)行上述的建立憑證動(dòng)作,會(huì)發(fā)現(xiàn)到同一個(gè)憑證內(nèi)容若製作多次,則最終用戶端瀏覽器會(huì)出現(xiàn)一些錯(cuò)誤

36、訊息, 導(dǎo)致無法連線!因此,建議多加一個(gè)序號(hào) (SERIAL) 的參數(shù),可以修訂這個(gè)錯(cuò)誤喔! ·修改 ssl.conf 的內(nèi)容,使用自製憑證修改 ssl.conf 的內(nèi)容也是很簡單!只要修改兩個(gè)地方,亦即是檔案檔名的地方即可!rootwww # vim /etc/httpd/conf.d/ssl.confSSLCertificateFile /etc/pki/tls/certs/vbird.crt <=約在 112 行SSLCertificateKeyFile /etc/pki/tls/certs/vbird.key <=約在 119 行rootwww # /etc/in

37、it.d/httpd restart然後再以瀏覽器去瀏覽 https:/ 的網(wǎng)址,就能夠查閱到剛剛建立的憑證資料。不過,因?yàn)槲覀冎耙呀?jīng)有瀏覽過預(yù)設(shè)的憑證, 所以網(wǎng)頁以及憑證都有被快取過!因此,你可能得需要到瀏覽器的隱私保護(hù)的地方,將記錄的憑證刪除,並且將網(wǎng)頁快取刪除, 這樣才能夠看到最終如下的正確憑證資料喔!圖 20.5-4、檢查憑證的詳細(xì)內(nèi)容!20.5.3 將加密首頁與非加密首頁分離或許你已經(jīng)發(fā)現(xiàn)一個(gè)無俚頭的地方,就是我的 http:/ 以及 https:/ 首頁是一模一樣的嘛!那麼我的讀者幹嘛沒事找事幹, 肯定不會(huì)使用 https 的嘛!那怎辦?怎麼強(qiáng)制使用者使用 https:/ 來查閱

38、我的重要資料?很簡單??! 透過虛擬主機(jī)就好了??!因?yàn)?SSL 模組也是預(yù)設(shè)提供了這個(gè)功能的嘛!修改會(huì)不會(huì)很麻煩呢?不會(huì)啦! 你只要將 http 及 https 的首頁分離即可!我們這麼假設(shè)好了:· 一般明碼傳輸?shù)木W(wǎng)頁首頁不要變更; · https:/ 的首頁放置到 /var/www/https/ 目錄下。 所以我們得先要設(shè)定 /var/www/https 目錄才行!然後,只要修改 ssl.conf 檔案內(nèi)容即可!整個(gè)過程可以這樣處理:# 1. 處理目錄與預(yù)設(shè)的首頁 index.html 檔案:rootwww # mkdir /var/www/httpsrootwww # e

39、cho "This is https' home" > /var/www/https/index.html# 2. 開始處理 ssl.conf 的內(nèi)容囉!rootwww # vim /etc/httpd/conf.d/ssl.confListen 443 <=預(yù)設(shè)的監(jiān)聽埠口!不建議修改!<VirtualHost _default_:443> <=就是虛擬主機(jī)的設(shè)定囉!DocumentRoot "/var/www/https" <=約84行,拿掉註解改掉目錄名稱ServerName *:443 <=拿掉註解

40、,並將主機(jī)名稱設(shè)定為 *SSLEngine on <=有支援 SSL 的意思!SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOWSSLCertificateFile /etc/pki/tls/certs/vbird.crtSSLCertificateKeyFile /etc/pki/tls/certs/vbird.key</VirtualHost>rootwww # /etc/init.d/httpd restart大部分都使用預(yù)設(shè)值,就是 DocumentRoot 以及 ServerName 需

41、要留意就是了。如此一來,我們就將 https, http 兩個(gè)完整的分開,你的重要資料需要加密的,終於有個(gè)可靠的地方擺放囉!_20.5.4 防砍站軟體幾個(gè)比較知名的網(wǎng)站管理員大概都有這樣的困擾,那就是網(wǎng)站常被砍站軟體所強(qiáng)力下載,結(jié)果造成主機(jī)的 CPU loading 過重,最後竟然會(huì)導(dǎo)致死掉唉!真是的人怕出名豬怕肥吶!先來解釋一下什麼是砍站吧!所謂的砍站,就是以類似多點(diǎn)連線下載的持續(xù)性訊息傳遞軟體進(jìn)行網(wǎng)站資料的下載,而且, 一啟用該軟體,該軟體就將整個(gè)網(wǎng)站的內(nèi)容都給他 download 下來,很厲害吧!沒錯(cuò)!是很厲害,但是卻也害死人了怎麼說呢?因?yàn)檫@種軟體常常會(huì)為了加快 download 的速

42、度,所以採用多點(diǎn)連線的方式,也就是會(huì)持續(xù)不斷的向 Server 發(fā)出要求封包,而由於這些封包並不見得能夠成功的讓 Server 把資料傳導(dǎo)給 Client 端,常常會(huì)無法投遞就是啦!這樣的結(jié)果就是.造成 Server 要一直不斷的回應(yīng),又無法正確的回應(yīng)出去, 此外,要求太過頻繁,結(jié)果主機(jī)應(yīng)接不暇,最後.就當(dāng)機(jī)了.真的是林老師鳥哥的鳥站主機(jī)古早以前,就是因?yàn)檫@樣的原因,導(dǎo)致服務(wù)常常斷斷續(xù)續(xù)的,並且,由於 CPU loading 太高,結(jié)果讓正常連線進(jìn)來看資料的網(wǎng)友沒有足夠的資源,因此網(wǎng)頁開啟的速度就變的很慢唉 這些砍站的人,也太不道德啦!由於這種砍站軟體真的很麻煩,一不注意馬上就又會(huì)被砍站而當(dāng)機(jī)

43、,三天兩頭就要重新開機(jī)一次,完全讓 Linux 的穩(wěn)定性無法發(fā)揮!真是氣死了後來,鳥哥就自行寫了一個(gè) scripts 來擋這樣的 IP !我的作法是這樣的:1. 由於砍站軟體會(huì)多點(diǎn)連續(xù)下載,因此,同一個(gè) IP 在同一個(gè)時(shí)間內(nèi),會(huì)有相當(dāng)多的連線發(fā)生; 2. 由於他是重複不斷的要求連線,因此剛剛建立的連線在達(dá)成下載的目的後,會(huì)立刻死掉, 而又多生出其他的連線出來,因此,這個(gè)時(shí)候他的連線情況就變的相當(dāng)?shù)牟徽A耍?3. 由於某些較舊的砍站軟體並不會(huì)欺騙主機(jī),所以,會(huì)在主機(jī)的登錄檔裡面記錄住 Teleport 的標(biāo)記! 4. 既然如此的話,那麼我就讓我的主機(jī)每分鐘去檢查兩個(gè)東西(1)先檢查 log f

44、ile ,如果有發(fā)現(xiàn)到相關(guān)的 Teleport 字詞,就將該 IP 抵擋掉;(2)使用 netstat 來檢查同一個(gè) IP 的同時(shí)連線,如果該連線超過一個(gè)值(例如同時(shí)有 12 個(gè)連線)的話,那麼就將該 IP 抵擋掉! 5. 此外,由於上面的方案可能會(huì)將 Proxy 的 Client 端也同時(shí)抵擋掉,真是可憐??! 這個(gè)時(shí)候,這支程式就會(huì)主動(dòng)的將(1)的情況的主機(jī)抵擋 3 天,至於(2)的情況則抵擋2小時(shí)! 過了該抵擋的時(shí)限後,該 IP 即可又連上我們的主機(jī)了! 大致上就是這樣吧!這樣的一程式需要與 iptables 相互配合,所以,請(qǐng)先查閱一下第九章的防火牆內(nèi)容,然後再來下載這支程式吧! 這支程

45、式你可以在底下的網(wǎng)址下載喔!· /download/index.php?action=detail&fileid=47詳細(xì)的安裝步驟鳥哥已經(jīng)以中文寫在該檔案裡面了,所以請(qǐng)先查看一下該檔案的前面說明部分吧!此外, Study Area 的 netman 大哥也已經(jīng)開發(fā)了一套很棒的防砍站的程式了! 在防堵砍站的原理上面是完全相同的,不過寫法可能不是很雷同就是了!如果有需要的話,也可以前往 Study-Area 搜尋一下囉!· /viewtopic.php?t=1364320.

46、6 重點(diǎn)回顧· WWW 的傳輸協(xié)定使用 HTTP (Hyper Text Transport Protocol) ,最早是由歐洲核子物理實(shí)驗(yàn)室的伯納斯-李所發(fā)展的; · WWW 在 server/client 端主要傳遞的訊息資料以 HTML (Hyper Text Markup Language) 語法為主; · 為制訂與發(fā)佈 WWW 標(biāo)準(zhǔn)語法的組織,你撰寫網(wǎng)頁最好依據(jù)該站之標(biāo)準(zhǔn)為宜; · Apache 是達(dá)成 WWW 伺服器的一項(xiàng)軟體,至於用戶端的瀏覽則使用瀏覽器,目前可使用 firefox · 瀏覽器可

47、達(dá)成的主機(jī)連結(jié)不止 http,可在網(wǎng)址列輸入對(duì)應(yīng)的協(xié)定:/主機(jī):port/資源即可取得不同的資料; · 若要 WWW 伺服器可以達(dá)成與使用者資訊互動(dòng),尚須要網(wǎng)頁程式語言 (如PHP, perl 等) 以及資料庫軟體 (如 MySQL, portgresql 等); · 因?yàn)?http 使用的是明碼傳送,目前 WWW 可利用 SSL 等機(jī)制來進(jìn)行資料加密的傳輸; · Apache 的設(shè)定檔其實(shí)只有 httpd.conf 而已,其他的設(shè)定檔都是被 Include 進(jìn)來的; · Apache 的首頁目錄以 DocumentRoot 決定,首頁檔案則以 Dire

48、ctoryIndex 決定; · Apache 可以透過虛擬主機(jī)的設(shè)定以指定不同主機(jī)名稱到不同的 DocumentRoot 下; · Apache 是多執(zhí)行緒的軟體,可以啟動(dòng)多個(gè)程序來負(fù)責(zé) WWW。主要的模組有 prefork 及 worker, 至於最大可連線的數(shù)量則以 MaxClients 來決定。 · 若要正確的讓瀏覽器顯示網(wǎng)頁的編碼格式,最好在網(wǎng)頁上宣告語系,並將 Apache 的設(shè)定檔 httpd.conf 內(nèi)的 AddDefaultCharset 設(shè)定值取消; · 在 Apache 可瀏覽的目錄權(quán)限設(shè)定上 (Options 參數(shù)),最好將 I

49、ndexes拿掉; · 透過 AllowOverride 與 .htaccess 可讓使用者在自己管理的目錄下制訂自己的風(fēng)格; · Apache 本身提供一個(gè) apachectl 的 script 讓使用者得以快速管理其 apache 的服務(wù); · Apache 分析的資料如果比較重要時(shí),務(wù)必以 SSL 或者是保護(hù)目錄來保護(hù)。 20.7 本章習(xí)題· 請(qǐng)問 LAMP 這個(gè)伺服器代表什麼意思? 這個(gè)名詞代表了 Linux + Apache + MySQL + PHP 這個(gè) WWW 伺服器的組成! · Apache 的設(shè)定檔檔名一般為何? Apach

50、e 的設(shè)定檔檔名為 httpd.conf ,不過,由於 httpd.conf 內(nèi)容參數(shù)可以使用 include "額外設(shè)定檔名",所以也可能具有其他的額外設(shè)定檔喔! · 在 Apache 的設(shè)定檔當(dāng)中,哪一個(gè)參數(shù)是用來設(shè)定主網(wǎng)頁的? 設(shè)定主網(wǎng)頁的參數(shù)為:DocumentRoot 喔!後面接的是主網(wǎng)頁放置的目錄! · 哪一個(gè)指令用來重新啟動(dòng)與關(guān)閉 Apache ?(請(qǐng)以 Apache 本身提供的功能來說明) 其實(shí)不論是 RPM 還是 Tarball 都是使用 apachectl 這個(gè)檔案來啟動(dòng) apache 的,不過 RPM 已經(jīng)將該檔案整合到 /etc/

51、init.d/httpd 裡面去而已 · 當(dāng)我使用 ps -aux 的時(shí)候,發(fā)現(xiàn)好多的 httpd. 的程序,這是正常的嗎? 最多可以有幾個(gè)程序是在那個(gè)檔案的那個(gè)參數(shù)所設(shè)定的? 由於 Apache 預(yù)設(shè)為多執(zhí)行緒,所以啟動(dòng)多個(gè) processes 是正常的。至於啟動(dòng)幾個(gè) process 則由很多設(shè)定所處理, 包括 MinSpareServers, MaxSpareServers, MaxClients 等等。 · 又,呈上題,這些程序 (process) 的 owner 與 group 是誰?該察看那個(gè)設(shè)定檔的那個(gè)參數(shù)? 同樣察看 httpd.conf 裡面的 User 與 Group 這兩個(gè)設(shè)定值! · 如果今天我以 http:/your.ip 結(jié)果卻發(fā)現(xiàn)瀏覽器出現(xiàn)類似 FTP 的畫面(會(huì)列出該目錄下的所有檔案),這是什麼原因造成的?該如何避免? 這是由於在 httpd.conf 裡面,針對(duì)該目錄的設(shè)定參數(shù) Options 當(dāng)中,設(shè)定了 Indexes 這個(gè)設(shè)定值,導(dǎo)致當(dāng)找不到主頁時(shí)(通常是 index.html),就會(huì)將該目錄下的所有檔案秀出來!解決的方法就是拿掉 Options 裡面的 Indexes 設(shè)定值即可! · 在 Apache 裡面 .htaccess 這個(gè)檔案的功能為何? 可以用來取代 htt

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論