一些教程常常提到 POST 比 GET提交數據更安全,真正從安全的角度來講,只要是 Http 請求,都不安全 。(補充 @王泥煤 的回覆 post的確比get更安全,這一點與https無關。由於用get方式傳密碼會被日誌系統記錄下明文,或者被第三方的referer帶出去,即使你採用了https)php
問題來了,什麼是安全?前端
數據傳輸的安全其實體如今如下幾個方面:面試
我發的數據,不應看的人看不懂算法
我發的數據,不應看的人不能僞造或者修改(修改後接收方可察覺)瀏覽器
我發的數據,過時以後不應看的人不能偷偷拿過來繼續用安全
Https 怎樣保證數據傳輸安全?再講講 Https的原理以前必須先聊一聊數據加密,目前有如下幾種加密方式:服務器
理解了加密方式後咱們就能利用這些算法實現安全數據傳輸。以一個故事開始:網絡
班裏來了個新同窗小美,長的特別漂亮,小谷暗戀小美好久,終於有一天小谷鼓起勇氣向小美表白。小谷寫了個紙條:「我是小谷,我喜歡你,你喜歡我嗎?」 ,讓小王轉交給小美。app
正常狀況下,小王會把紙條轉給小美,小美看到後很開心,回覆了紙條:「我是小美,我也喜歡你」,讓小王再轉遞給小谷。post
但是小王也暗戀小美,固然不肯甘作嫁衣。這個時候小王能夠有幾方法來搗亂:
小谷很聰明,早就看出來小王心懷不軌,但是沒辦法,要傳信必然要通過小王,要怪就怪本身太靦腆不敢下課直接親手送上。怎麼辦呢?
有一種辦法是把紙條的信息加密(AES 加密),小王就不知道紙條內容了。但是問題來了,小美也不知道密鑰,她收到信後也沒法解密啊。卻是能夠把密鑰放到紙條裏,可這樣小王也獲得了密鑰等於白忙活一場。
再說說小美,小美很漂亮,在之前的學校被稱爲數學女神,轉學到這裏後當即被小谷吸引了,她看出來小谷有點喜歡本身但又不十分肯定,她不想主動。她猜到小谷會在上課的時候可能用寫紙條的方式表白,也猜到猥瑣的小王會在中間搗亂。如何讓小谷能順利向本身表白呢?小美在瘋狂的思考:
方案一: 我能夠生成一對公鑰和私鑰,把公鑰公開給班裏全部的同窗。這樣小谷就能獲得公鑰,把要發的信息用公鑰加密,只有我本身能用私鑰解密。但是我如何把個人回覆發出去呢?若是用個人私鑰加密,小谷卻是能用公鑰解密,但班裏任何同窗都能解密,被其餘同窗看到就糗大了。並且若是小谷紙條的內容太多,他用公鑰加密須要花一整節課的時間,不能耽誤他學習
方案二:我能夠生成一對公鑰和私鑰,把公鑰公開給班裏全部的同窗,這樣小谷就能獲得公鑰。若是小谷夠聰明的話,他獲得公鑰後會生成一個對稱加密AES的密鑰,而後用個人公鑰把 AES 密鑰加密(AES 密鑰長度很短加密幾乎不須要時間),而後把加密後的密鑰發給我。我收到後用個人私鑰解密,獲得小谷和我約定的對對稱加密密鑰,而後咱們用這個只有咱們倆知道的對稱密鑰加密數據進行交流。
下課休息的時候,小美給班裏的同窗說:「快數學考試了,個人數學很好,考場上須要要我幫忙的同窗能夠找我,我公佈一下個人公鑰,爲了安全起見你們用個人公鑰加密消息。」
一切貌似完美無缺,但是小美在班裏公佈本身公鑰的時候小谷正好拉肚子去了廁所,回來以後才知道這事,小谷因而問旁邊的同窗小花小美公鑰是多少。小花之前是班裏受歡迎的女生被不少男生仰慕,在小美來以後當即被奪了風頭,一直懷恨在心。因而小花告訴了小谷一個假公鑰,實際上是本身生成的公鑰。這樣萬一小谷找小美要小抄,本身能夠冒充小美給一個錯答案。
一切被小美看到眼裏,這樣不行啊, 別到時候本身和小谷的好事沒成,反而同窗考試被陷害栽贓到本身頭上。怎麼辦呢?對了,班長是班裏人品很正的人,能夠用班長給本身作信用背書,正好前兩天班長在班裏通知了本身的公鑰。 因而小美找到班長,作了一個證書,證書上有本身的名字、學號、公鑰、公證人班長的名字,同時把這些信息經過 Hash (sha256)處理後請求班長用本身的私鑰進行加密(爲何用 Hash 處理?由於東西太多非對稱加密很費時),也放到證書上。因而小美再次把證書通報給班裏全部的同窗。
小谷此次獲得了證書,發現上面的公證人是班長,因而先用班長的公鑰對證書上被班長私鑰加密後的字段進行解密,獲得元素數據的 Hash。 再對元素數據進行 Hash和剛剛解密的 Hash 進行比對。若是比對成功表示證書上的信息無誤,且是由班長擔保的。這時候小谷確信證書上的公鑰就是小美的。任何人由於沒有班長的私鑰都沒法僞造證書。
你覺得故事就這麼圓滿結束了嗎?其實沒有,班長前兩天在公佈本身的證書的時候小谷正好生病請假了。 他根本不知道班長的公鑰是否是他本人的。
這個時候他發現班長的證書上有班主任的擔保(班主任的公鑰作了簽名),班主任的證書上有校長的擔保,而小谷是有校長的的公鑰的,就印在學生證上。
終於,小谷收穫了女神的芳心。
故事完了。故事中 小谷是瀏覽器,小美是服務器,小花和小王是壞蛋,班長是 CA 機構,班主任是上級 CA,校長是根 CA 服務器。當一個網站要使用 https 時先需在一些國際認證的 CA 機構填寫網站信息申請證書,而這些 CA機構每每還有上層 CA,最終有一個根 CA。通常來講瀏覽器都會內置根 CA 和一些頂級 CA 的證書,但須要驗證的時候會經過 CA 鏈逐級驗證。
本文是若愚老師辛苦創造,寫篇文章容易,講個好故事不容易,喜歡的點個贊,須要轉載的須要完整保留本文所有信息包括廣告~
最近個人文章更新會比較頻繁,沒辦法,由於個人直播班又要開了,酒香也怕巷子深啊,不打點廣告不行
有人會說,BAT 出來作培訓的不少,你有什麼 NB 的
個人 NB 之處在於你以爲本身須要花一週才能學會的東西,我可讓你一小時搞定,你以爲本身花三個月才能勉強掌握的東西,我可讓你一週完全搞定。能夠看看我寫過的文章,以及我講的視頻
想轉行前端拿到8~18k 的 offer?找 飢人谷
想免費學前端作面試達人?前端3小時速成指南 - 寫代碼啦!