原文位址:http://blog.csdn.net/clh604/article/details/22179907
寫的太好了,就是我一直想找的内容,看了這個對https立馬明白多了
<a target="_blank" href="http://www.cnblogs.com/zhuqil/archive/2012/07/23/2604572.html">http://www.cnblogs.com/zhuqil/archive/2012/07/23/2604572.html</a>
我們都知道HTTPS能夠加密資訊,以免敏感資訊被第三方擷取。是以很多銀行網站或電子郵箱等等安全級别較高的服務都會采用HTTPS協定。
HTTPS其實是有兩部分組成:HTTP + SSL / TLS,也就是在HTTP上又加了一層處理加密資訊的子產品。服務端和用戶端的資訊傳輸都會通過TLS進行加密,是以傳輸的資料都是加密後的資料。具體是如何進行加密,解密,驗證的,且看下圖。
這個沒什麼好說的,就是使用者在浏覽器裡輸入一個https網址,然後連接配接到server的443端口。
采用HTTPS協定的伺服器必須要有一套數字證書,可以自己制作,也可以向組織申請。差別就是自己頒發的證書需要用戶端驗證通過,才可以繼續通路,而使用受信任的公司申請的證書則不會彈出提示頁面(startssl就是個不錯的選擇,有1年的免費服務)。這套證書其實就是一對公鑰和私鑰。如果對公鑰和私鑰不太了解,可以想象成一把鑰匙和一個鎖頭,隻是全世界隻有你一個人有這把鑰匙,你可以把鎖頭給别人,别人可以用這個鎖把重要的東西鎖起來,然後發給你,因為隻有你一個人有這把鑰匙,是以隻有你才能看到被這把鎖鎖起來的東西。
這個證書其實就是公鑰,隻是包含了很多資訊,如證書的頒發機構,過期時間等等。
這部分工作是有用戶端的TLS來完成的,首先會驗證公鑰是否有效,比如頒發機構,過期時間等等,如果發現異常,則會彈出一個警告框,提示證書存在問題。如果證書沒有問題,那麼就生成一個随即值。然後用證書對該随機值進行加密。就好像上面說的,把随機值用鎖頭鎖起來,這樣除非有鑰匙,不然看不到被鎖住的内容。
這部分傳送的是用證書加密後的随機值,目的就是讓服務端得到這個随機值,以後用戶端和服務端的通信就可以通過這個随機值來進行加密解密了。
服務端用私鑰解密後,得到了用戶端傳過來的随機值(私鑰),然後把内容通過該值進行對稱加密。所謂對稱加密就是,将資訊和私鑰通過某種算法混合在一起,這樣除非知道私鑰,不然無法擷取内容,而正好用戶端和服務端都知道這個私鑰,是以隻要加密算法夠彪悍,私鑰夠複雜,資料就夠安全。
這部分資訊是服務段用私鑰加密後的資訊,可以在用戶端被還原
用戶端用之前生成的私鑰解密服務段傳過來的資訊,于是擷取了解密後的内容。整個過程第三方即使監聽到了資料,也束手無策。
SSL的位置
SSL介于應用層和TCP層之間。應用層資料不再直接傳遞給傳輸層,而是傳遞給SSL層,SSL層對從應用層收到的資料進行加密,并增加自己的SSL頭。
RSA性能是非常低的,原因在于尋找大素數、大數計算、資料分割需要耗費很多的CPU周期,是以一般的HTTPS連接配接隻在第一次握手時使用非對稱加密,通過握手交換對稱加密密鑰,在之後的通信走對稱加密。
<a target="_blank" href="http://www.cnblogs.com/ttltry-air/archive/2012/08/20/2647898.html">http://www.cnblogs.com/ttltry-air/archive/2012/08/20/2647898.html</a>
HTTPS在傳輸資料之前需要用戶端(浏覽器)與服務端(網站)之間進行一次握手,在握手過程中将确立雙方加密傳輸資料的密碼資訊。TLS/SSL協定不僅僅是一套加密傳輸的協定,更是一件經過藝術家精心設計的藝術品,TLS/SSL中使用了非對稱加密,對稱加密以及HASH算法。握手過程的具體描述如下:
1.浏覽器将自己支援的一套加密規則發送給網站。 2.網站從中選出一組加密算法與HASH算法,并将自己的身份資訊以證書的形式發回給浏覽器。證書裡面包含了網站位址,加密公鑰,以及證書的頒發機構等資訊。 3.浏覽器獲得網站證書之後浏覽器要做以下工作: a) 驗證證書的合法性(頒發證書的機構是否合法,證書中包含的網站位址是否與正在通路的位址一緻等),如果證書受信任,則浏覽器欄裡面會顯示一個小鎖頭,否則會給出證書不受信的提示。 b) 如果證書受信任,或者是使用者接受了不受信的證書,浏覽器會生成一串随機數的密碼,并用證書中提供的公鑰加密。 c) 使用約定好的HASH算法計算握手消息,并使用生成的随機數對消息進行加密,最後将之前生成的所有資訊發送給網站。 4.網站接收浏覽器發來的資料之後要做以下的操作: a) 使用自己的私鑰将資訊解密取出密碼,使用密碼解密浏覽器發來的握手消息,并驗證HASH是否與浏覽器發來的一緻。 b) 使用密碼加密一段握手消息,發送給浏覽器。 5.浏覽器解密并計算握手消息的HASH,如果與服務端發來的HASH一緻,此時握手過程結束,之後所有的通信資料将由之前浏覽器生成的随機密碼并利用對稱加密算法進行加密。
這裡浏覽器與網站互相發送加密的握手消息并驗證,目的是為了保證雙方都獲得了一緻的密碼,并且可以正常的加密解密資料,為後續真正資料的傳輸做一次測試。另外,HTTPS一般使用的加密與HASH算法如下:
非對稱加密算法:RSA,DSA/DSS 對稱加密算法:AES,RC4,3DES HASH算法:MD5,SHA1,SHA256
總結:
伺服器 用RSA生成公鑰和私鑰
把公鑰放在證書裡發送給用戶端,私鑰自己儲存
用戶端首先向一個權威的伺服器檢查證書的合法性,如果證書合法,用戶端産生一段随機數,這個随機數就作為通信的密鑰,我們稱之為對稱密鑰,用公鑰加密這段随機數,然後發送到伺服器
伺服器用密鑰解密擷取對稱密鑰,然後,雙方就已對稱密鑰進行加密解密通信了