目錄
通訊內容的保密
通訊雙方身分的真實
#通信內容的完整
結語
#附錄
https如何避免中間人劫持?
憑證的數位簽章
首頁 web前端 html教學 https時代,你還對他一無所知嗎?

https時代,你還對他一無所知嗎?

Mar 12, 2017 pm 05:24 PM
https

本文作者:茄果,專注前端開發領域,更多文章請關注知乎專欄《前端小事》

現在打開各大知名網站,你有沒有發現地址欄都已經加了個綠色的小鎖?

https時代,你還對他一無所知嗎?

是的,這就是https,這就是https的時代。

然而,你了解https嗎?

簡單來說,https就是套在SSL/TLS內的http,也就是安全的http。何為安全?一個安全的網路通訊環境要解決3個問題:

  1. 通訊內容的保密

  2. 通訊雙方身分的真實

  3. 通信內容的完整

而https就是為了解決這3大問題而誕生的(準確來說應該是ssl),以下分別看看這3個問題的解決方案。

通訊內容的保密

通訊內容的保密需要透過加密來實現。我們的網路環境是非常透明的,通訊需要經過很多轉機才能到接收方手中。這個情形有點像你上課的時候給第一排的小紅遞紙條一樣,紙條上你肯定不會直接寫今夜三更操場見,而是機靈地寫了老地方見。這個老地方只有你和小紅知道,這樣就算小明小李看到了紙條,他們也不知道老地方是圖書館還是英語角,這就是加密,而老地方就是所謂的密鑰。

當然,這個例子並不是很準確。簡單來說,加解密就是一個函數,而金鑰則是這個函數的參數。例如我們定義一個簡單的加密函數,f(x)=x+b,x就是輸入的明文,而b是金鑰;解密函數就是加密函數的反函數,也就是g(x )=x-b。當不知道b的時候,就算看到了密文也猜不出真實內容,這樣就實現了加密。這種加解密都用同一個金鑰,叫對稱加密。

但這裡有個問題,這裡的參數b是怎麼協商出來的?

你和小紅可以花前月下約好b值,但是在真實網絡環境中你和小紅根本沒有直接溝通的可能,所有溝通都要靠小明小李去傳紙條的話,怎麼做才能躲過他們呢?這裡就需要用到非對稱加密演算法了,這種演算法有公鑰和私鑰一對鑰匙,公鑰是所有人都能取得的鑰匙,私鑰則是服務器私自保存的鑰匙。非對稱加密演算法中公鑰加密的內容只能用私鑰解密,私鑰加密的內容只有公鑰才能解密。所以當你使用小紅的公鑰加密你的紙條之後,幫你傳遞紙條小明小李等人看到紙條也無法讀取內容了,只有擁有私鑰的小紅才能讀出你的訊息。

對稱加密演算法在加密和解密時使用的是同一個秘鑰;而非對稱加密演算法需要兩個金鑰來進行加密和解密,這兩個秘鑰是公開金鑰(public key,簡稱公鑰)和私有金鑰(private key,簡稱私鑰)。你可能比較好奇非對稱加密演算法的原理,但是我這裡不展開講​​算法,有興趣的同學可以自行搜尋

那麼問題來了,小紅給你的回應也想加密怎麼辦?

如果小紅用她的私鑰加密的話,班上所有人都知道公鑰,而公鑰可以解私鑰的加密,也意味著所有人都能解密小紅的回應訊息。聰明的你一定想到了解決方案:利用非對稱加密演算法加密出一個對稱金鑰給小紅,小紅用她的私鑰讀取對稱金鑰,然後你們就用這個對稱金鑰來做對稱加密,然後就可以愉快地約約了。

當然,https也是這樣幹的。

通訊雙方身分的真實

加密之後貌似通訊過程就完美了?而且慢,小紅的公鑰又是怎麼公告天下的呢?

要知道在網路環境中所有資訊互動都是透過傳紙條的方式來進行的,小紅的公鑰也不例外,萬一在經過小明手裡的時候被掉包了怎麼辦?怎麼保證手上的小紅公鑰才是真正的小紅公鑰呢?看到班上的癡男怨女的紙條被各種掉包,文娛委員鳳姐決定挺身而出。鳳姐想出了一個辦法,所有加密通訊都要帶一本證,用來證明自己的身分。這本證是鳳姐特意為班上所有單身狗做的,公鑰就放在證書裡面返回給紙條的發送者,證書裡面除了公鑰還有學號、人名、甚至星座身高三圍等各種信息。證書上蓋了一個大大的鑑定章,這是鳳姐獨有的章,表示證上的信息真實性由鳳姐保證,看到這個章就可以認為對方是個真·單身狗。

透過這些資訊你就可以知道對方是小紅還是如花了,這就是憑證機制。

顯然你會懷疑證書上鳳姐的公章是有可能被偽造的,懷疑有理!所以憑證上的公章也是非對稱加密過的,加密方式跟上面提到的剛好相反:用鳳姐的私鑰加密,用鳳姐公鑰就可以解密,這樣就可以鑑定證書的真偽。這個公章就是憑證的數位簽名,具體來說就是先將憑證用雜湊演算法提取摘要,然後再對摘要進行加密的過程。另外你也可以直接拿著證書去找鳳姐,鳳姐就會幫你驗證證書的有效性。 (證書是有期限的,所以即使是真證書也會可能過期,需要注意)

這個機制看起來相當完善,但是我們要以懷疑一切的態度去做安全機制,鳳姐保證的東西是可信任的了。

但是,鳳姐真的是鳳姐嗎? ? ?

https時代,你還對他一無所知嗎?

所以,鳳姐本身也要由證書來保證,鳳姐的證書由班主任頒發,而班主任的證書由校長頒發……這個鏈一直到最權威的幾個機構,這些機構在https體系中就是所謂的根CA。根是不可懷疑的權威,他們為自己帶鹽,自己證明自己是自己。在https憑證體系裡面,根憑證是作業系統/瀏覽器自帶的,我們可以相信被這些機構認證的憑證的,從而一層一層推導到鳳姐這個等級。

另外,由於證書其實很容易做,地鐵口10塊一本,無論哈佛還是斯坦福,統統10塊!所以有些公司會自己做證書,根本不去找根CA機構,像是著名的12306。你也可以自己做憑證放到網路上讓使用者下載導入瀏覽器,但因為你沒有鳳姐的影響力,所以沒人會相信你,當然也有人連鳳姐都不相信…

https時代,你還對他一無所知嗎?

#通信內容的完整

密也加了,鳳姐的公章也蓋了,是不是這套機制就perfect了呢?

NoNoNo,想一下暗戀著你的小明看到你給小紅傳紙條,心裡肯定不爽,雖然看不懂但是還是可以改密文呀。本來你是要約小紅半夜三更操場見,結果小明刪掉了前半部分的密文,解密後恰好變成了“操場見”,然後小紅下課馬上往操場跑,而你卻跑回宿舍好好洗了個澡。 。 。然後,然後小紅就跟小明跑了~~

這種篡改通信內容的場景相信大家都深有體會,我們訪問一些站點的時候無緣無故就出現了運營商的廣告,這都是運營商給加的! !所以內容的完整性也需要保證,這比較簡單:先用哈希演算法提取內容摘要,然後對摘要進行加密生成數位簽名,驗證數位簽名就可以判斷出通訊內容的完整性了。

以上就是https用到技術的簡化版,一個http通訊流程如下:

https時代,你還對他一無所知嗎?

大體步驟:

  1. 客戶端發送Client Hello封包開始SSL通信,訊息中包含SSL版本、可用演算法清單、金鑰長度等。

  2. 伺服器支援SSL通訊時,會以Server Hello封包作為應答,封包中同樣包含SSL版本以及加密演算法配置,也就是協商加解密演算法。

  3. 然後伺服器會傳送Certificate封包,也就是將憑證傳送給客戶端。

  4. 客戶端發送Client Key Exchange報文,使用3中的憑證公鑰加密Pre-master secret隨機密碼串,後續就以這個密碼來做對稱加密進行通訊。

  5. 伺服器使用私鑰解密成功後回傳一個回應提示SSL通訊環境已經建置好了。

  6. 然後就是常規的http c/s通訊。

根據前文所述,在步驟3和步驟6都會使用摘要和簽章演算法來保證傳遞的憑證和通訊內容不會被竄改。透過這個流程可以看出,https的核心在於加密,尤其是不對稱加密演算法被多次使用來傳送關鍵訊息。

了解加密,體認到網路的透明性,抱著懷疑一切的態度,理解https這套體係就變得簡單了。

結語

最近在系統地重溫http相關的東西,這篇先介紹了https的基本原理,才疏學淺,文中有不當之處,還望斧正!後續會介紹實際應用靜態伺服器的設定等~

#附錄

https如何避免中間人劫持?

如果有人劫持了你的dns伺服器,將wwe.icbc.com解析到他的非法網站,或者代理伺服器將你導向他的非法網站去,這都是中間人攻擊。如果沒有https,那麼攻擊就這樣發生了。那https怎麼避免這類攻擊?

答案是透過憑證來鑑別。

  1. 在申請證書的時候CA會對所要申請的網域進行控制權認證,所以你是不可能用隔壁老王的網站來申請證書的。就算你黑了他的站點,只要老王去申請證書就能發現了。

  2. 如果偽造證書,這個證不是權威CA簽發的,那麼瀏覽器檢查的時候會報警提示使用者證書非法。當然使用者還是可以繼續操作,例如搶火車票什麼的。 。

  3. 如果你把真正網站的憑證搞下來,憑證上的網域不變,只是將公鑰替換掉,那麼瀏覽器比對憑證數位簽章的時候就能發現對不上了,二話不說,報警。

  4. 如果中間人直接用www.icbc.com的真實證書,那麼他雖然能收到客戶端的訊息,但是無法解密,所以也無法回應客戶端的請求,攻擊無效!

憑證的數位簽章

之前對雜湊演算法和數位簽章了解不多,了解之後發現其實原理還挺簡單的。雜湊演算法可以將大量的資料轉換成定長的摘要,而且摘要是與輸入對應的,輸入變化後摘要也會改變。所以對資料應用哈希演算法求出摘要,比對摘要就可以判斷資料是否被竄改了。憑證使用了私鑰加密摘要,然後客戶端就可以用公鑰解密得到摘要,比較哈希演算法算出來的摘要就可以判斷憑證是否被竄改過。另一方面,因為公私鑰是成對的,篡改後的憑證雖然能求出摘要,但是無法加密出簽名,所以摘要和加密組合使用就可以保證憑證的真實性了。這裡的私鑰是證書的發證機構的私鑰,也就是CA鏈上CA加密用戶伺服器證書,上級CA加密下級CA的證書,從而形成一個信任環。

本文作者:茄果,專注前端開發領域,更多文章請關注知乎專欄《前端小事》

以上是https時代,你還對他一無所知嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

如何使用Nginx Proxy Manager實現HTTPS協定下的反向代理 如何使用Nginx Proxy Manager實現HTTPS協定下的反向代理 Sep 26, 2023 am 08:40 AM

如何使用NginxProxyManager實現HTTPS協定下的反向代理近年來,隨著網際網路的普及和應用場景的多樣化,網站和應用程式的存取方式變得越來越複雜。為了提高網站的存取效率和安全性,許多網站開始採用反向代理來處理使用者的請求。而針對HTTPS協定的反向代理,在保護使用者隱私和確保通訊安全性方面扮演著重要的角色。本文將介紹如何使用NginxProxy

如何使用Nginx Proxy Manager實現HTTP到HTTPS的自動跳轉 如何使用Nginx Proxy Manager實現HTTP到HTTPS的自動跳轉 Sep 26, 2023 am 11:19 AM

如何使用NginxProxyManager實現HTTP到HTTPS的自動跳轉隨著互聯網的發展,越來越多的網站開始採用HTTPS協議來加密傳輸數據,以提高數據的安全性和用戶的隱私保護。由於HTTPS協定需要SSL憑證的支持,因此在部署HTTPS協定時需要有一定的技術支援。 Nginx是一款強大且常用的HTTP伺服器和反向代理伺服器,而NginxProxy

Nginx與SSL:設定HTTPS保護Web伺服器 Nginx與SSL:設定HTTPS保護Web伺服器 Jun 09, 2023 pm 09:24 PM

Nginx是一個高效能的Web伺服器軟體,同時也是一款強大的反向代理伺服器和負載平衡器。隨著互聯網的迅速發展,越來越多的網站開始採用SSL協議保護敏感用戶數據,而Nginx也提供了強大的SSL支持,使得Web伺服器的安全性能更進一步。本文將介紹如何設定Nginx以支援SSL協議,並保護Web伺服器的安全效能。什麼是SSL協定? SSL(SecureSocke

https工作流程是什麼樣的 https工作流程是什麼樣的 Apr 07, 2024 am 09:27 AM

https工作流程包括客戶端發起請求、伺服器回應、SSL/TLS握手、資料傳輸和客戶端渲染等步驟,透過這些步驟可以確保資料在傳輸過程中的安全性和完整性。

tomcat如何配置https tomcat如何配置https Jan 05, 2024 pm 05:15 PM

設定步驟:1、取得SSL憑證;2、設定SSL憑證;3、編輯Tomcat設定檔;4、重啟Tomcat。詳細介紹:1、需要取得SSL證書,可以自簽名證書,也可以從認證機構(如Let's Encrypt)取得有效的SSL證書;2、將取得的SSL證書和私鑰檔案放置在伺服器上,確保這些文件位於安全的位置,只有具有足夠權限的使用者可以存取;3、編輯Tomcat設定檔等等。

解決方案:urllib3 ProxySchemeUnknown(proxy.scheme) 解決方案:urllib3 ProxySchemeUnknown(proxy.scheme) Feb 29, 2024 pm 07:01 PM

報錯的原因urllib3的ProxySchemeUnknown(proxy.scheme)錯誤通常是因為使用了不支援的代理協定所導致的。在這種情況下,urllib3無法辨識代理伺服器的協定類型,因此無法使用代理進行網路連線。要解決這個問題,您需要確保使用支援的代理協議,例如Http或https.如何解決要解決這個問題,您需要確保使用支援的代理協議,例如HTTP或HTTPS。您可以透過設定urllib3的代理參數來解決這個問題。如果是使用http代理,程式碼範例如下:importurllib3http

Java API 開發中使用 Https 進行資料傳輸 Java API 開發中使用 Https 進行資料傳輸 Jun 18, 2023 pm 10:43 PM

隨著科技的發展,網路通訊成為了現代社會資訊傳輸的重要工具之一。但同時,網路上的資訊傳輸面臨被惡意攻擊和竊取的風險,因此安全性顯得尤為重要。基於此,HTTPS協議就應運而生。它是一種在HTTP協定上加入SSL/TLS加密的方式來確保網路傳輸安全性的協定。 Java作為一門廣泛應用於網頁開發的語言,自然也提供了豐富的API來支援HTTPS協定。本文將

如何設定PHP表單的HTTPS安全連線? 如何設定PHP表單的HTTPS安全連線? Aug 17, 2023 pm 03:25 PM

如何設定PHP表單的HTTPS安全連線?隨著網路的發展,安全性在網頁開發中變得越來越重要。加密傳輸協定HTTPS在保護資料傳輸過程中扮演關鍵的角色。在使用PHP表單進行資料傳輸時,我們可以採取一些措施來確保連線的安全性。本文將指導您如何設定PHP表單的HTTPS安全連接,並附帶一些程式碼範例。購買SSL憑證首先,您需要購買一個SSL憑證。 SSL憑證是保證網站

See all articles