溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

安全HTTP

發(fā)布時(shí)間:2020-07-23 22:22:05 來(lái)源:網(wǎng)絡(luò) 閱讀:401 作者:jjjssswww 欄目:建站服務(wù)器

HTTPS介紹

  人們會(huì)用Web事務(wù)來(lái)處理一些很重要的事情。如果沒(méi)有強(qiáng)有力的安全保證,人們就無(wú)法安心地進(jìn)行網(wǎng)絡(luò)購(gòu)物或使用銀行業(yè)務(wù)。如果無(wú)法嚴(yán)格限制訪問(wèn)權(quán)限,公司就不能將重要的文檔放在Web服務(wù)器上。Web需要一種安全的HTTP形式

  前面的博客討論了一些提供認(rèn)證(基本認(rèn)證和摘要認(rèn)證)和報(bào)文完整性檢査(摘要qop="auth-int")的輕量級(jí)方法。對(duì)很多網(wǎng)絡(luò)事務(wù)來(lái)說(shuō),這些方法都是很好用的,但對(duì)大規(guī)模的購(gòu)物、銀行事務(wù),或者對(duì)訪問(wèn)機(jī)密數(shù)據(jù)來(lái)說(shuō),并不足夠強(qiáng)大。這些更為重要的事務(wù)需要將HTTP和數(shù)字加密技術(shù)結(jié)合起來(lái)使用,才能確保安全

  HTTP的安全版本要高效、可移植且易于管理,不但能夠適應(yīng)不斷變化的情況而且還應(yīng)該能滿足社會(huì)和政府的各項(xiàng)要求。我們需要一種能夠提供下列功能的HTTP安全技術(shù):服務(wù)器認(rèn)證(客戶端知道它們是在與真正的而不是偽造的服務(wù)器通話);客戶端認(rèn)證(服務(wù)器知道它們是在與真正的而不是偽造的客戶端通話);完整性(客戶端和服務(wù)器的數(shù)據(jù)不會(huì)被修改);加密(客戶端和服務(wù)器的對(duì)話是私密的,無(wú)需擔(dān)心被竊聽(tīng));效率(一個(gè)運(yùn)行的足夠快的算法,以便低端的客戶端和服務(wù)器使用);普適性(基本上所有的客戶端和服務(wù)器都支持這些協(xié)議);管理的可擴(kuò)展性(在任何地方的任何人都可以立即進(jìn)行安全通信);適應(yīng)性(能夠支持當(dāng)前最知名的安全方法);在社會(huì)上的可行性(滿足社會(huì)的政治文化需要)

  HTTPS是最流行的HTTP安全形式。它是由網(wǎng)景公司首創(chuàng)的,所有主要的瀏覽器和服務(wù)器都支持此協(xié)議。HTTPS方案的URL以https://,而不是http://開(kāi)頭,據(jù)此就可以分辨某個(gè)Web頁(yè)面是通過(guò)HTTPS而不是HTTP訪問(wèn)的

  使用HTTPS時(shí),所有的HTTP請(qǐng)求和響應(yīng)數(shù)據(jù)在發(fā)送到網(wǎng)絡(luò)之前,都要進(jìn)行加密。HTTPS在HTTP下面提供了一個(gè)傳輸級(jí)的密碼安全層—可以使用SSL,也可以使用其后繼者——傳輸層安全(Transport Layer Security,TLS)。由于SSL和TLS非常類似,所以一般地,不太嚴(yán)格地用術(shù)語(yǔ)SSL來(lái)表示SSL和TLS

安全HTTP

  大部分困難的編碼及解碼工作都是在SSL庫(kù)中完成的,所以Web客戶端和服務(wù)器在使用安全HTTP時(shí)無(wú)需過(guò)多地修改其協(xié)議處理邏輯。在大多數(shù)情況下,只需要用SSL的輸入/輸出調(diào)用取代TCP的調(diào)用,再增加其他幾個(gè)調(diào)用來(lái)配置和管理安全信息就行了

 

數(shù)字加密

  在詳細(xì)探討HTTPS之前,先介紹一些SSL和HTTPS用到的加密編碼技術(shù)的背景知識(shí)。主要包括密碼——對(duì)文本進(jìn)行編碼,使偷窺者無(wú)法識(shí)別的算法;密鑰——改變密碼行為的數(shù)字化參數(shù);對(duì)稱密鑰加密系統(tǒng)——編/解碼使用相同密鑰的算法;不對(duì)稱密鑰加密系統(tǒng)——編/解碼使用不間密鑰的算法;公開(kāi)密鑰加密系統(tǒng)——一種能夠使數(shù)百萬(wàn)計(jì)算機(jī)便捷地發(fā)送機(jī)密報(bào)文的系統(tǒng);數(shù)字簽名——用來(lái)驗(yàn)證報(bào)文未被偽造或篡改的校驗(yàn)和;數(shù)字證書(shū)——由一個(gè)可信的組織驗(yàn)證和簽發(fā)的識(shí)別信息

  密碼學(xué)是對(duì)報(bào)文進(jìn)行編/解碼的機(jī)制與技巧。人們用加密的方式來(lái)發(fā)送秘密信息已經(jīng)有數(shù)千年了。但密碼學(xué)所能做的還不僅僅是加密報(bào)文以防止好事者的讀取,我們還可以用它來(lái)防止對(duì)報(bào)文的篡改,甚至還可以用密碼學(xué)來(lái)證明某條報(bào)文或某個(gè)事務(wù)確實(shí)出自你手,就像支票的手寫(xiě)簽名或信封上的壓紋封蠟一樣

【密碼】

  密碼學(xué)基于一種名為密碼(cipher)的秘密代碼。密碼是一套編碼方案——一種特殊的報(bào)文編碼方式和一種稍后使用的相應(yīng)解碼方式的結(jié)合體。加密之前的原始報(bào)文通常被稱為明文(plaintext或cleartext)。使用了密碼之后的編碼報(bào)文通常被稱作密文(ciphertext)

安全HTTP

  用密碼來(lái)生成保密信息已經(jīng)有數(shù)千年了。傳說(shuō)尤利烏斯凱撒(Julius Caesar)曾使用過(guò)一種三字符旋轉(zhuǎn)密碼,報(bào)文中的每個(gè)字符都由字母表中三個(gè)位置之后的字符來(lái)取代。在現(xiàn)代的字母表中,“A”就應(yīng)該由“D”來(lái)取代,“B”就應(yīng)該由“E”來(lái)取代,以此類推

安全HTTP

  用rot3(旋轉(zhuǎn)3字符)密碼將報(bào)文“meet me at the pier at midnight”編碼為密文“phhwphdwwkhslhudwplgqljkw”。通過(guò)解碼,在字母表中旋轉(zhuǎn)移位3個(gè)字符,可以將密文解密回原來(lái)的明文報(bào)文

  最初,人們需要自己進(jìn)行編碼和解碼,所以起初密碼是相當(dāng)簡(jiǎn)單的算法。因?yàn)槊艽a很簡(jiǎn)單,所以人們通過(guò)紙筆和密碼書(shū)就可以進(jìn)行編解碼了,但聰明人也可以相當(dāng)容易地“破解”這些密碼

  隨著技術(shù)的進(jìn)步,人們開(kāi)始制造一些機(jī)器,這些機(jī)器可以用復(fù)雜得多的密碼來(lái)快速、精確地對(duì)報(bào)文進(jìn)行編解碼。這些密碼機(jī)不僅能做一些簡(jiǎn)單的旋轉(zhuǎn),它們還可以替換字符、改變字符順序,將報(bào)文切片切塊,使代碼的破解更加困難

  編碼算法和編碼機(jī)都可能會(huì)落入壞人的手中,所以大部分機(jī)器上都有一些號(hào)盤(pán),可以將其設(shè)置為大量不同的值以改變密碼的工作方式。即使機(jī)器被盜,沒(méi)有正確的號(hào)盤(pán)設(shè)置(密鑰值),×××也無(wú)法工作

  這些密碼參數(shù)被稱為密鑰(key)。要在密碼機(jī)中輸入正確的密鑰,解密過(guò)程才能正確進(jìn)行。密碼密鑰會(huì)讓一個(gè)密碼機(jī)看起來(lái)好像是多個(gè)虛擬密碼機(jī)一樣,每個(gè)密碼機(jī)都有不同的密鑰值,因此其行為都會(huì)有所不同

  下圖顯示了使用密鑰的密碼實(shí)例。加密算法就是普通的“循環(huán)移位N字符”密碼。N的值由密鑰控制。將同一條輸入報(bào)文“meet me at the pier at midnight”通過(guò)同一臺(tái)編碼機(jī)進(jìn)行傳輸,會(huì)隨密鑰值的不同產(chǎn)生不同的輸出?,F(xiàn)在,基本上所有的加密算法都會(huì)使用密鑰

安全HTTP

【數(shù)字密碼】

  隨著數(shù)字計(jì)算的出現(xiàn),出現(xiàn)了以下兩個(gè)主要的進(jìn)展:從機(jī)械設(shè)備的速度和功能限制中解放出來(lái),使復(fù)雜的編/解碼算法成為可能;支持超大密鑰成為可能,這樣就可以從一個(gè)加密算法中產(chǎn)生出數(shù)萬(wàn)億的虛擬加密算法,由不同的密鑰值來(lái)區(qū)分不同的算法。密鑰越長(zhǎng),編碼組合就越多,通過(guò)隨機(jī)猜測(cè)密鑰來(lái)破解代碼就越困難

  與金屬鑰匙或機(jī)械設(shè)備中的號(hào)盤(pán)設(shè)置相比,數(shù)字密鑰只是一些數(shù)字。這些數(shù)字密鑰值是編/解碼算法的輸入。編碼算法就是一些函數(shù),這些函數(shù)會(huì)讀取一塊數(shù)據(jù),并根據(jù)算法和密鑰值對(duì)其進(jìn)行編/解碼

安全HTTP

  給定一段明文報(bào)文P、一個(gè)編碼函數(shù)E和一個(gè)數(shù)字編碼密鑰e,就可以生成一段經(jīng)過(guò)編碼的密文C。通過(guò)解碼函數(shù)D和解碼密鑰d,可以將密文C解碼為原始的明文P。當(dāng)然,編/解碼函數(shù)都是互為反函數(shù)的,對(duì)P的編碼進(jìn)行解碼就會(huì)回到原始報(bào)文P上去

 

對(duì)稱密鑰

  很多數(shù)字加密算法都被稱為對(duì)稱密鑰(symmetric-key)加密技術(shù),這是因?yàn)樗鼈冊(cè)诰幋a時(shí)使用的密鑰值和解碼時(shí)一樣(e=d)。我們就將其統(tǒng)稱為密鑰k

  在對(duì)稱密鑰加密技術(shù)中,發(fā)送端和接收端要共享相同的密鑰k才能進(jìn)行通信。發(fā)送端用共享的密鑰來(lái)加密報(bào)文,并將得到的密文發(fā)送給接收端。接收端收到密文,并對(duì)其應(yīng)用解密函數(shù)和相同的共享密鑰,恢復(fù)出原始的明文

安全HTTP

  流行的對(duì)稱密鑰加密算法包括:DES、Triple-DES、RC2和RC4

  保持密鑰的機(jī)密狀態(tài)是很重要的。在很多情況下,編/解碼算法都是眾所周知的,因此密鑰就是唯一保密的東西了

  好的加密算法會(huì)迫使***者試遍每一個(gè)可能的密鑰,才能破解代碼。用暴力去嘗試所有的密鑰值稱為枚舉***(emmieration attack)。如果只有幾種可能的密鑰值,居心不良的人通過(guò)暴力遍歷所有值,就能最終破解代碼了。但如果有大量可能的密鑰值,他可能就要花費(fèi)數(shù)天、數(shù)年,甚至無(wú)限長(zhǎng)的時(shí)間來(lái)遍歷所有的密鑰,去査找能夠破解密碼的那一個(gè)

  可用密鑰值的數(shù)量取決于密鑰中的位數(shù),以及可能的密鑰中有多少是有效的。就對(duì)稱密鑰加密技術(shù)來(lái)說(shuō),通常所有的密鑰值都是有效的。8位的密鑰只有256個(gè)可能的密鑰值,40位的密鑰可以有2的40次個(gè)可能的密鑰值(大約是一萬(wàn)億個(gè)密鑰)

  在傳統(tǒng)的對(duì)稱密鑰加密技術(shù)中,對(duì)小型的、不太重要的事務(wù)來(lái)說(shuō),40位的密鑰就足夠安全了。但現(xiàn)在的高速工作站就可以將其破解,這些工作站每秒可以進(jìn)行數(shù)十億次計(jì)算

  相比之下,對(duì)于對(duì)稱密鑰加密技術(shù),128位的密鑰被認(rèn)為是非常強(qiáng)大的。實(shí)際上,長(zhǎng)密鑰對(duì)密碼安全有著非常重要的影響,美國(guó)政府甚至對(duì)使用長(zhǎng)密鑰的加密軟件實(shí)施了出口控制,以防止?jié)撛诘臄硨?duì)組織創(chuàng)建出美國(guó)國(guó)家安全局(National Security Agency, NSA)自己都無(wú)法破解的秘密代碼

  對(duì)稱密鑰加密技術(shù)的缺點(diǎn)之一就是發(fā)送者和接收者在互相對(duì)話之前,一定要有一個(gè)共享的保密密鑰

  如果想要與Joe進(jìn)行保密的對(duì)話,可能是在看了公共電視臺(tái)的家裝節(jié)目之后,想要訂構(gòu)一些木工工具,那么在安全地訂購(gòu)任何東西之前,要先在你和www.joes-hardware.com之間建立一個(gè)私有的保密密鑰。你需要一種產(chǎn)生保密密鑰并將其記住的方式。你和Joe的五金商店,以及因特網(wǎng)上所有其他人,都要產(chǎn)生并記住數(shù)千個(gè)密鑰

  比如Alice(A)、Bob(B)和Chris(C)都想與Joe的五金商店(J)對(duì)話。A、B和C都要建立自己與J之間的保密密鑰。A可能需要密鑰Ka,B可能需要密鑰Kb,C可能需要密鑰Kc。每對(duì)通信實(shí)體都需要自己的私有密鑰。如果有N個(gè)節(jié)點(diǎn),每個(gè)節(jié)點(diǎn)都要和其他所有個(gè)節(jié)點(diǎn)進(jìn)行安全對(duì)話,總共大概會(huì)有N*N個(gè)保密密鑰:這將是一個(gè)管理噩夢(mèng)

 

公開(kāi)密鑰

  公開(kāi)密鑰加密技術(shù)沒(méi)有為每對(duì)主機(jī)使用單獨(dú)的加密/解密密鑰,而是使用了兩個(gè)非對(duì)稱密鑰:一個(gè)用來(lái)對(duì)主機(jī)報(bào)文編碼,另一個(gè)用來(lái)對(duì)主機(jī)報(bào)文解碼。編碼密鑰是眾所周知的(這也是公開(kāi)密鑰加密這個(gè)名字的由來(lái)),但只有主機(jī)才知道私有的解密密鑰。這樣,每個(gè)人都能找到某個(gè)特定主機(jī)的公開(kāi)密鑰,密鑰的建立變得更加簡(jiǎn)單。但解碼密鑰是保密的,因此只有接收端才能對(duì)發(fā)送給它的報(bào)文進(jìn)行解碼

  [注意]大部分公開(kāi)密鑰査找工作實(shí)際上都是通過(guò)數(shù)字證書(shū)來(lái)實(shí)現(xiàn)

安全HTTP

  下圖中,節(jié)點(diǎn)X可以將其加密密鑰ex公之于眾。現(xiàn)在,任何想向節(jié)點(diǎn)X發(fā)送報(bào)文的人都可以使用相同的公開(kāi)密鑰了,因?yàn)槊颗_(tái)主機(jī)都分配了一個(gè)所有人均可使用的編碼密鑰,所以公開(kāi)密鑰加密技術(shù)避免了對(duì)稱密鑰加密技術(shù)中成對(duì)密鑰數(shù)目的N*N擴(kuò)展問(wèn)題

安全HTTP

  盡管每個(gè)人都可以用同一個(gè)密鑰對(duì)發(fā)給X的報(bào)文進(jìn)行編碼,但除了X,其他人都無(wú)法對(duì)報(bào)文進(jìn)行解碼,因?yàn)橹挥蠿才有解碼的私有密鑰dx。將密鑰分隔開(kāi)來(lái)可以讓所有人都能夠?qū)?bào)文進(jìn)行編碼,但只有其所有者才能對(duì)報(bào)文進(jìn)行解碼。這樣,各節(jié)點(diǎn)向服務(wù)器安全地發(fā)送報(bào)文就更加容易,因?yàn)樗鼈冎灰獤苏业椒?wù)器的公開(kāi)密鑰就行了

  通過(guò)公開(kāi)密鑰加密技術(shù),全球所有的計(jì)算機(jī)用戶就都可以使用安全協(xié)議了。制定標(biāo)準(zhǔn)化的公開(kāi)密鑰技術(shù)包是非常重要的,因此,大規(guī)模的公開(kāi)密鑰架構(gòu)(Public-Key Infrastructure, PKI)標(biāo)準(zhǔn)創(chuàng)建工作已經(jīng)開(kāi)展許多年了

【RSA】

  所有公開(kāi)密鑰非對(duì)稱加密系統(tǒng)所面臨的共同挑戰(zhàn)是,要確保即便有人擁有了下面所有的線索,也無(wú)法計(jì)算出保密的私有密鑰:公開(kāi)密鑰(是公有的,所有人都可以獲得);一小片攔截下來(lái)的密文(可通過(guò)對(duì)網(wǎng)絡(luò)的嗅探獲取);一條報(bào)文及與之相關(guān)的密文(對(duì)任意一段文本運(yùn)行加密器就可以得到)

  RSA算法就是一個(gè)滿足了所有這些條件的流行的公開(kāi)密鑰加密系統(tǒng),它是在MIT發(fā)明的,后來(lái)由RSA數(shù)據(jù)安全公司將其商業(yè)化。即使有了公共密鑰、任意一段明文、用公共密鑰對(duì)明文編碼之后得到的相關(guān)密文、RSA算法自身,甚至RSA實(shí)現(xiàn)的源代碼,破解代碼找到相應(yīng)的私有密鑰的難度仍相當(dāng)于對(duì)一個(gè)極大的數(shù)進(jìn)行質(zhì)因數(shù)分解的困難程度,這種計(jì)算被認(rèn)為是所有計(jì)算機(jī)科學(xué)中最難的問(wèn)題之一。因此,如果發(fā)現(xiàn)了一種能夠快速地將一個(gè)極大的數(shù)字分解為質(zhì)因數(shù)的方法,就不僅能夠***瑞士銀行的賬戶系統(tǒng),而且還可以獲得圖靈獎(jiǎng)了

  RSA加密技術(shù)的細(xì)節(jié)中包括很多繁瑣的數(shù)學(xué)問(wèn)題。你不需要擁有數(shù)論方面的博士學(xué)位,有大量的庫(kù)可以用來(lái)執(zhí)行RSA算法

  任何人只要知道了其公開(kāi)密鑰,就可以向一臺(tái)公共服務(wù)器發(fā)送安全報(bào)文,所以非對(duì)稱的公開(kāi)密鑰加密系統(tǒng)是很好用的。兩個(gè)節(jié)點(diǎn)無(wú)須為了進(jìn)行安全的通信而先交換私有密鑰

  但公開(kāi)密鑰加密箅法的計(jì)算可能會(huì)很慢。實(shí)際上它混合使用了對(duì)稱和非對(duì)稱策略。比如,比較常見(jiàn)的做法是在兩節(jié)點(diǎn)間通過(guò)便捷的公開(kāi)密鑰加密技術(shù)建立起安全通信,然后再用那條安全的通道產(chǎn)生并發(fā)送臨時(shí)的隨機(jī)對(duì)稱密鑰,通過(guò)更快的對(duì)稱加密技術(shù)對(duì)其余的數(shù)據(jù)進(jìn)行加密

 

數(shù)字簽名

  到目前為止,我們已經(jīng)討論了各種使用對(duì)稱和非對(duì)稱密鑰加/解密保密報(bào)文的密鑰加密技術(shù)

  除了加/解密報(bào)文之外,還可以用加密系統(tǒng)對(duì)報(bào)文進(jìn)行簽名(sign),以說(shuō)明是誰(shuí)編寫(xiě)的報(bào)文,同時(shí)證明報(bào)文未被篡改過(guò)。這種技術(shù)被稱為數(shù)字簽名(digital signing)

  數(shù)字簽名是附加在報(bào)文上的特殊加密校驗(yàn)碼。使用數(shù)字簽名有以下兩個(gè)好處:1、簽名可以證明是作者編寫(xiě)了這條報(bào)文。只有作者才會(huì)有最機(jī)密的私有密鑰,因此,只有作者才能計(jì)算出這些校驗(yàn)和。校驗(yàn)和就像來(lái)自作者的個(gè)人“簽名” 一樣;2、簽名可以防止報(bào)文被篡改。如果有惡意***者在報(bào)文傳輸過(guò)程中對(duì)其進(jìn)行了修改,校驗(yàn)和就不再匹配了。由于校驗(yàn)和只有作者保密的私有密鑰才能產(chǎn)生,所以***者無(wú)法為篡改了的報(bào)文偽造出正確的校驗(yàn)碼

  數(shù)字簽名通常是用非對(duì)稱公開(kāi)密鑰技術(shù)產(chǎn)生的。因?yàn)橹挥兴姓卟胖榔渌接忻荑€,所以可以將作者私有密鑰當(dāng)作一種“指紋”使用

  下圖說(shuō)明了節(jié)點(diǎn)A是如何向節(jié)點(diǎn)B發(fā)送一條報(bào)文,并對(duì)其進(jìn)行簽名的

安全HTTP

  首先,節(jié)點(diǎn)A將變長(zhǎng)報(bào)文提取為定長(zhǎng)的摘要;然后,節(jié)點(diǎn)A對(duì)摘要應(yīng)用了一個(gè)“簽名”函數(shù),這個(gè)函數(shù)會(huì)將用戶的私有密鑰作為參數(shù)。因?yàn)橹挥杏脩舨胖浪接忻荑€,所以正確的簽名函數(shù)會(huì)說(shuō)明簽名者就是其所有者;一旦計(jì)算出簽名,節(jié)點(diǎn)A就將其附加在報(bào)文的末尾,并將報(bào)文和簽名都發(fā)送給B;在接收端,如果節(jié)點(diǎn)B需要確定報(bào)文確實(shí)是節(jié)點(diǎn)A寫(xiě)的,而且沒(méi)有被篡改過(guò),節(jié)點(diǎn)B就可以對(duì)簽名進(jìn)行檢査。節(jié)點(diǎn)B接收經(jīng)私有密鑰擾碼的簽名,并應(yīng)用了使用公開(kāi)密鑰的反函數(shù)。如果拆包后的摘要與節(jié)點(diǎn)B自己的摘要版本不匹配,要么就是報(bào)文在傳輸過(guò)程中被篡改了,要么就是發(fā)送端沒(méi)有節(jié)點(diǎn)A的私有密鑰,也就是說(shuō)它不是節(jié)點(diǎn)A

 

數(shù)字證書(shū)

  數(shù)字證書(shū)被稱為因特網(wǎng)上的“ID卡”,它包含一組信息,所有這些信息都是由一個(gè)官方的“證書(shū)頒發(fā)機(jī)構(gòu)”以數(shù)字方式簽發(fā)的?;镜臄?shù)字證書(shū)中通常包含一些紙質(zhì)ID中常見(jiàn)的內(nèi)容,比如:對(duì)象的名稱(人、服務(wù)器、組織等);過(guò)期時(shí)間;證書(shū)發(fā)布者(由誰(shuí)為證書(shū)擔(dān)保);來(lái)自證書(shū)發(fā)布者的數(shù)字簽名

  數(shù)字證書(shū)通常還包括對(duì)象的公開(kāi)密鑰,以及對(duì)象和所用簽名算法的描述性信息。任何人都可以創(chuàng)建一個(gè)數(shù)字證書(shū),但并不是所有人都能夠獲得受人尊敬的簽發(fā)權(quán),從而為證書(shū)信息擔(dān)保,并用其私有密鑰簽發(fā)證書(shū)。典型的證書(shū)結(jié)構(gòu)如下圖所示

安全HTTP

【X.509V3證書(shū)】

  數(shù)字證書(shū)沒(méi)有單一的全球標(biāo)準(zhǔn)。就像不是所有印刷版ID卡都在同樣的位置包含了同樣的信息一樣,數(shù)字證書(shū)也有很多略有不同的形式。現(xiàn)在使用的大多數(shù)證書(shū)都以一種標(biāo)準(zhǔn)格式——X.509V3,來(lái)存儲(chǔ)它們的信息。X.509V3證書(shū)提供了一種標(biāo)準(zhǔn)的方式,將證書(shū)信息規(guī)范至一些可解析字段中。不同類型的證書(shū)有不同的字段值,但大部分都遵循X.509 v3結(jié)構(gòu)。下表中介紹了X.509證書(shū)中的字段信息

安全HTTP

安全HTTP

  基于X.509證書(shū)的簽名有好幾種,其中包括Web服務(wù)器證書(shū)、客戶端電子郵件證書(shū)、軟件代碼簽名證書(shū)和證書(shū)頒發(fā)機(jī)構(gòu)證書(shū)

【認(rèn)證】

  通過(guò)HTTPS建立了一個(gè)安全Web事務(wù)之后,現(xiàn)代的瀏覽器都會(huì)自動(dòng)獲取所連接服務(wù)器的數(shù)字證書(shū)。如果服務(wù)器沒(méi)有證書(shū),安全連接就會(huì)失敗。服務(wù)器證書(shū)中包含很多字段,其中包括:Web站點(diǎn)的名稱和主機(jī)名;Web站點(diǎn)的公開(kāi)密鑰;簽名頒發(fā)機(jī)構(gòu)的名稱;來(lái)自簽名頒發(fā)機(jī)構(gòu)的簽名

  瀏覽器收到證書(shū)時(shí)會(huì)對(duì)簽名頒發(fā)機(jī)構(gòu)進(jìn)行檢査。如果這個(gè)機(jī)構(gòu)是個(gè)很有權(quán)威的公共簽名機(jī)構(gòu),瀏覽器可能已經(jīng)知道其公開(kāi)密鑰了, 因?yàn)闉g覽器會(huì)預(yù)先安裝很多簽名頒發(fā)機(jī)構(gòu)的證書(shū)。下圖中說(shuō)明了如何通過(guò)其數(shù)字簽名來(lái)驗(yàn)證證書(shū)的完整性

安全HTTP

  如果對(duì)簽名頒發(fā)機(jī)構(gòu)一無(wú)所知,瀏覽器就無(wú)法確定是否應(yīng)該信任這個(gè)簽名頒發(fā)機(jī)構(gòu),它通常會(huì)向用戶顯示一個(gè)對(duì)話框,看看他是否相信這個(gè)簽名發(fā)布者。簽名發(fā)布者可能是本地的IT部門(mén)或軟件廠商

 

HTTPS細(xì)節(jié)

  HTTPS是最常見(jiàn)的HTTP安全版本。它得到了很廣泛的應(yīng)用,所有主要的商業(yè)瀏覽器和服務(wù)器上都提供HTTPS。HTTPS將HTTP協(xié)議與一組強(qiáng)大的對(duì)稱、非對(duì)稱和基于證書(shū)的加密技術(shù)結(jié)合在一起,使得HTTPS不僅很安全,而且很靈活,很容易在處于無(wú)序狀態(tài)的、分散的全球互聯(lián)網(wǎng)上進(jìn)行管理

  HTTPS加速了因特網(wǎng)應(yīng)用程序的成長(zhǎng),已經(jīng)成為基于Web的電子商務(wù)快速成長(zhǎng)的主要推動(dòng)力。在廣域網(wǎng)中對(duì)分布式Web應(yīng)用程序的安全管理方面,HTTPS也是非常重要的

  HTTPS就是在安全的傳輸層上發(fā)送的HTTP。HTTPS沒(méi)有將未加密的HTTP報(bào)文發(fā)送給TCP,并通過(guò)世界范圍內(nèi)的因特網(wǎng)進(jìn)行傳輸,而是在將HTTP報(bào)文發(fā)送給TCP之前,先將其發(fā)送給了一個(gè)安全層,對(duì)其進(jìn)行加密

安全HTTP

  HTTP安全層是通過(guò)SSL及其現(xiàn)代替代協(xié)議TLS來(lái)實(shí)現(xiàn)的。我們遵循常見(jiàn)的用法,用術(shù)語(yǔ)SSL來(lái)表示SSL或者TLS

  安全HTTP是可選的。因此,對(duì)Web服務(wù)器發(fā)起請(qǐng)求時(shí),我們需要有一種方式來(lái)告知Web服務(wù)器去執(zhí)行HTTP的安全協(xié)議版本,這是在URL的方案中實(shí)現(xiàn)的。
通常情況下,非安全HTTP的URL方案前綴為http,如下所示:

http://www.joes-hardware.com/index.html

  在安全HTTPS協(xié)議中,URL的方案前綴為https,如下所示:

https://cajun-shop.securesites.com/Merchant2/merchant.mv?Store_Code=AGCGS

  請(qǐng)求一個(gè)客戶端(比如Web瀏覽器)對(duì)某Web資源執(zhí)行某事務(wù)時(shí),它會(huì)去檢査 URL的方案:如果URL的方案為http,客戶端就會(huì)打開(kāi)一條到服務(wù)器端口80(默認(rèn)情況下)的連接,并向其發(fā)送老的HTTP命令;如果URL的方案為https,客戶端就會(huì)打開(kāi)一條到服務(wù)器端口443(默認(rèn)情況下)的連接,然后與服務(wù)器“握手”,以二進(jìn)制格式與服務(wù)器交換一些SSL安全參數(shù),附上加密的HTTP命令

安全HTTP

  SSL是個(gè)二進(jìn)制協(xié)議,與HTTP完全不同,其流量是承載在另一個(gè)端口上的(SSL通常是由端口443承載的)。如果SSL和HTTP流量都從端口80到達(dá),大部分Web服務(wù)器會(huì)將二進(jìn)制SSL流量理解為錯(cuò)誤的HTTP并關(guān)閉連接。將安全服務(wù)進(jìn)一步整合到HTTP層中去就無(wú)需使用多個(gè)目的端口了,在實(shí)際中這樣不會(huì)引發(fā)嚴(yán)重的問(wèn)題

  下面來(lái)詳細(xì)介紹下SSL是如何與安全服務(wù)器建立連接的

  在未加密HTTP中,客戶端會(huì)打開(kāi)一條到Web服務(wù)器端口80的TCP連接,發(fā)送一條請(qǐng)求報(bào)文,接收一條響應(yīng)報(bào)文,關(guān)閉連接

  由于SSL安全層的存在,HTTPS中這個(gè)過(guò)程會(huì)略微復(fù)雜一些。在HTTPS中,客戶端首先打開(kāi)一條到Web服務(wù)器端口443(安全HTTP的默認(rèn)端口)的連接。一且建立了TCP連接,客戶端和服務(wù)器就會(huì)初始化SSL層,對(duì)加密參數(shù)進(jìn)行溝通,并交換密鑰。握手完成之后,SSL初始化就完成了,客戶端就可以將請(qǐng)求報(bào)文發(fā)送給安全層了。在將這些報(bào)文發(fā)送給TCP之前,要先對(duì)其進(jìn)行加密

安全HTTP

  在發(fā)送已加密的HTTP報(bào)文之前,客戶端和服務(wù)器要進(jìn)行一次SSL握手,在這個(gè)握手過(guò)程中,它們要完成以下工作:交換協(xié)議版本號(hào);選擇一個(gè)兩端都了解的密碼;對(duì)兩端的身份進(jìn)行認(rèn)證;生成臨時(shí)的會(huì)話密鑰,以便加密信道

  在通過(guò)網(wǎng)絡(luò)傳輸任何已加密的HTTP數(shù)據(jù)之前,SSL已經(jīng)發(fā)送了一組握手?jǐn)?shù)據(jù)來(lái)建立通信連接了

  下圖是SSL握手的簡(jiǎn)化版本。根據(jù)SSL的使用方式,握手過(guò)程可能會(huì)復(fù)雜一些,但總的思想就是這樣

安全HTTP

【服務(wù)器證書(shū)】

  SSL支持雙向認(rèn)證,將服務(wù)器證書(shū)承載回客戶端,再將客戶端的證書(shū)回送給服務(wù)器。而現(xiàn)在,瀏覽時(shí)并不經(jīng)常使用客戶端證書(shū),大部分用戶甚至都沒(méi)有自己的客戶端證書(shū)。服務(wù)器可以要求使用客戶端證書(shū),但實(shí)際中很少出現(xiàn)這種情況

  另一方面,安全HTTPS事務(wù)總是要求使用服務(wù)器證書(shū)的。在一個(gè)Web服務(wù)器上執(zhí)行安全事務(wù),比如提交信用卡信息時(shí),你總是希望是在與你所認(rèn)為的那個(gè)組織對(duì)話。由知名權(quán)威機(jī)構(gòu)簽發(fā)的服務(wù)器證書(shū)可以幫助你在發(fā)送信用卡或私人信息之前評(píng)估你對(duì)服務(wù)器的信任度

  服務(wù)器證書(shū)是一個(gè)顯示了組織的名稱、地址、服務(wù)器DNS域名以及其他信息的X.509 v3派生證書(shū)。你和你所用的客戶端軟件可以檢査證書(shū),以確保所有的信息都是可信的

安全HTTP

  SSL自身不要求用戶檢査Web服務(wù)器證書(shū),但大部分現(xiàn)代瀏覽器都會(huì)對(duì)證書(shū)進(jìn)行簡(jiǎn)單的完整性檢査,并為用戶提供進(jìn)行進(jìn)一步徹査的手段。網(wǎng)景公司提出的一種Web服務(wù)器證書(shū)有效性算法是大部分瀏覽器有效性驗(yàn)證技術(shù)的基礎(chǔ)。驗(yàn)證步驟如下所述:

  1、日期檢測(cè)

  首先,瀏覽器檢査證書(shū)的起始日期和結(jié)束日期,以確保證書(shū)仍然有效。如果證書(shū)過(guò)期了,或者還未被激活,則證書(shū)有效性驗(yàn)證失敗,瀏覽器顯示一條錯(cuò)誤信息

  2、簽名頒發(fā)者可信度檢測(cè)

  每個(gè)證書(shū)都是由某些證書(shū)頒發(fā)機(jī)構(gòu)(CA)簽發(fā)的,它們負(fù)責(zé)為服務(wù)器擔(dān)保。證書(shū)有不同的等級(jí),每種證書(shū)都要求不同級(jí)別的背景驗(yàn)證。比如,如果申請(qǐng)某個(gè)電子商務(wù)服務(wù)器證書(shū),通常需要提供一個(gè)營(yíng)業(yè)的合法證明

  任何人都可以生成證書(shū),但有些CA是非常著名的組織,它們通過(guò)非常清晰的流程來(lái)驗(yàn)證證書(shū)申請(qǐng)人的身份及商業(yè)行為的合法性。因此,瀏覽器會(huì)附帶一個(gè)簽名頒發(fā)機(jī)構(gòu)的受信列表。如果瀏覽器收到了某未知(可能是惡意的)頒發(fā)機(jī)構(gòu)簽發(fā)的證書(shū),那它通常會(huì)顯示一條警告信息。有些證書(shū)會(huì)攜帶到受信CA的有效簽名路徑,瀏覽器可能會(huì)選擇接受所有此類證書(shū)。換句話說(shuō),如果某受信CA為“Sam的簽名商店”簽發(fā)了一個(gè)證書(shū),而Sam的簽名商店也簽發(fā)了一個(gè)站點(diǎn)證書(shū),瀏覽器可能會(huì)將其作為從有效CA路徑導(dǎo)出的證書(shū)接受

  3、簽名檢測(cè)

  一旦判定簽名授權(quán)是可信的,瀏覽器就要對(duì)簽名使用簽名頒發(fā)機(jī)構(gòu)的公開(kāi)密鑰,并將其與校驗(yàn)碼進(jìn)行比較,以査看證書(shū)的完整性

  4、站點(diǎn)身份檢測(cè)

  為防止服務(wù)器復(fù)制其他人的證書(shū),或攔截其他人的流量,大部分瀏覽器都會(huì)試著去驗(yàn)證證書(shū)中的域名與它們所對(duì)話的服務(wù)器的域名是否匹配。服務(wù)器證書(shū)中通常都包含一個(gè)域名,但有些CA會(huì)為一組或一群服務(wù)器創(chuàng)建一些包含了服務(wù)器名稱列表或通配域名的證書(shū)。如果主機(jī)名與證書(shū)中的標(biāo)識(shí)符不匹配,面向用戶的客戶端要么就去通知用戶,要么就以表示證書(shū)不正確的差錯(cuò)報(bào)文來(lái)終止連接

  SSL是個(gè)復(fù)雜的二進(jìn)制協(xié)議。除非你是密碼專家,否則就不應(yīng)該直接發(fā)送原始的SSL流量。幸運(yùn)的是,借助一些商業(yè)或開(kāi)源的庫(kù),編寫(xiě)SSL客戶端和服務(wù)器并不十分困難

  OpenSSL是SSL和TLS最常見(jiàn)的開(kāi)源實(shí)現(xiàn)。OpenSSL項(xiàng)目由一些志愿者合作開(kāi)發(fā),目標(biāo)是開(kāi)發(fā)一個(gè)強(qiáng)壯的、具有完備功能的商業(yè)級(jí)工具集,以實(shí)現(xiàn)SSL和TLS協(xié)議以及一個(gè)全功能的通用加密庫(kù)

【代理】

  客戶端通常會(huì)用Web代理服務(wù)器代表它們來(lái)訪問(wèn)Web服務(wù)器。比如,很多公司都會(huì)在公司網(wǎng)絡(luò)和公共因特網(wǎng)的安全邊界上放置一個(gè)代理。代理是防火墻路由器唯一允許進(jìn)行HTTP流量交換的設(shè)備,它可能會(huì)進(jìn)行病毒檢測(cè)或其他的內(nèi)容控制工作

安全HTTP

  但只要客戶端開(kāi)始用服務(wù)器的公開(kāi)密鑰對(duì)發(fā)往服務(wù)器的數(shù)據(jù)進(jìn)行加密,代理就再也不能讀取HTTP首部了,從而代理就無(wú)法知道應(yīng)該將請(qǐng)求轉(zhuǎn)向何處了

安全HTTP

  為了使HTTPS與代理配合工作,要進(jìn)行幾處修改以告知代理連接到何處。一種常用的技術(shù)就是HTTPS SSL隧道協(xié)議。使用HTTPS隧道協(xié)議,客戶端首先要告知代理,它想要連接的安全主機(jī)和端口。這是在開(kāi)始加密之前,以明文形式告知的,所以代理可以理解這條信息

  HTTP通過(guò)新的名為CONNECT的擴(kuò)展方法來(lái)發(fā)送明文形式的端點(diǎn)信息。CONNECT方法會(huì)告訴代理,打開(kāi)一條到所期望主機(jī)和端口號(hào)的連接。這項(xiàng)工作完成之后,直接在客戶端和服務(wù)器之間以隧道形式傳輸數(shù)據(jù)。CONNECT方法就是一條單行的文本命令,它提供了由冒號(hào)分隔的安全原始服務(wù)器的主機(jī)名和端口號(hào)。host:port后面跟著一個(gè)空格和HTTP版本字符串,再后面是CRLF。接下來(lái)是零個(gè)或多個(gè)HTTP請(qǐng)求首部行,后面跟著一個(gè)空行??招兄螅绻⑦B接的握手過(guò)程成功完成,就可以開(kāi)始傳輸SSL數(shù)據(jù)了

CONNECT home.netscape.com:443 HTTP/1.0 User-agent: Mozilla/1.IN<raw SSL-encrypted data would follow here...>

  在請(qǐng)求中的空行之后,客戶端會(huì)等待來(lái)自代理的響應(yīng)。代理會(huì)對(duì)請(qǐng)求進(jìn)行評(píng)估,確保它是有效的,而且用戶有權(quán)請(qǐng)求這樣一條連接。如果一切正常,代理會(huì)建立一條到目標(biāo)服務(wù)器的連接。如果成功,就向客戶端發(fā)送一條200 Connection Established響應(yīng)

HTTP/1.0 200 Connection established
Proxy-agent: Netscape-Proxy/1.1


向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI