????????http 是什么協(xié)議,怎么工作的,請(qǐng)自行百度
????????iOS 現(xiàn)在普遍都是https,https 和 http 有什么區(qū)別呢,https 更安全,能夠信息加密傳輸,具體是怎樣,這篇文件說(shuō)的很清楚
? ? ? ?http://www.itdecent.cn/p/db9c716c3558
? ? ? ? 但是他沒(méi)有舉例,我現(xiàn)在就把我所理解的通過(guò)一個(gè)例子展示出來(lái)
? ??????RSA性能是非常低的,原因在于尋找大素?cái)?shù)、大數(shù)計(jì)算、數(shù)據(jù)分割需要耗費(fèi)很多的CPU周期,所以一般的HTTPS連接只在第一次握手時(shí)使用非對(duì)稱加密,通過(guò)握手交換對(duì)稱加密密鑰,在之后的通信走對(duì)稱加密。

我們假設(shè) 瀏覽器 client 為C 端,網(wǎng)站 server 為S 端。
1.瀏覽器將自己支持的一套加密規(guī)則發(fā)送給網(wǎng)站。
C ----------請(qǐng)求HTTPS連接,及支持的算法-------------> S
2.網(wǎng)站從中選出一組加密算法與HASH算法,并將自己的身份信息以證書的形式發(fā)回給瀏覽器。證書里面包含了網(wǎng)站地址,加密公鑰,以及證書的頒發(fā)機(jī)構(gòu)等信息。
S -------------------算法(假如是Sha2 算法) + 公鑰 (鎖頭,鑰匙只有S 有)------> C
3.瀏覽器獲得網(wǎng)站證書之后瀏覽器要做以下工作:
a)驗(yàn)證證書的合法性(頒發(fā)證書的機(jī)構(gòu)是否合法,證書中包含的網(wǎng)站地址是否與正在訪問(wèn)的地址一致等),如果證書受信任,則瀏覽器欄里面會(huì)顯示一個(gè)小鎖頭,否則會(huì)給出證書不受信的提示。
驗(yàn)證 公鑰(鎖頭)的合法性
b) 如果證書受信任,或者是用戶接受了不受信的證書,瀏覽器會(huì)生成一串隨機(jī)數(shù)的密碼,并用證書中提供的公鑰加密。
隨機(jī)生成一串?dāng)?shù)字,假如是 782345,通過(guò)公鑰加密 ,假設(shè)加密結(jié)果是dhualsdh*&^*&^Dsa
782345(密碼) ------------公鑰加密 -----------------> ?dhualsdh*&^*&^Dsa
c)使用約定好的HASH算法計(jì)算握手消息,并使用生成的隨機(jī)數(shù)對(duì)消息進(jìn)行加密,最后將之前生成的所有信息發(fā)送給網(wǎng)站。
假如握手消息是 : abcdefgh ?----------Hash 算法----------->lkjhgfdsa
對(duì) Hash 結(jié)果進(jìn)行加密 :?
lkjhgfdsa ----------------- 算法加密 (參數(shù) 782345)-------------> khdkah(&)@*)nk8&*
最終發(fā)送給S 的就三個(gè)信息 :
khdkah(&)@*)nk8&* +?dhualsdh*&^*&^Dsa +?lkjhgfdsa
4.網(wǎng)站接收瀏覽器發(fā)來(lái)的數(shù)據(jù)之后要做以下的操作:
a) 使用自己的私鑰將信息解密取出密碼,使用密碼解密瀏覽器發(fā)來(lái)的握手消息,并驗(yàn)證HASH是否與瀏覽器發(fā)來(lái)的一致。
通過(guò)私鑰去取出密碼:?dhualsdh*&^*&^Dsa ------------私鑰解密-------------> 782345
解密?khdkah(&)@*)nk8&* :?khdkah(&)@*)nk8&* ------------解密算法(密碼 : 782345) --------> ?xxxxxxxx
驗(yàn)證?xxxxxxxx 是否等于?lkjhgfdsa
b) 使用密碼加密一段握手消息,發(fā)送給瀏覽器。
握手消息: aaaaaa ------------加密算法(密碼 :?782345)--------------> bbbbbbbb?
hash計(jì)算 :?bbbbbbbb -------------> hash 計(jì)算 ---------------> cccccccc
發(fā)送到C 的是 : ?cccccccc +?bbbbbbbb
5.瀏覽器解密并計(jì)算握手消息的HASH,如果與服務(wù)端發(fā)來(lái)的HASH一致,此時(shí)握手過(guò)程結(jié)束,之后所有的通信數(shù)據(jù)將由之前瀏覽器生成的隨機(jī)密碼并利用對(duì)稱加密算法進(jìn)行加密。
解密bbbbbbbb :?bbbbbbbb -----------解密(密碼:782345) ---------->?aaaaaa
計(jì)算hash ?:?aaaaaa ------------- hash計(jì)算 -------------> dddddddd
判斷dddddddd 是否等于 ?cccccccc
最終 雙方都是通過(guò)密鑰進(jìn)行通信:
內(nèi)容 -----------密鑰加密 --------------> 最終發(fā)送的內(nèi)容
收到的內(nèi)容 ------------> 密鑰解密 ----------> 實(shí)際內(nèi)容
這僅僅是自己的理解,有不對(duì)的地方,歡迎指證、交流