在三大社交**(facebook,twitter,google plus)上混過的同道們都應該注意到了一點:這三個**的網域名稱前面都是https而不是最常見的http。
先介紹http:超文字傳輸協議(英文:hypertext transfer protocol,縮寫:http)是網際網路上應用最為廣泛的一種網路協議。設計http最初的目的是為了提供一種發布和接收html頁面的方法。通過http或者https協議請求的資源由統一資源識別符號(uniform resource identifiers,uri)來標識。http是乙個客戶端終端(使用者)和伺服器端(**)請求和應答的標準(tcp)。通過使用web瀏覽器、網路爬蟲或者其它的工具,客戶端發起乙個http請求到伺服器上指定埠(預設埠為80)。我們稱這個客戶端為使用者**程式(user agent)。應答的伺服器上儲存著一些資源,比如html檔案和影象。我們稱這個應答伺服器為源伺服器(origin server)。在使用者**和源伺服器中間可能存在多個「中間層」,比如**、閘道器或者隧道(tunnel)。
儘管tcp/ip協議是網際網路上最流行的應用,http協議中,並沒有規定必須使用它或它支援的層。事實上,http可以在任何網際網路協議上,或其他網路上實現。http假定其下層協議提供可靠的傳輸。因此,任何能夠提供這種保證的協議都可以被其使用。因此也就是其在tcp/ip協議族使用tcp作為其傳輸層。
通常,由http客戶端發起乙個請求,建立乙個到伺服器指定埠(預設是80埠)的tcp連線。http伺服器則在那個埠監聽客戶端的請求。一旦收到請求,伺服器會向客戶端返回乙個狀態,比如"http/1.1 200 ok",以及返回的內容,如請求的檔案、錯誤訊息、或者其它資訊。
http協議的具體定義複雜專業,在此不進行具體介紹,你只需要搞清楚一點:在只使用http協議的情況下,本地瀏覽器與目標**之間的資料流是明文的!也就是說,你的isp知道你都幹了些什麼,而且任何人都可以對你的資料流進行擷取監聽,你沒有任何隱私可言。
這對於需要登入的**簡直是噩夢,賬號密碼以及在**上的發言都很容易被盜取,而且要製作乙個能騙過多數人的釣魚**也很容易,因為本地瀏覽器並不會去驗證目標伺服器的真實身份,很容易遭受中間人攻擊(攻擊者偽裝成目標伺服器接收資料流,解密監聽後在轉給真正的目標伺服器)。
為了增加安全性,https橫空出世:網景(曾經很強大的收費瀏覽器公司,後來被微軟用免費的ie搞死)在2023年建立了https,並應用在網景導航者瀏覽器中。最初,https是與ssl一起使用的;在ssl逐漸演變到tls時,最新的https也由在2023年五月公布的rfc 2818正式確定下來。(20年後竟然大多數**還不支援https,這普及速度真是夠慢的!)
http協議和安全協議同屬於應用層(osi模型的最高層),具體來講,安全協議工作在http之下,運輸層之上:安全協議向執行http的程序提供乙個類似於tcp的套接字,供程序向其中注入報文,安全協議將報文加密並注入運輸層套接字;或是從運輸層獲取加密報文,解密後交給對應的程序。嚴格地講,https並不是乙個單獨的協議,而是對工作在一加密連線(tls或ssl)上的常規http協議的稱呼。
https報文中的任何東西都被加密,包括所有報頭和荷載。除了可能的選擇密文攻擊之外,乙個攻擊者所能知道的只有在兩者之間有一連線這一事實。
好吧,又多了一堆術語:ssl,tls,不過也可以看出來https是http與ssl/tls的組合協議。
以下簡要介紹ssl協議的工作方式。客戶端要收發幾個握手訊號:
傳送乙個「clienthello」訊息,內容包括:支援的協議版本,比如tls1.0版,乙個客戶端生成的隨機數(稍後使用者生成「會話金鑰」),支援的加密演算法(如rsa公鑰加密)和支援的壓縮演算法。
然後收到乙個「serverhello」訊息,內容包括:確認使用的加密通訊協議版本,比如tls 1.0版本。如果瀏覽器與伺服器支援的版本不一致,伺服器關閉加密通訊,乙個伺服器生成的隨機數,稍後用於生成"對話金鑰",確認使用的加密方法,比如rsa公鑰加密,伺服器證書。
當雙方知道了連線引數,客戶端與伺服器交換證書(依靠被選擇的公鑰系統)。這些證書通常基於x.509,不過已有草案支援以openpgp為基礎的證書。
伺服器請求客戶端公鑰。客戶端有證書即雙向身份認證,沒證書時隨機生成公鑰。
客戶端與伺服器通過公鑰保密協商共同的主私鑰(雙方隨機協商),這通過精心謹慎設計的偽隨機數功能實現。結果可能使用diffie-hellman交換,或簡化的公鑰加密,雙方各自用私鑰解密。所有其他關鍵資料的加密均使用這個「主金鑰」。
資料傳輸中記錄層(record layer)用於封裝更高層的http等協議。記錄層資料可以被隨意壓縮、加密,與訊息驗證碼壓縮在一起。每個記錄層包都有乙個content-type段用以記錄更上層用的協議。
tls:ietf(www.ietf.org)將ssl作了標準化,即rfc 2246,並將其稱為tls(transport layer security),其最新版本是rfc 5246,版本1.2。從技術上講,tls1.0與ssl3.0的差異非常微小。
tls包含三個基本階段:
對等協商支援的金鑰演算法
基於非對稱金鑰的資訊傳輸加密和身份認證、基於pki證書的身份認證
基於對稱金鑰的資料傳輸保密
在第一階段,客戶端與伺服器協商所用密碼演算法。 當前廣泛實現的演算法選擇如下:
公鑰私鑰非對稱金鑰保密系統:rsa、diffie-hellman、dsa;
對稱金鑰保密系統:rc2、rc4、idea、des、triple des、aes以及camellia;
單向雜湊函式:md5、sha1以及sha256。(以上均是加密演算法,有興趣請自行google)
tls/ssl有多樣的安全保護措施:
所有的記錄層資料均被編號,用於訊息驗證碼校驗。
相對而言tls安全性更高一些,不過兩者差別不大。
現在我們看到了,當使用https,傳輸過程中資料流始終是被強加密的(舉例:facebook:與www.facebook.com採用128位加密技術。該連線採用tls 1.2。該連線使用aes_128_gcm(迄今為止依然很可靠,極難被破解的加密演算法)進行加密和身份驗證,並使用ecdhe_ecdsa(迄今為止也很可靠)作為金鑰交換機制。twitter:與twitter.com採用128位加密技術。該連線採用tls 1.2。該連線使用aes_128_gcm進行加密和身份驗證,並使用ecdhe_rsa(很可靠)作為金鑰交換機制。google plus(所有google服務都一樣): 與plus.google.com採用256位加密技術。該連線採用tls 1.2。該連線使用chacha20_poly1305(也是讓人放心的加密演算法)進行加密和身份驗證,並使用ecdhe_ecdsa(迄今為止也很可靠)作為金鑰交換機制。),只有本地瀏覽器與目標伺服器知道內容,誰也沒法進行資料的竊取監聽。
而且https還有乙個防止中間人攻擊和釣魚的機制,就是數字證書:
伺服器設定
要使一網路伺服器準備好接受https連線,管理員必須建立一數字證書,並交由證書頒發機構簽名以使瀏覽器接受。證書頒發機構會驗證數字證書持有人和其宣告的為同一人。瀏覽器通常都預裝了證書頒發機構的證書,所以他們可以驗證該簽名。
獲得證書
由證書頒發機構簽發的證書有免費的,也有每年收費13美元到1500美元不等的。
乙個組織也可能有自己的證書頒發機構,尤其是當設定瀏覽器來訪問他們自己的**時(如,執行在公司或學校區域網內的**)。他們可以容易地將自己的證書加入瀏覽器中。
此外,還存在乙個人到人的證書頒發機構,cacert。
作為訪問控制
https也可被用作客戶端認證手段來將一些資訊限制給合法的使用者。要做到這樣,管理員通常會給每個使用者建立證書(通常包含了使用者的名字和電子郵件位址)。這個證書會被放置在瀏覽器中,並在每次連線到伺服器時由伺服器檢查。
當私鑰失密時
這樣,當假冒的目標伺服器試圖與本地瀏覽器取得聯絡時,瀏覽器發現假冒的目標伺服器沒有真實有效的證書,就會拒絕連線並爆出警告。簡單來說就是小混混(黑客等)拿著偽造的學生證(偽造的數字證書)想進學校,但被門衛(瀏覽器的證書驗證系統)發現了,就沒能進去。
對https的最簡單描述:我在家(本地瀏覽器)把信(資訊流)放在上了鎖的盒子裡(ssl/tls強加密),再交由郵遞員(isp,路由器等)送到朋友(目標伺服器)手中,接收時朋友要出事身份證(數字證書),身份正確才能讓朋友接收並開啟盒子(解密),路上沒有人能夠得知信的內容。
https嚴重不利於進行jiankong,所以牆內**幾乎沒有支援https的?
http 與 https 的區別
https secure hypertext transfer protocol 安全超文字傳輸協議 它是乙個安全通訊通道,它基於http開發,用於在客戶計算機和伺服器之間交換資訊。它使用安全套接字層 ssl 進行資訊交換,簡單來說它是http的安全版。它是由netscape開發並內置於其瀏覽器中,...
HTTPS與HTTP的區別
最近學習網路相關的知識,看到https和http,兩個有區別,於是在網上找了相關的資料,放在自己的部落格,作為學習筆記吧。ssl介紹 ssl secure socket layer 為netscape所研發,用以保障在internet上資料傳輸之安全,利用 資料加密 encryption 技術,可確...
http與https的區別
在url前加https 字首表明是用ssl加密的。你的電腦與伺服器之間收發的資訊傳輸將更加安全。web伺服器啟用ssl需要獲得乙個伺服器證書並將該證書與要使用ssl的伺服器繫結。http和https使用的是完全不同的連線方式,用的埠也不一樣,前者是80,後者是443 https協議是由ssl htt...