1. 程式人生 > >發新帖 HTTPS那些事(一)HTTPS原理

發新帖 HTTPS那些事(一)HTTPS原理

楔子
謠言粉碎機前些日子釋出的《用公共WiFi上網會危害銀行賬戶安全嗎?》,文中介紹了在使用HTTPS進行網路加密傳輸的一些情況,從回覆來看,爭議還是有的。隨著網路越來越普及,應用越來越廣泛,一些網路安全問題也會越來越引起網民的關注,在這裡和大家一起聊聊TLS/SSL也就是我們常說的HTTPS,從原理到實際應用看清它到底是怎麼一回事,以及在使用HTTPS要注意哪些問題以及相關的安全技巧。
網路安全是一個整體的事件,涉及到個人計算機的安全,協議的安全,傳輸資料的安全,以及軟體開發公司和網站的安全,單純的依靠一個HTTPS協議並不能解決所有的問題。希望通過今後一點一點的對安全相關的問題進行說明解釋,能讓更多人對網路安全有所瞭解,從而更安全的使用網路。
文章會比較長,暫時計劃分成三個部分:
第一部分主要描述HTTPS的原理;第二部分主要描述SSL證書驗證的過程與使用的一些注意事項;第三部分會呈現一些針對HTTPS攻擊的例項。如果有需要,我會後續的補充一些內容。
我儘量使用最簡潔的語言來描述相關的概念,這裡開始先挖個坑,然後慢慢地填。

一、什麼是HTTPS
在說HTTPS之前先說說什麼是HTTP,HTTP就是我們平時瀏覽網頁時候使用的一種協議。HTTP協議傳輸的資料都是未加密的,也就是明文的,因此使用HTTP協議傳輸隱私資訊非常不安全。為了保證這些隱私資料能加密傳輸,於是網景公司設計了SSL(Secure Sockets Layer)協議用於對HTTP協議傳輸的資料進行加密,從而就誕生了HTTPS。SSL目前的版本是3.0,被IETF(Internet Engineering Task Force)定義在RFC 6101中,之後IETF對SSL 3.0進行了升級,於是出現了TLS(Transport Layer Security) 1.0,定義在RFC 2246。實際上我們現在的HTTPS都是用的TLS協議,但是由於SSL出現的時間比較早,並且依舊被現在瀏覽器所支援,因此SSL依然是HTTPS的代名詞,但無論是TLS還是SSL都是上個世紀的事情,SSL最後一個版本是3.0,今後TLS將會繼承SSL優良血統繼續為我們進行加密服務。目前TLS的版本是1.2,定義在RFC 5246中,暫時還沒有被廣泛的使用。
對歷史感興趣的朋友可以參考

http://en.wikipedia.org/wiki/Transport_Layer_Security,這裡有對TLS/SSL詳盡的敘述。
二、HTTPS到底安全嗎?
這個答案是肯定的,很安全。谷歌公司已經行動起來要大力推廣HTTPS的使用,在未來幾周,谷歌將對全球所有本地域名都啟用HTTPS,使用者只要在搜尋前用Google帳號登入,之後所有的搜尋操作都將使用TLS協議加密,見:http://thenextweb.com/google/2012/03/05/google-calls-for-a-more-secure-web-expands-ssl-encryption-to-local-domains/
三、HTTPS的工作原理

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
其中非對稱加密演算法用於在握手過程中加密生成的密碼,對稱加密演算法用於對真正傳輸的資料進行加密,而HASH演算法用於驗證資料的完整性。由於瀏覽器生成的密碼是整個資料加密的關鍵,因此在傳輸的時候使用了非對稱加密演算法對其加密。非對稱加密演算法會生成公鑰和私鑰,公鑰只能用於加密資料,因此可以隨意傳輸,而網站的私鑰用於對資料進行解密,所以網站都會非常小心的保管自己的私鑰,防止洩漏。
TLS握手過程中如果有任何錯誤,都會使加密連線斷開,從而阻止了隱私資訊的傳輸。正是由於HTTPS非常的安全,攻擊者無法從中找到下手的地方,於是更多的是採用了假證書的手法來欺騙客戶端,從而獲取明文的資訊,但是這些手段都可以被識別出來,我將在後續的文章進行講述。不過2010年還是有安全專家發現了TLS 1.0協議處理的一個漏洞:http://www.theregister.co.uk/2011/09/19/beast_exploits_paypal_ssl/,實際上這種稱為BEAST的攻擊方式早在2002年就已經被安全專家發現,只是沒有公開而已。目前微軟和Google已經對此漏洞進行了修復。見:http://support.microsoft.com/kb/2643584/en-us https://src.chromium.org/viewvc/chrome?view=rev&revision=90643

相關推薦

HTTPS那些HTTPS原理

楔子 謠言粉碎機前些日子釋出的《用公共WiFi上網會危害銀行賬戶安全嗎?》,文中介紹了在使用HTTPS進行網路加密傳輸的一些情況,從回覆來看,爭議還是有的。隨著網路越來越普及,應用越來越廣泛,一些網路安全問題也會越來越引起網民的關注,在這裡和大家一起聊聊TLS/SSL也就是我們常說的HTTPS,從原理到實際

軟件project—思考項目開發那些

app 爛代碼 fontsize 模式 大型 不明確 極限 後拋 con 閱讀文件夾: 1.背景2.項目管理,質量、度量、進度3.軟件開發是一種設計活動而不是建築活動4.高速開發(簡單的系統結構與復雜的業務模型)5.技術人員的業務理解與產品經理的業務理解的終於業務模型

懷孕、產檢的那些

div 報告 mage 北京大學 之前 clas spa 測試 class 小孩在北京大學深圳醫院出生的,產檢也是在那裏,以下說的都是北大醫院的情況,每個醫院可能不相同,想起多少寫多少吧。第一次寫,寫的很亂。 最開始呢是發現媳婦沒有來月經,然後就去藥店買了早早孕試紙(選擇在

我和 WebSocket 的那些

com lis 都沒有 情況下 系統 並不是 任務管理 js實現 因此   我的策劃大佬離職了,在他go之前我都沒有解決好一個問題,感覺如果我換了工作面試的時候,別人問到 “你在做項目的時候,遇到的最頭疼的問題是什麽,是怎麽解決的?”,首先想到的應該也是他,今天感覺是時候寫

聊聊高併發三十三Java記憶體模型那些從一致性(Consistency)的角度理解Java記憶體模型

可以說併發系統要解決的最核心問題之一就是一致性的問題,關於一致性的研究已經有幾十年了,有大量的理論,演算法支援。這篇說說一致性這個主題一些經常提到的概念,理清Java記憶體模型在其中的位置。 一致性問題更準確的說是一致性需求,看系統需要什麼樣的一致性保證。比如分散式領域

Android Studio使用的那些安裝、重灌、啟動

今天開啟Android Studio歡迎介面突然就變了,建立新專案、開啟以前專案真的是一臉懵逼!如下圖: 以為是哪裡配置的問題倒騰了半個小時沒倒騰明白,然後去網上搜索各種關鍵字都是講一些AndroidStudio安裝啟動配置的事情,沒能解決最後靈機一試解決了。然後就順便想把網易部落格以

文字渲染的那些字型是如何儲存的?

在現代生活裡,我們幾乎每天都會和螢幕上的文字打交道——文字看起來是如此平凡,以至於不少與 UI 相關的專業人士都對其下的複雜性知之甚少。這個系列旨在以開發者的角度,介紹一些從文字的二進位制資料到畫素之間流程的科普知識,希望對感興趣的同學能有一些啟發。 字型的標準與格式 喜歡折騰系統的同學,對於常見的字型格

軟體工程—思考專案開發那些

閱讀目錄: 1.背景 2.專案管理,質量、度量、進度 3.軟體開發是一種設計活動而不是建築活動 4.快速開發(簡單的系統結構與複雜的業務模型) 5.技術人員的業務理解與產品經理的業務理解的最終業務模型 5.1.產品的業務理解(業務流程、資料流程及場景) 5.2.技術人員的業務理

http你不得不知道的那些--同源策略1

前段時間詳細的學習了一下http相關的東西,特別是看了http權威指南,感覺收穫良多,在未來的一段時間我將把自己所學到的相關東西分享出來,先撿重要的(我自認為的)來說。本章講述同源策略,希望對大家有所

C++數值與字串相互轉換的那些字串轉數值(轉載請註明)

以前一門心思搞演算法,這個東西覺得自己寫個函式就能實現的事,但是到了公司後才發現同事寫的程式碼裡面,呼叫各種庫函式、window API、流來實現。什麼都不懂的我表示鴨梨很大,今天翻了翻資料瞭解了下各種方法的使用方法、區別以及適用範圍,寫成了這篇又長又臭又沒條理的東西。 注

docker volume 容器卷的那些

docker volume 容器卷的那些事(二)。接觸 docker 的朋友都知道,docker 映象是以 layer 概念存在的,一層一層的疊加,最終成為我們需要的映象。但該映象的每一層都是 ReadOnly 只讀的。只有在我們執行容器的時候才會建立讀寫層

ios tableView那些建立一個簡單的tableView

工作也有半年多了!幾乎每個專案中的會用到tableview這個神奇而好用的控制元件,在學習和工作中都會看別人的部落格!對我有很大的幫助,就如同站在巨人的肩膀上的感覺吧 哈哈!於是決定重新開始寫部

Java實習面試的那些

今年暑假之前,大概是六月份初,我和同班一個男生一起投簡歷開始找實習工作,因為我們倆都是主要走JavaEE方向,除了學校教了一點java基礎知識,以及jsp的知識,其他部分靠自學,當時我們班上大部分同學

maven的那些

Maven建立一個Java專案 目標:用Maven建立一個普通Java專案,並把該專案轉成IDEA專案,匯入到IDEA,最後把這個專案打包成一個jar檔案,最後在控制的臺執行jar檔案。 1、開啟控制檯,進入到想要建立專案的目錄,然後執行如下命令,引數自由填寫: m

Java中常用到的文件操作那些——替換doc文檔模板,生成真實合同案例

代碼 sta ring site hashmap i++ illegal puts except   工作中,我們時常會遇到一些操作文件的操作,比如在線生成合同模板,上傳/下載/解析Excel,doc文檔轉為pdf等操作。本文就已工作中遇到的在線生成合同為例,簡要地介紹一種

工作那些談談碼農與農民工區別和發展之路 工作那些十二如果哪天,沒有了電腦 工作那些十三再次失業

工作那些事系列連結快速通道,不斷更新中: 工作那些事(一)今年工作不好找 工作那些事(二)應聘時填寫個人資訊ABCD 工作那些事(三)什麼樣的公司能吸引你,什麼樣的公司適合你? 工作那些事(四)大公司VS小公司 工作那些事(五)談談專案資料整理和積累 工作那些事(六)談談

MongoDB 那些文以蔽之

前言 身邊一直都有小夥伴在問:MongoDB到底是什麼?它有到底什麼特性?有什麼與眾不同?在什麼情況下使用MongoDB最合適?以什麼樣的姿勢是最好的?難道就一定要用嗎?....說實話,這些問題都問到精髓了,也看得出來你們的急切和真切。有時候大家都比較忙,很難抽出一天的時間,坐而論道,把這些問題掰扯清楚,然後

關於爛代碼的那些

天才 是個 莫名其妙 多項目 變量 ++ 經歷 新功能 修改 轉自:http://blog.2baxb.me/archives/1343 1.摘要 最近寫了不少代碼,review了不少代碼,也做了不少重構,總之是對著爛代碼工作了幾周。為了抒發一下這幾周裏好幾次到達崩潰邊

柵格那點兒---Raster是個啥子東西

記錄 sha 離散數據 tin 位置 直接 tro 大小 有時 Raster是個啥子東西 現如今,不僅是在遙感應用中能看到花花綠綠的影像了,在GIS應用中也能隨處看到她們的身影。在各種在線地圖中,衛星影像作為底圖與矢量的道路層疊加;高程DEM作為高程來源實現地形的山

玩兒蟲那些—— 使用curl

nod -h div sel ant validate 空間 pre rap 目錄 一、爬一個簡單的網站 二、模擬登錄新浪 三、各種請求的發送 四、使用curl 五、模擬登錄QQ空間 六、selenium的使用 七、phantomjs的使用 八、開源框架webmagic