1. 程式人生 > >Http、Https 和 Socket 的區別與聯絡

Http、Https 和 Socket 的區別與聯絡

一、HTTP與HTTPS

      我們都知道,HTTP是一種常用的網路傳輸協議,它是基於TCP的一種應用層協議,應用層是什麼樣的一個概念,通過下面這張示意圖可以很好的理解:


HTTP協議的網路傳輸十分常見,例如網易的主頁http://www.163.com/。HTTP型別的網路傳輸使用十分方便,但是其在安全性上卻有很大問題,列舉如下:

1.HTTP協議在傳輸資料時是明文的,任何人通過一個簡單的抓包工具,就可以截獲到所有傳輸資料。

2.HTTP協議在傳輸資料時無法保證資料的完整,在截獲到明文資料後,很容易就可以將其篡改,這也是一些網頁總是被植入惡意廣告的原因。

3.HTTP協議在傳輸資料時無法保證真實性,這也是最恐怖的一點。誤入了域名欺騙的釣魚網站,極容易對使用者帶來財產損失。

基於上面3點安全性的考慮,一種更加安全的網路傳輸協議勢必要推行,那就是HTTPS。

      要理解HTTPS協議,首先需要明白什麼是SSL/TLS。SSL全稱“Secure Sockets Layer”,意思為安全套接層。其實由網景公司為了解決HTTP傳輸協議在安全方面的缺陷而設計的。後來被標準化,更名為TLS,全稱“Transport Layer Security”,意思為傳輸層安全協議。

        那麼現在就好理解了,其實HTTPS就是將HTTP協議與TLS協議組合起來,在不改變HTTP協議原設計的基礎上,為其新增安全性校驗並對傳輸的資料進行加密。那麼TLS究竟在網路傳輸的那一層進行了處理了,下圖可以很好的表示:


證書

      通過前面所介紹,我們知道HTTPS主要是為了解決3個問題:資料加密、資料完整、資料真實。那麼下一步就是如何解決這些問題,資料加密在傳送資料前依賴SSL層對資料進行加密,資料完整與真實性則要靠另一種關鍵技術:數字證書。

      通過一個小例子可以很容易的理解證書的作用,這個例子的來源是<程式設計隨想>的作者,我這裡暫且借用一下:A公司的a到B公司辦事,為了證明a確實是A公司的職員而不是商業間諜,A公司會為a提供一個帶有公章的證明,當B公司看到這個證明時,就可以信任辦事員a。對比網路傳輸,這個證明就是證書,證書可以保證這個網站的真實性。我們繼續往後分析,當B公司與越來越多的公司進行商業合作時,就又有新的問題出現了,比如C公司的c來B公司辦事,就需要拿C公司帶公章的證明,D公司的d來B公司辦事就需要拿D公司帶公章的證明...這樣一來,B公司要存放好多公司的公章和證明的模板,才能夠完成校驗。這樣未免也太麻煩了,對應到網路傳輸中,客戶端就是B公司,各個網站都有自己的證書檔案,這樣客戶端需要安裝信任大量的證書,為了解決這樣的問題,就有了第三方CA機構。第三方CA機構是由大家公認信任的機構,例如R公司為第三方信任機構,其業務是為其他公司提供公章證明,這樣一來,B公司只要保有這個R公司的公章證明副本,其他A,C,D公司的辦事員也只需要從R公司申請到一個公章證明就可以到B公司來交流業務了。

    CA的全稱是“Certificate Authority”,意為證書授權中心。大部分CA機構頒發的證書都是需要付費的,CA機構頒發的證書一般都是根證書,根證書也比較容易理解,首先證書是有鏈式信任關係的,例如Y證書是由CA機構頒發的根證書,由這個Y證書還可以創建出許多子證書,子證書可以繼續建立子證書,只要根證書是受信任的,其下所有的子證書都是受信任的,如下圖:


    我們可以開啟開源中國部落格的主頁:https://www.oschina.net/blog。在Chrome瀏覽器位址列左邊可以檢視證書資訊,如下:

點選證書資訊,可以看到完整的證書鏈,如下圖:


從圖中可以看到,根證書是由CA機構VerSign公司頒發的。此處還可以看到當前證書是否有效以及過期時間,如果證書無效則說明此網頁資訊有可能被篡改過,使用者在訪問時就要小心了。

    除了CA機構可以簽發證書外,個人其實也是可以建立證書的,當然個人建立的證書也是不被信任的,我們姑且把這類證書叫做自簽名證書,如果用自簽名證書搭建了HTTPS的服務,則客戶端需要安裝對應的證書信任,才可以進行此服務的訪問。

證書費用

要實現 HTTPS,證書是必不可少的組成部分。一般,證書都會部署在網站等網路服務的伺服器端。證書的實質,是一個公私鑰對,其內部原理,是一種非對稱加密演算法。最常見演算法是 RSA。由於這種演算法、原理都是透明的,並且開放的,所以,任何人都可以隨意去製作公私鑰對,所以,在通訊雙方進行通訊時,除了必須要有公私鑰對這個必要條件,還要知道,當前使用的公鑰,是否就是目標通訊方所公佈的。

從目前現狀來看,作出這個判斷,並不容易,也沒有什麼可靠的辦法。實際採用的辦法是,採用國際上具有公信力的機構來認證這些公私鑰是否是目標通訊方。這種具備公信力的機構,就叫證書頒發機構,英文是 CA,Certificate Authority。頂級的證書頒發機構,叫 Root CA底下還設有下級分支機構。分支機構視授權不同,有些也具有證書頒發的能力。

每一張有效證書,都帶有自己的頒發機構的資訊,也是一張證書,這個證書還帶有自己的頒發機構,一直上溯到頂級證書頒發機構,這個叫做證書鏈為了幫助快速安全驗證通訊目標方的證書真偽,頂級證書頒發機構的證書,都會預置到作業系統或者瀏覽器或者客戶端的內部,隨軟體分發,一起分發到終端使用者,這樣在進行加密通訊前,只要上溯證書鏈,就可以判定當前證書是否真實有效。

從上述原理過程來看,公私鑰對,人人都可以自己隨便建立,甚至連證書也可以隨便造出來,但是想讓世界上最廣大的使用者都能自動認可這個證書,需要在全世界最廣泛的作業系統裡和瀏覽器裡去預置證書頒發機構的頂級證書,這個就不是任何人隨便可以構造出來的。

由此,就解釋了,為什麼 HTTPS 證書為什麼這麼貴。一張證書的製作成本,其實約等於零,但是證書的使用者需要分攤這些流程中提到的具有公信力的機構的運作成本。包含但不限於:

1、稽核 ,驗證 CSR 成本,支援成本,法律成本(保險費用,擔保費用)

2、要進入各個瀏覽器的根證書列表,WebTrust 年度審計費用,是很大的開銷

3、一些瀏覽器廠商還會對植入根證書列表的 CA 收費

4、基礎設施開銷,CRL 和 OCSP 伺服器成本

5、驗證 CSR:就是提交證書申請後,CA要做多項驗證,越是高階的證書(比如EV)驗證越麻煩。不固定開銷,有些要花費很多人力和時間來完成。

6、CA鏈費用:新開的CA公司要等5-10年,才會被普遍信任,才能廣泛進入根證書鏈。要想加快點,就得給別的大牌CA公司掏錢,買次級證書。

那麼,既然這麼多成本,為什麼 HTTPS 證書,又可以免費取得呢?這個,就沒有太一致的說法,我理解的是,證書的認證,其實是分級的,一般的免費的證書,都是 DV,Domain Verification,域名驗證,也即,在通訊的時候,只能保證客戶訪問的域名,和域名帶有的證書,確實是一致的,再進一步的資訊就都沒有了。如果,對域名的記憶不準確,可能也會遇到風險,畢竟域名只是一個字母串,有些是單詞,有些連單詞也不是,記錯的概率還是有的。而且就算記準確了,域名的持有者發生了變更,也不是立刻就可以得知的。所以,證書認證的還有一些高階的形式,比如 EV,Extended Verification,擴充套件驗證,這種級別的證書,一般都不會免費,它就可以提供比如,域名的持有者到底是誰的驗證,這樣,多重資訊吻合下,使用者就可以更加確定通訊的目標方,就是自己期望的那一個。

隨著網際網路的發展,越來越多的資訊開始電子化,各種型別的交易開始網路化,網路通訊安全,越來越重要,以至於,都快成了網際網路的基石,這個時候,有越來越多人受惠於加密通訊,或者,受制於加密通訊,這個時候,他們就有動機出來,讓這個東西全面化和免費化,以加速網際網路通訊加密化的程序,當然,這裡可能也免不了一些偉大的人類的使命感。在他們的資助下,讓 DV 這種低階證書全面免費化,就開始逐步成為現實。甚至有些推動者,正是證書頒發機構本身,讓更廣大的使用者體驗自己提供的基礎服務,在此基礎上,提供更優質的增值服務,也算是網際網路時代下一種典型的營銷手段。

綜上,我們目前確實有了很多選擇來取得免費的證書。當然,這裡也是有點魚龍混雜的,甚至有居心叵測者,懷揣不良的目的,來免費提供證書,所以,大家如果需要部署 HTTPS 證書的話,還是要擦亮眼睛,選大廠,名牌產品,不要被一般的小店給騙了。

二、HTTP與SOCKET

要弄明白 http 和 socket 首先要熟悉網路七層:物 數 網 傳 會 表 應,如圖1


如圖1

HTTP 協議:超文字傳輸協議,對應於應用層,用於如何封裝資料.

TCP/UDP 協議:傳輸控制協議,對應於傳輸層,主要解決資料在網路中的傳輸。

IP 協議:對應於網路層,同樣解決資料在網路中的傳輸。

傳輸資料的時候只使用 TCP/IP 協議(傳輸層),如果沒有應用層來識別資料內容,傳輸後的協議都是無用的。

應用層協議很多 FTP,HTTP,TELNET等,可以自己定義應用層協議。

Web 使用 HTTP 作傳輸層協議,以封裝 HTTP 文字資訊,然後使用 TCP/IP 做傳輸層協議,將資料傳送到網路上。

一、HTTP 協議

http 為短連線:客戶端傳送請求都需要伺服器端回送響應.請求結束後,主動釋放連結,因此為短連線。通常的做法是,不需要任何資料,也要保持每隔一段時間向伺服器傳送"保持連線"的請求。這樣可以保證客戶端在伺服器端是"上線"狀態。

HTTP連線使用的是"請求-響應"方式,不僅在請求時建立連線,而且客戶端向伺服器端請求後,伺服器才返回資料。

二、Socket 連線

要想明白 Socket,必須要理解 TCP 連線。

TCP 三次握手:握手過程中並不傳輸資料,在握手後伺服器與客戶端才開始傳輸資料,理想狀態下,TCP 連線一旦建立,在通訊雙方中的任何一方主動斷開連線之前 TCP 連線會一直保持下去。

Socket 是對 TCP/IP 協議的封裝,Socket 只是個介面不是協議,通過 Socket 我們才能使用 TCP/IP 協議,除了 TCP,也可以使用 UDP 協議來傳遞資料。

建立 Socket 連線的時候,可以指定傳輸層協議,可以是 TCP 或者 UDP,當用 TCP 連線,該Socket就是個TCP連線,反之。

Socket 原理

Socket 連線,至少需要一對套接字,分為 clientSocket,serverSocket 連線分為3個步驟:

(1) 伺服器監聽:伺服器並不定位具體客戶端的套接字,而是時刻處於監聽狀態;

(2) 客戶端請求:客戶端的套接字要描述它要連線的伺服器的套接字,提供地址和埠號,然後向伺服器套接字提出連線請求;

(3) 連線確認:當伺服器套接字收到客戶端套接字發來的請求後,就響應客戶端套接字的請求,並建立一個新的執行緒,把伺服器端的套接字的描述發給客戶端。一旦客戶端確認了此描述,就正式建立連線。而伺服器套接字繼續處於監聽狀態,繼續接收其他客戶端套接字的連線請求.

Socket為長連線:通常情況下Socket 連線就是 TCP 連線,因此 Socket 連線一旦建立,通訊雙方開始互發資料內容,直到雙方斷開連線。在實際應用中,由於網路節點過多,在傳輸過程中,會被節點斷開連線,因此要通過輪詢高速網路,該節點處於活躍狀態。

很多情況下,都是需要伺服器端向客戶端主動推送資料,保持客戶端與服務端的實時同步。

若雙方是 Socket 連線,可以由伺服器直接向客戶端傳送資料。

重要的事情說三遍:可向客戶端傳送資料,可向客戶端傳送資料,可向客戶端傳送資料,可參考

若雙方是 HTTP 連線,則伺服器需要等客戶端傳送請求後,才能將資料回傳給客戶端。

因此,客戶端定時向伺服器端傳送請求,不僅可以保持線上,同時也詢問伺服器是否有新資料,如果有就將資料傳給客戶端。

相關推薦

HttpHttps Socket區別聯絡

一、HTTP與HTTPS       我們都知道,HTTP是一種常用的網路傳輸協議,它是基於TCP的一種應用層協議,應用層是什麼樣的一個概念,通過下面這張示意圖可以很好的理解: HTTP協議的網路傳輸十分常見,例如網易的主頁http://www.163.com/

FilterServletListener區別聯絡

1. Servlet 可以用來建立並返回一個包含基於客戶請求性質的動態內容的完整的html頁面;可以建立可嵌入到現有的html頁面中的一部分html頁面(html片段);可以讀取客戶端發來的隱藏資料;可以 讀取客戶端發來的顯示資料;可以與其他伺服器資源(包括資料庫和jav

雜談(第1篇) | 程序執行緒協程的區別聯絡

作為程式設計師,在面試的時候經常被問到:說說程序、執行緒、協程的區別。下面我們就總結一下。 1.面試答案     1.1  程序與執行緒的區別 總述:執行緒是程序的一個實體,一個程序至少有一個執行緒。 1.根本區別;程序是作業系統資源分配的基本

web伺服器應用伺服器web容器反向代理伺服器區別聯絡

Web伺服器工作原理 HTTP協議基於TCP協議上,是一個應用層協議,用於使用者代理和Web伺服器進行通訊。Web伺服器通常採用一問一答的方式進行工作: 在使用者代理上使用者發起資源請求,請求內容包括但不限於:指定資源的唯一標識URI,指明動作型別(GET/POS

程式程序執行緒的區別聯絡

程式 程式並不能單獨執行,只有將程式載入到記憶體中,系統為他分配資源後才能夠執行,這種執行的程式稱之為程序, 也就是說程序是系統進行資源分配和排程的一個獨立單位,每個程序都有自己單獨的地址空間。 所以說程式與程序的區別在於,程式是指令的集合,是程序執行的靜態描述文字,

Web伺服器應用伺服器Web容器反向代理伺服器區別聯絡[轉]

我們知道,不同膚色的人外貌差別很大,而雙胞胎的辨識很難。有意思的是Web伺服器/Web容器/Web應用程式伺服器/反向代理有點像四胞胎,在網路上經常一起出現。本文將帶讀者對這四個相似概念如何區分。 一文看懂web伺服器、應用伺服器、web容器、反向代理伺服器區

遞迴迭代動態規劃的區別聯絡

一、定義 遞迴:程式呼叫自身,從頂部將問題分解,通過解決掉所有分解出來的小問題,來解決整個問題。 迭代:利用變數的原值推算出變數的一個新值。遞迴中一定有迭代,但是迭代中不一定有遞迴。 動態規劃:通常與遞迴相反,其從底部開始解決問題。將所有小問題解決掉,進而解決的

keypresskeydownkeyup之間的區別聯絡

雖然從字面理解, KeyDown是按下一個鍵的意思, 但實際上二者的根本區別是, 系統由KeyDown返回鍵盤的程式碼, 然後由TranslateMessage函式翻譯成成字元, 由KeyPress返回字元值. 因此在KeyDown中返回的是鍵盤的程式碼, 而KeyPress返回的是ASCI

軟體測試 -- 比較一下黑盒測試白盒測試單元測試整合測試系統測試驗收測試的區別聯絡

黑盒測試:已知產品的功能設計規格,可以進行測試證明每個實現了的功能是否符合要求。 白盒測試:已知產品的內部工作過程,可以通過測試證明每種內部操作是否符合設計規格要求,所有內部成分是否以經過檢查。 軟體的黑盒測試意味著測試要在軟體的介面處進行。這種方法是把測試物件看做一個黑盒子,測試人員完全不考慮程式內部的邏

MVCMVPMVVM 三者解析 區別聯絡

理想的MVC模式中VC之間沒有直接依賴(沒有單向依賴),但現實中做不到。Native應用要一般由View分發事件給Controller,Controller要決定那些View使用者可見。 Web應用中情況好一點。使用者可以直接通過url直接訪問Controll

資料快取sessionStoragelocalStoragecookiesession間的區別聯絡

 核心三步曲:建立-獲取-清除(回收) sessionStorage.setItem("key","123"); sessionStorage.getItem("key"); sessionStorage.removeItem("key"); sessionStora

PRCRMISOAPREST等的區別聯絡

不同系統之間,總是避免不了要互相通訊,通訊方式無外乎兩種:方法呼叫、請求和等待。前者是直接呼叫對方的API,而後者是通過http請求,告訴對方要執行的方法和引數,並返回結果。 通訊方式    --RPC         :它是一種規範,採用請求和響應的方式,優勢是語言無關性

先驗概率後驗概率貝葉斯區別聯絡

先驗概率和後驗概率 教科書上的解釋總是太繞了。其實舉個例子大家就明白這兩個東西了。 假設我們出門堵車的可能因素有兩個(就是假設而已,別當真):車輛太多和交通事故。 堵車的概率就是先驗概率 。 那麼如果我們出門之前我們聽到新聞說今天路上出了個交通事故,那麼我們想算一下堵車的概率,這個就叫做條件概率 。也就是P

關於adaboostGBDTxgboost之間的區別聯絡

AdaBoost:提高那些被前一輪弱分類器錯誤分類樣本的權值,而降低那些被正確分類樣本的權值。這樣一來,那些沒有得到正確分類的資料,由於其權值的加大而受到後一輪的弱分類器的更大關注,於是,分類問題就被一系列的弱分類器“分而治之”。至於第二個問題,即弱分類器的組合

面試常考點:httphttps區別聯絡

感謝原作者,本文轉載自http://www.mahaixiang.cn/internet/1233.html 超文字傳輸協議HTTP協議被用於在Web瀏覽器和網站伺服器之間傳遞資訊,HTTP協議以明文方式傳送內容,不提供任何方式的資料加密,如果攻擊者截取了Web瀏覽器和網站伺服器之間的傳輸報文,

httphttps區別聯絡

一、HTTP和HTTPS的基本概念 HTTP:是網際網路上應用最為廣泛的一種網路協議,是一個客戶端和伺服器端請求和應答的標準(TCP),用於從WWW伺服器傳輸超文字到本地瀏覽器的傳輸協議,它可以使瀏覽器更加高效,使網路傳輸減少。 HTTPS:是以安全為目標的HTTP通道,簡

Python的例項方法類方法靜態方法之間的區別聯絡

Python的例項方法、類方法和靜態方法 class Test: def test1(self): print('test......') @classmethod def test2(cls): print('test2......c

資料倉庫資料集市的概念區別聯絡

1.為什麼會出現資料倉庫和資料集市?     “資料倉庫”的概念可以追溯到80 年代中期。從本質上講,最初資料倉庫是想為操作型系統到決策支援環境的資料流提供一種體系結構模型,並嘗試解決和這些資料流相關的各種問題。     在缺乏“資料倉庫”體系結構的情

httphttps協議的區別聯系

分隔 cli 秘鑰 指點 cnblogs mime page 足夠 驗證 一.HTTP協議   1.官方概念:     HTTP協議是Hyper Text Transfer Protocol(超文本傳輸協議)的縮寫,是用於從萬維網(WWW:World Wide Web

485CAN乙太網的區別聯絡

轉自:CSDN,https://blog.csdn.net/xtydtc/article/details/71170326 主要考慮的是兩方面問題,485和CAN的成本和速度。 匯流排型別 速度 特點 485