數字簽名與HTTPS詳解

因為HTTP協議本身存在著明文傳輸、不能很好的驗證通信方的身份和無法驗證報文的完整性等一些安全方面的確點,所以才有了HTTPS的缺陷。HTTPS確切的的說不是一種協議,而是HTTP + SSL (TSL)的結合體。HTTP報文經過SSL層加密后交付給TCP層進行傳輸。SSL(安全套節層)主要采取的是RSA(非對稱加密)與AES(對稱加密)結合的加密方式。先通過RSA交互AES的密鑰,然后通過AES進行報文加密和解密。本篇博客主要聊的就是HTTPS具體的工作過程。

一、RSA與AES簡述

在本篇博客的第一部分呢,先聊一下RAS與AES這兩個加密策略,如果你在公司做過支付相關的東西,對數據傳輸的安全性要求比較高,這時候就得采取一些加密措施將傳輸的報文進行加密,必要時再進行MD5驗簽。當然本部分聊的RAS與AES是比較簡潔的,關于這兩者具體的內容,請自行Google吧。因為HTTPS在傳輸的過程中使用到了RSA與AES加密算法,所以在聊HTTP+SSL之前呢,我們先簡單的聊一下AES與RSA。

1、Advanced Encryption Standard (AES: 高級加密標準)

AES,全稱:Advanced Encryption Standard----高級加密標準。該加密算法有一個密鑰,該密鑰可以用來加密,也可以用來解密,所以AES是對稱加密算法。下方這個就是AES加密和解密的過程。Client端與Server端有一個共同的Key, 這個Key是用來加密和解密的。如果報文在傳輸的過程中被竊取了,沒有這個key, 對加密的內容進行破解是非常困難的,當然竊取者如果有key的話,也是可以輕而易舉的解密的。所以在AES中,key是關鍵。這也就相當于你們家的門鑰匙,誰拿到鑰匙后都可以打開你們家的門。即使門鎖再結實,再安全,在鑰匙面前也是不行呢。

所以對于AES加密策略來說這個Key的保密措施要做足一些,如果之后有時間的話可以分享一些具體的AES加密策略。比如每次加密的Key都是從一個密碼本中動態生成的,而這個密碼本服務端和客戶端都有同一本,每次傳輸的是一些參數。這些參數在經過一些算法的映射,從密碼本中取出相應的key用來解密。這樣一來,就相當于給AES加了一層防盜門,加大了破解的難度。這樣做的好處是每次加密的key都是不同的,而且需要密碼本以及映射算法的支持。

? ? ? ? ? ? ? ? ? ?

2、RSA 公鑰加密算法

RAS這個名字,就是該算法三位發明者的名字的首字母的組合。RAS是非對稱加密,其在加密和解密的過程中,需要兩個Key,一個公鑰(public key),一個是私鑰(private key)。公鑰負責加密,而私鑰負責解密。從名字就可以看出,公鑰是可以開放出去的,任何人都可以持有公鑰進行加密。而私鑰必須得進行保護,因為是用來解密的。

這樣一來,加密和解密就可以用不同的鑰匙來處理。對于加密放來說,即使你可以對報文進行加密,如果沒有私有的話也是不可以對你加密的內容進行解密的。這就相當于一個盒子,盒子上有把鎖。你可以把東西放進去,然后再鎖上盒子。但是如果你沒有鑰匙的話,也是打不開這把鎖的。

下方這個簡圖就是服務端單向驗證的RAS非對稱加密算法,Client內置了一個公鑰,該公鑰與Server端的私鑰是配對的,所以Client端可以使用這個內置的Public key加密,而服務端就可以使用這個private key進行解密。目前最常用的是服務端單向認證機制。

? ? ? ? ? ? ? ? ? ??

二、CA證書

如果你自己通過RAS算法生成了一個私鑰和公鑰,在公鑰發送給客戶端的過程中有可能被篡改成其他的公鑰,而客戶端在沒有其他措施的保護下是不知道該公鑰是否就是服務器那邊的私鑰對應的公鑰的。這種自己做的RAS的公鑰和私鑰有可能在公鑰分發的過程中被篡改。下方就是Client從Server端獲取公鑰時被中間者篡改了,將public換成了自己的偽public key, 同樣這個中間者持有這個偽public key所對應的偽private key。如果客戶端使用的偽public key進行加密傳輸的話,那么中間者是可以使用自己的private key進行解密的。

舉個例子來類比一下這個問題。

假設你在古代,你出門在外,妻子在家養子。你們家有個箱子,箱子上有把鎖,這就是你和你妻子互通的工具。你媳婦兒負責往箱子里放東西,然后上鎖。你有把獨特的鑰匙,你負責開鎖,取東西。可是你再將箱子給鏢局托運的的過程中,被鏢局的“小黑”掉包了,箱子的外表一致,鎖看起來也一樣,可是已經不是你的箱子了。因為路途遙遠,古代又沒有什么iPhone啥的,你媳婦沒辦法來辨別該箱子是否是原裝的。然后就將一些東西放在了箱子里邊,然后上鎖交給了鏢局的“小黑”。

因為“小黑”掉包的箱子,所以小黑有箱子的鑰匙呢,然后就可以打開這個箱子,取東西了。原來的箱子又在小黑那,小黑就可以往原來的箱子里邊隨便往箱子放點沒有價值的東西給你就行了。當你發現箱子里的東西不是你想要的時候,完了,小黑從鏢局辭職了,找不到人了。找鏢局的人討說法,可是鏢局的人說“小黑”是鏢局的臨時工,這個責任鏢局說了,我們不能擔。鑒于你無權無勢,這事兒也就此罷了。(故事純屬虛構,如有雷同純屬巧合)

關于更多騙子的故事請移步網絡劇《毛騙》一二三季。

? ? ? ? ? ? ? ?

為了防止“小黑”再次作案,所以頒布一個公正機構來證明你媳婦收到的箱子就是你發出的箱子。在RAS加密中也有一個第三方機構來充當這個角色,負責證明客戶端收到的證書就是你發送的證書,中間沒有被篡改。這個中間認證機構,就是數組證書認證機構, 其頒發的證書也就是我們常說的CA證書(CA , Certificate Authority)。

下面我們就來詳細的敘述一下證書簽名,證書分發以及證書驗證的整個過程。

1、服務端人員使用RSA算法生成兩個密鑰,一個用來加密一個用來解密。將負責加密的那個密鑰公布出去,所以我們稱之為公鑰(Public Key),而用來解密的那個密鑰,不能對外公布,只有服務端持有,所以我們稱之為私鑰(Private Key)。服務端在將Public Key進行分發證書之前需要向CA機構申請給將要分發的公鑰進行數字簽名。(服務器公鑰負責加密,服務器私鑰負責解密)

2、生成數字簽名公鑰證書:對于CA機構來說,其也有兩個密鑰,我們暫且稱之為CA私鑰和CA公鑰。CA機構將服務端的Public Key作為輸入參數將其轉換為一個特有的Hash值。然后使用CA私鑰將這個Hash值進行加密處理,并與服務端的Public Key綁定在一起,生成數字簽名證書。其實數字簽名證書的本質就是服務端的公鑰+CA私鑰加密的Hash值。(CA私鑰負責簽名,CA公鑰負責驗證)

3、服務器獲取到這個已經含有數字簽名并帶有公鑰的證書,將該證書發送給客戶端。當客戶端收到該公鑰數字證書后,會驗證其有效性。大部分客戶端都會預裝CA機構的公鑰,也就是CA公鑰。客戶端使用CA公鑰對數字證書上的簽名進行驗證,這個驗證的過程就是使用CA公鑰對CA私鑰加密的內容進行解密,將解密后的內容與服務端的Public Key所生成的Hash值進行匹配,如果匹配成功,則說明該證書就是相應的服務端發過來的。否則就是非法證書。

4、驗證完服務端公鑰的合法性后,就可以使用該公鑰進行加密通信了。

? ? ? ? ? ? ?

下方這個截圖就是蘋果的根證書的一些信息,從下方可以看出,CA證書內容中包括加密算法,公共密鑰以及數字簽名。

? ? ? ? ? ? ? ? ? ? ?

下方就是公鑰以及數字簽名的具體內容,當對下方公共密鑰進行驗證時,需要使用內置的CA公鑰將數字簽名進行解密。然后將解密后的內容,與公鑰生成的Hash值進行比較,如果匹配成功,那么該證書就是CA機構頒布的合法證書。

? ? ? ? ? ? ? ? ? ? ? ? ?

三、HTTPS安全通信機制的建立

上面我們聊完AES與RSA加密策略,然后又聊了帶有數字簽名的公共密鑰。上面這兩部分內容都是為HTTPS做鋪墊的,接下來就看一看HTTP+SSL是如何進行數據傳輸的。

1、HTTPS簡介

在開頭的部分也說了,HTTPS不是一個新的通信協議,而是HTTP與SSL(或TSL)的組合。SSL--安全套節層(Secure Socket Layer), TSL(Transport Layer Security 安全傳輸層)是以SSL為原型開發的協議,IETF以SSL3.0為基準后又制定了TLS1.0、TLS1.1和TLS1.2,當前主流版本為SSL3.0與TLS1.0。

HTTPS就是在HTTP與TCP層中間添加了一個SSL層。因為HTTPS被HTTP多了這層加密的流程,所以HTTPS的速度要比HTTP慢的多。

? ? ? ? ? ? ? ? ??

2、HTTPS的通信過程

SSL的加密過程是RSA與AES混合進行的。簡單概括一下,就是通過RSA加密方式來交換AES加解密的密鑰,然后使用AES加密的方式來傳輸報文。下方是SSL建立連接以及傳輸數據的圖解。在下圖中大體可以分為四步:

第一步:有客戶端發起的第一次握手,此次握手過程的主要目的是從服務端獲取數字簽名證書,服務端在發送數字簽名證書之前要先確認客戶端的SSL版本、加密算法等信息。

第二步:完成第一次握手后,接著進行第二次握手。第二次握手是在客戶端收到證書后發起的,主要目的是將AES加解密使用的Key (Pre-master secret)發送給服務端。當然這個AES_KEY是使用第一次握手獲取的公鑰進行加密的。客戶端收到這個使用公鑰加密后的AES_KEY,使用服務端的私鑰進行解密。這樣客戶端和服務端經過二次握手后都持有了AES加解密的KEY。

第三步:當Client與Server端都持有AES_KEY后,就可以對HTTP報文進行加解密了。

END: 最后就是斷開連接了。具體如下圖所示:

? ? ? ? ? ? ? ? ? ? ?

?

轉載于:https://www.cnblogs.com/rinack/p/10743355.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/249099.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/249099.shtml
英文地址,請注明出處:http://en.pswp.cn/news/249099.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

[BZOJ4320][ShangHai2006]Homework(根號分治+并查集)

對于<sqrt(300000)的詢問&#xff0c;對每個模數直接記錄結果&#xff0c;每次加入新數時暴力更新每個模數的結果。 對于>sqrt(300000)的詢問&#xff0c;枚舉倍數&#xff0c;每次查詢大于等于這個倍數的最小數是多少&#xff0c;這個操作通過將詢問逆序使用并查集支持。…

VScode 結局插件prettier和vetur格式化沖突

先上配置代碼 {"workbench.iconTheme": "vscode-icons","workbench.startupEditor": "newUntitledFile","workbench.colorTheme": "One Dark Pro","editor.fontSize": 14,"editor.tabSize":…

WPF效果(GIS三維續篇)

去年這個時候簡單的摸索了一下三維的GIS相關的東西,也就是僅僅玩耍了一把,這次來點真正用的上的干貨效果效果&#xff1a; 1、加載自定義百度樣式的瓦片效果 2、加載自定義百度樣式的縮放效果 3、快速手動進去咱的大帝都 4、加載海量Mark效果 5、加載海量Mark和簡單模型效果 6、…

vue 表單 驗證 async-validator

1、使用插件async-validator async-validator 地址&#xff1a;https://github.com/yiminghe/async-validator 2、示例&#xff08;vueelement-ui&#xff09; <el-form :model"numberValidateForm" ref"numberValidateForm" label-width"100px&qu…

[19/04/23-星期二] GOF23_創建型模式(工廠模式、抽象工廠模式)

一、工廠模式(分為&#xff1a;簡單工廠模式、工廠方法模式、抽象工廠模式) 實現了創建者和調用者的分離 核心本質&#xff1a;1、實例化對象&#xff0c;用工廠方法代替new操作&#xff1b;2、將選擇實現類、創建對象統一管理和控制&#xff0c;從而將調用者跟實現類解耦。 簡…

Chrome瀏覽器12px問題-webkit-text-size-adjust: none 已失效的解決方案

對于早期的chrome, 如果要想顯示12px以下的字體&#xff0c;一般通用的方案都是在對應的元素中添加 div {-webkit-text-size-adjust: none; }但是我今天遇到的需求&#xff0c;添加了之后沒有反應&#xff0c;而且瀏覽就根本不支持這種寫法。 在網上看到了博客《Chrome瀏覽器…

CSRFGuard工具介紹

理解CSRFGuard的基礎&#xff1a;http://www.runoob.com/jsp/jsp-tutorial.html 1&#xff1a;您需要做的第一件事是將OWASP.CSRFARGAD.JAR庫復制到類路徑中。放置Owasp.CsrfGuard.jar最常見的類路徑位置在Web應用程序的WEB-INF文件夾的lib目錄中。 OWASP CSRFGARD 3在傳統Java…

[19/04/24-星期三] GOF23_創建型模式(建造者模式、原型模式)

一、建造者模式 本質&#xff1a;分離了對象子組件的單獨構造(由Builder負責)和裝配的分離(由Director負責)&#xff0c;從而可以構建出復雜的對象&#xff0c;這個模式適用于&#xff1a;某個對象的構建過程十分復雜 好處&#xff1a;由于構建和裝配的解耦&#xff0c;不同的構…

深入理解vue中的slot與slot-scope

寫在前面 vue中關于插槽的文檔說明很短&#xff0c;語言又寫的很凝練&#xff0c;再加上其和methods&#xff0c;data&#xff0c;computed等常用選項在使用頻率、使用先后上的差別&#xff0c;這就有可能造成初次接觸插槽的開發者容易產生“算了吧&#xff0c;回頭再學&#…

js 轉義

1. JavaScript 特殊字符 2. 正反斜杠互相替換 a/b/c.replace(/\//g,\\) // "a\b\c" $0.value.replace(/\\/g,\/) // a/b/c 獲取到 而不提取出 某個值后進行直接處理 \ 有轉義功能&#xff0c;所以一旦解析必然轉義&#xff0c;通常是直接獲取到數據源…

關于Java抽象類,接口與實現接口及派生類繼承基類

1. 抽象類 抽象類就是有一個或多個方法只被聲明而未被實現。 抽象方法的聲明以分號結束&#xff0c;并且用關鍵字abstract來說明它以標識它為抽象方法。 格式&#xff1a; public abstract class 類名{ 定義變量// 抽象方法// } 2. 接口是抽象類的一種&#xff0c;之包含常量…

ie兼容響應式布局的實現總結

雖然說響應式設計的理想狀態是&#xff0c;需對pc/移動各種終端進行響應&#xff1b;但是現實是高分辨率的pc端與手機終端屏幕相差太大&#xff0c;像電商這樣有大量圖片和文字 信息的同時排版要求精準的頁面&#xff0c;設計一個同時適應高分辨率pc又適合小尺寸的手機終端是挑…

Luogu P1471 方差

題目傳送門 開了十倍空間才過是什么鬼&#xff1f;該不會我線段樹炸了吧……細思極恐 平均數都會求&#xff0c;維護區間和&#xff0c;到時候除一下就好了。 方差的求法如下(用的Luogu的圖片) 因為要維護一個平方&#xff0c;我們可以考慮使用van♂完全平方公式將它拆開&#…

python學習day17 遞歸函數

遞歸函數 http://www.cnblogs.com/Eva-J/articles/7205734.html def age(n):if n 4:return 40elif n >0 and n < 4:return age(n1) 2print(age(1)) # 46 只要寫遞歸函數&#xff0c;必須要有結束條件。 二分法查找 l [2,3,5,10,15,16,18,22,26,30,32,35,41,42,43,55,5…

2018年最好用的20個Bootstrap網站模板

Bootstrap是目前最受歡迎也是最簡潔的建站方式之一&#xff0c;尤其是伴隨移動端的發展&#xff0c;響應式設計已經毫無疑問成為了網頁設計的趨勢&#xff0c;網站建設要求兼容手機端已經是一種剛需&#xff0c;也成為提升用戶體驗的一種必要方式。但這無疑會加大設計師和前端人…

bit、byte、位、字節、漢字、字符之間的區別

package com.suypower.chengyu.test; public class ByteTest { /** * byte 8 bits -128 - 127 * 1 bit 1 二進制數據 * 1 byte 8 bit * 1 字母 1 byte 8 bit(位) * 1 漢字 2 byte 16 bit */ public static void main(String[] args) { // TODO Auto-generated method st…

Android SDK 2.3/3.0/4.0/4.2 下載與安裝教程

Eclipse下搭建Android開發環境教程&#xff1a;http://dev.son1c.com/show/1253.html Google已經發布了Android SDK 4.2版本.下面給朋友們介紹一下安裝 Android 模擬器 Emulator模擬器的方法: 1、首先確定安裝了Java JDK&#xff0c;如果沒有&#xff0c;可以去http://www.ora…

PMP:4.項目整合管理

內容中包含 base64string 圖片造成字符過多&#xff0c;拒絕顯示轉載于:https://www.cnblogs.com/mapanguan/p/9916902.html

瀏覽器渲染原理與過程

一、瀏覽器如何渲染網頁 要了解瀏覽器渲染頁面的過程&#xff0c;首先得知道一個名詞——關鍵路徑渲染。關鍵渲染路徑&#xff08;Critical Rendering Path&#xff09;是指與當前用戶操作有關的內容。例如用戶在瀏覽器中打開一個頁面&#xff0c;其中頁面所顯示的東西就是當前…

css框架:五大css流行框架的總結-css教程-PHP中文網

本篇文章給大家帶來的內容是關于css框架&#xff1a;五大css流行框架的總結&#xff0c;有一定的參考價值&#xff0c;有需要的朋友可以參考一下&#xff0c;希望對你有所幫助。 如今&#xff0c;CSS框架越來越受歡迎&#xff0c;可以說已經應用到每一個網站上了。作為開發工具…