SSL(Secure Socket Layer 安全套接層)是基於HTTPS下的一個協議加密層,最初是由網景公司(Netscape)研發,后被IETF(The Internet Engineering Task Force - 互聯網工程任務組)標准化后寫入(RFCRequest For Comments 請求注釋),RFC里包含了很多互聯網技術的規范!
起初是因為HTTP在傳輸數據時使用的是明文(雖然說POST提交的數據時放在報體里看不到的,但是還是可以通過抓包工具竊取到)是不安全的,為了解決這一隱患網景公司推出了SSL安全套接字協議層,SSL是基於HTTP之下TCP之上的一個協議層,是基於HTTP標准並對TCP傳輸數據時進行加密,所以HPPTS是HTTP+SSL/TCP的簡稱。
由於HTTPS的推出受到了很多人的歡迎,在SSL更新到3.0時,IETF對SSL3.0進行了標准化,並添加了少數機制(但是幾乎和SSL3.0無差異),標准化后的IETF更名為TLS1.0(Transport Layer Security 安全傳輸層協議),可以說TLS就是SSL的新版本3.1,並同時發布“RFC2246-TLS加密協議詳解”,如果想更深層次的了解TLS的工作原理可以去RFC的官方網站:www.rfc-editor.org,搜索RFC2246即可找到RFC文檔!
SSL連接過程
SSL在通信時會先發送一段內容:
(1)客戶端可以支持的SSL最高版本號
(2)用於生成主秘密的32字節的隨機數
(3)確定會話的會話ID
(4)客戶端可以支持的密碼套件列表
密碼套件格式:每個套件都以“SSL”開頭,緊跟着的是密鑰交換算法。用“With”這個詞把密鑰交換算法、加密算法、散列算法分開,例如:SSL_DHE_RSA_WITH_DES_CBC_SHA,表示把DHE_RSA(帶有RSA數字簽名的定義為Diffie-HellMan)密鑰交換算法;把DES_CBC定義為加密算法;把SHA定義為散列算法。
(5)客戶端可以支持的壓縮算法列表
選擇密鑰過程:
SSL客戶端(也是TCP的客戶端)在TCP連接建立之后,發出一個ClientHello來發起握手,這個消息里面包含了自己可實現的算法列表和其它一些需要的消息,SSL的服務器端會回應一個ServerHello,這里面確定了這次通信所需要的算法,然后發過去自己的證書(里面包含了身份和自己的公鑰)。Client在收到這個消息后會生成一個秘密消息,用SSL服務器的公鑰加密后傳過去,SSL服務器端用自己的私鑰解密后,會話密鑰協商成功,雙方可以用同一份會話密鑰來通信了。(轉自:http://blog.csdn.net/misslong/article/details/9698657)
當服務器收到客戶端發來的請求通信消息后會作出回應消息
回應消息如下
(1)一個SSL版本號。取客戶端支持的最高版本號和服務端支持的最高版本號中的較低者。
(2)一個用於生成主秘密的32字節的隨機數。(客戶端一個、服務端一個)
(3)會話ID
(4)從客戶端的密碼套件列表中選擇的一個密碼套件
(5)從客戶端的壓縮方法的列表中選擇的壓縮方法
這個階段之后,客戶端服務端知道了下列內容:
(1)SSL版本
(2)密鑰交換、信息驗證和加密算法
(3)壓縮方法
(4)有關密鑰生成的兩個隨機數。
(5)頒發證書機構,過期時間!
隨機數是用來驗證通信雙方在連接過程中的准確性!
以上SSL連接過程轉自:http://www.cnblogs.com/zhuqil/archive/2012/10/06/2712768.html
TLS與SSL連接過程無任何差異
SSL與TLS兩者所使用的算法是不同的,SSL使用的是MAC哈希算法,TLS使用的是RFC-2104定義的HMAC算法,兩者差異是在填充字節與密鑰之間一個使用的是連接運算,一個使用的是異或運算,MAC和HMAC在取值范圍也是不同的,但是安全度是相同的!
SSL可以分為兩個協議,SSL記錄協議(SSL Record Protocol)為TCP協議在通信提交數據時提供數據封裝、壓縮、加密等基本操作!
SSL握手協議(SSL Handshake Protocol)它建立在SSL記錄協議之上,用於在實際的數據傳輸開始前,通訊雙方進行身份認證、協商加密算法、交換加密密鑰等。
TLS與SSL的兩個協議工作方式與SSL一樣!
SSL所使用的版本為3.0,版本號也為3.0.x(x代表未知數因為SSL還在更新),而TLS版本為1.0,但版本號卻為SSL3.1.0!
TLS增加了許多新的報警代碼,比如解密失敗(decryption_failed)、記錄溢出(record_overflow)、未知CA(unknown_ca)、拒絕訪問(access_denied)等,但同時也支持SSL協議上所有的報警代碼!
TLS和SSL不能共用,因為在認證證書時TLS指定必須與TLS之間交換證書,因為TLS與SSL所使用的加密算法是不同的,所以不能把TLS與SSL一並使用!
在加密數據前會額外填充一部分在SSL中,填充后的數據長度要達到密文塊長度的最小整數倍,而在TLS中,填充后的數據長度可以是密文塊長度的任意整數倍(但填充的最大長度為255字節),並和公開密鑰拼接,隨后在跟着密文,這種方式可以防止基於對報文長度進行分析的攻擊!
TLS對隨機數算法也進行了增強,TLS所使用的隨機數算法是HMAC中定義的PRF來完成的,PRF使用兩種散列算法保證其安全性。如果任一算法暴露了,只要第二種算法未暴露,則數據仍然是安全的,而SSL則使用的是MAC算法生成的隨機只是用了一種散列算法!
使用與不使用SSL/TLS加密會帶來的威脅與好處(轉自:http://www.ruanyifeng.com/blog/2014/02/ssl_tls.html)
不使用SSL與TLS加密會帶來的威脅:
(1) 竊聽風險(eavesdropping):第三方可以獲知通信內容。
(2) 篡改風險(tampering):第三方可以修改通信內容。
(3) 冒充風險(pretending):第三方可以冒充他人身份參與通信。
使用SS;和TLS加密所帶來的好處
(1) 所有信息都是加密傳播,第三方無法竊聽。
(2) 具有校驗機制,一旦被篡改,通信雙方會立刻發現。
(3) 配備身份證書,防止身份被冒充。
下面來解釋一下加密中“對稱加密”和“非對稱加密”的區別
對稱加密:
在對稱加密中,數據發送方將明文(原始數據)和加密密鑰一起經過特殊加密算法處理后,使其變成復雜的加密密文發送出去。接收方收到密文后,若想解讀原文,則需要使用加密密鑰及相同算法的逆算法對密文進行解密,才能使其恢復成可讀明文。在對稱加密算法中,使用的密鑰只有一個,發收信雙方都使用這個密鑰對數據進行加密和解密,也可以不使用算法加密!
非對稱加密:
甲方生成一對密鑰並將其中的一把作為公用密鑰向其它方公開;得到該公用密鑰的乙方使用該密鑰對機密信息進行加密后再發送給甲方;甲方再用自己保存的另一把專用密鑰對加密后的信息進行解密
另一方面,甲方可以使用乙方的公鑰對機密信息進行加密后在發送給乙方;乙方在使用自己的四要對數據進行解密在驗證!
甲/乙方只能用其專用密鑰解密由其公用密鑰加密后的任何信息。 非對稱加密算法的保密性比較好,它消除了最終用戶交換密鑰的需要。
客戶端/服務器在交換密鑰時可以從中所使用的兩把密鑰中隨便選擇一把作為公鑰發送給目標方!
雙方優點:
對稱加密不需要經過過多的數學計算,不會影響速率,而非對稱加密需要經過復雜的數學計算,需要CPU ALT運算單元進行大量算數運算,會提高耗電量,降低性能,影響速率,降低網頁訪問速率,不過根據現在的電腦配置這些問題都不算什么,所以為什么在使用HTTP和HTTPS時感覺沒用差別一樣!
但是服務器只承載一個HTTPS的網站還好如果承載過多的話再好的配置也會吃不消,正所謂三個臭皮匠 勝過諸葛亮,所以不是所有網站都要用HTTPS,僅個別需要提交敏感類數據時才建議使用!
