HTTPS原理及iOS證書驗(yàn)證

HTTPS的概述

說到https協(xié)議,我們得先了解下http協(xié)(Hyper Text Transfer Protocol)議茧吊,即超文本傳輸協(xié)議。http協(xié)議是基于tcp/ip協(xié)議的應(yīng)用層協(xié)議,具有簡(jiǎn)單快速、無連接倡勇、無狀態(tài)的特點(diǎn),http請(qǐng)求的時(shí)候嘉涌,首先有tcp的三次握手建立連接妻熊,斷開的時(shí)候需要四次揮手,這個(gè)過程可以參考TCP/IP協(xié)議簇及TCP重傳機(jī)制洛心。
而另外一個(gè)需要了解的就是SSL/TSL協(xié)議固耘。SSL(Secure Sockets Layer, 安全套接字層),因?yàn)樵然ヂ?lián)網(wǎng)上使用的 HTTP 協(xié)議是明文的词身,存在很多缺點(diǎn),比如傳輸內(nèi)容會(huì)被偷窺(嗅探)和篡改番枚。 SSL 協(xié)議的作用就是在傳輸層對(duì)網(wǎng)絡(luò)連接進(jìn)行加密法严。TSL就是SSL標(biāo)準(zhǔn)化后的名字。
簡(jiǎn)單點(diǎn)說葫笼,HTTPS = HTTP + SSL/TSL深啤,就是HTTP的安全版本。

HTTPS的演變過程

我們知道路星,HTTP需要三次握手完成tcp連接后溯街,才能進(jìn)行數(shù)據(jù)的傳輸,斷開鏈接需要四次揮手洋丐,具體詳見TCP/IP協(xié)議簇及TCP重傳機(jī)制呈昔。那么HTTPS上述過程又是怎么樣的呢?首先我們看下演變過程友绝,HTTP三次握手建立連接后堤尾,數(shù)據(jù)完全裸奔,如下:

HTTP數(shù)據(jù)傳輸.png

我們可以看到迁客,數(shù)據(jù)完全裸奔郭宝,很容易被黑客劫持,那我們加密吧掷漱,如下:
對(duì)稱加密.png

這樣也有缺點(diǎn):
(1)不同的客戶端粘室、服務(wù)器數(shù)量龐大,所以雙方都需要維護(hù)大量的密鑰卜范,維護(hù)成本很高衔统;
(2)因每個(gè)客戶端、服務(wù)器的安全級(jí)別不同,密鑰極易泄露缰冤。
就有接下來的非對(duì)稱加密版本犬缨,如下:
非對(duì)稱加密.png

這樣做同樣也有缺點(diǎn):(1)公鑰是公開的(也就是黑客也會(huì)有公鑰),所以第 5 步私鑰加密的信息棉浸,如果被黑客截獲怀薛,其可以使用公鑰進(jìn)行解密,獲取其中的內(nèi)容迷郑;(2)非對(duì)稱加密是非常消耗性能的枝恋。
接下來就有了改良版本:
改良.png

大致過程就是:
客戶端對(duì)稱密鑰A通過公鑰加密傳給服務(wù)端,說我們后續(xù)通訊的內(nèi)容就拿對(duì)稱密鑰A加密吧嗡害,服務(wù)端用私鑰解密拿到對(duì)稱密鑰A焚碌,發(fā)送一條消息“好的”,這條消息就是通過對(duì)稱密鑰A加密的霸妹,然后就是后續(xù)的通信了十电。
這樣同樣也有缺點(diǎn),服務(wù)端怎么將公鑰傳給客戶端呢叹螟?客戶端又怎么確認(rèn)對(duì)方就是服務(wù)端呢鹃骂?這就是終極版大招,SSL證書:
SSL證書.png

客戶端在接受到服務(wù)端發(fā)來的SSL證書時(shí)罢绽,會(huì)對(duì)證書的真?zhèn)芜M(jìn)行校驗(yàn)畏线,以瀏覽器為例說明如下:
(1)首先瀏覽器讀取證書中的證書所有者、有效期等信息進(jìn)行一一校驗(yàn)良价;
(2)瀏覽器開始查找操作系統(tǒng)中已內(nèi)置的受信任的證書發(fā)布機(jī)構(gòu)CA寝殴,與服務(wù)器發(fā)來的證書中的頒發(fā)者CA比對(duì),用于校驗(yàn)證書是否為合法機(jī)構(gòu)頒發(fā)明垢;
(3)如果找不到蚣常,瀏覽器就會(huì)報(bào)錯(cuò),說明服務(wù)器發(fā)來的證書是不可信任的袖外;
(4)如果找到史隆,那么瀏覽器就會(huì)從操作系統(tǒng)中取出 頒發(fā)者CA 的公鑰,然后對(duì)服務(wù)器發(fā)來的證書里面的簽名進(jìn)行解密得到hash值曼验;
(5)瀏覽器使用相同的hash算法計(jì)算出服務(wù)器發(fā)來的證書的hash值泌射,將這個(gè)計(jì)算的hash值與證書中簽名做對(duì)比;
(6)對(duì)比結(jié)果一致鬓照,則證明服務(wù)器發(fā)來的證書合法熔酷,沒有被冒充;
(7)此時(shí)瀏覽器就可以讀取證書中的公鑰豺裆,用于后續(xù)加密了拒秘;

HTTPS建立連接的過程:

(1)這一步号显,就是相當(dāng)于我們?cè)跒g覽器上輸入url回車的過程。這個(gè)時(shí)候?yàn)g覽器或者客戶端(接下來統(tǒng)一為客戶端)會(huì)把我們客戶端支持的加密算法Cipher Suite(密鑰算法套件)帶給服務(wù)端躺酒。
服務(wù)端發(fā)送證書(公鑰)給客戶端
(2)服務(wù)端接收Cipher后押蚤,和自己支持的加密算法進(jìn)行比對(duì),如果不符合羹应,則斷開連接揽碘。否則,服務(wù)端會(huì)把符合的算法和證書發(fā)給客戶端园匹,包括證書時(shí)間雳刺、證書日期、證書頒發(fā)的機(jī)構(gòu)裸违。
(3)客戶端驗(yàn)證證書掖桦,包括頒發(fā)證書的機(jī)構(gòu)是否合法與是否過期,證書中包含的網(wǎng)站地址是否與正在訪問的地址一致等
(4)驗(yàn)證通過后(或者用戶接受了不信任的證書)供汛,客戶端會(huì)生成一個(gè)隨機(jī)字符串枪汪,然后用服務(wù)端的公鑰進(jìn)行加密。這里就保證了只有服務(wù)端才能看到這串隨機(jī)字符串(因?yàn)榉?wù)端擁有公鑰對(duì)應(yīng)的私鑰紊馏,RSA解密料饥,可以知道客戶端的隨機(jī)字符串)。
(5)生成握手信息 用約定好的HASH算法朱监,對(duì)握手信息進(jìn)行取HASH,然后用隨機(jī)字符串加密握手信息和握手信息的簽名HASH值原叮,把結(jié)果發(fā)給服務(wù)端赫编。這里之所以要帶上握手信息的HASH是因?yàn)椋乐剐畔⒈淮鄹姆芰ァH绻畔⒈淮鄹睦匏停敲捶?wù)端接收到信息進(jìn)行HASH時(shí),就會(huì)發(fā)現(xiàn)HASH值和客戶端傳回來的不一樣唯欣。這里就保證了信息不會(huì)被篡改嘹吨。
(6)服務(wù)端接收到加密信息后,首先用私鑰解密得到隨機(jī)字符串境氢。然后用隨機(jī)字符串解密握手信息蟀拷,獲得握手信息和握手信息的HASH值,服務(wù)端對(duì)握手信息進(jìn)行HASH萍聊,比對(duì)客戶端傳回來的HASH问芬。如果相同,則說明信息沒有被篡改寿桨。
服務(wù)端驗(yàn)證完客戶端的信息以后此衅,同樣使用隨機(jī)字符串加密握手信息和握手信息的HASH值發(fā)給客戶端。
(7)客戶端接收到服務(wù)端發(fā)回來的握手信息后,用一開始生成的隨機(jī)字符串對(duì)密文進(jìn)行解密挡鞍,得到握手信息和握手信息的HASH值骑歹,像一步服務(wù)端驗(yàn)證一樣對(duì)握手信息進(jìn)行校驗(yàn),校驗(yàn)通過后墨微,握手完畢道媚。從這里開始,客戶端和服務(wù)端的通信就使用那串隨機(jī)字符串進(jìn)行AES對(duì)稱加密通信欢嘿。

對(duì)稱密鑰生成的過程

(1)首先衰琐,客戶端利用CA數(shù)字證書實(shí)現(xiàn)身份認(rèn)證,利用非對(duì)稱加密協(xié)商對(duì)稱密鑰炼蹦。
(2)客戶端會(huì)向服務(wù)器傳輸一個(gè)“pubkey”隨機(jī)數(shù)羡宙,服務(wù)器收到之后,利用特定算法生成另外一個(gè)“pubkey”隨機(jī)數(shù)掐隐,客戶端利用這兩個(gè)“pubkey”隨機(jī)數(shù)生成一個(gè) pre-master 隨機(jī)數(shù)狗热。
(3)客戶端利用自己在 client hello 里面?zhèn)鬏數(shù)碾S機(jī)數(shù) random_C,以及收到的 server hello 里面的隨機(jī)數(shù) random_S虑省,外加 pre-master 隨機(jī)數(shù)匿刮,利用對(duì)稱密鑰生成算法生成 對(duì)稱密鑰enc_key:enc_key=Fuc(random_C, random_S, Pre-Master)

驗(yàn)證總結(jié)

使用RSA非對(duì)稱算法廉丽,服務(wù)端向客戶端發(fā)送公鑰承耿,公鑰包含了域名璃氢、頒發(fā)機(jī)構(gòu)黄痪、過期日期郑临。保證了公鑰的合法性和服務(wù)端的身份正確性(而不會(huì)被黑客冒充)
客戶端向第三方驗(yàn)證公鑰的合法性缅叠,驗(yàn)證通過后向服務(wù)端約定對(duì)稱加密的隨機(jī)字符號(hào)逆航。保證了隨機(jī)字符串只有通信雙方知道穴豫。
接下來的通信就使用這個(gè)隨機(jī)字符號(hào)進(jìn)行加密通信怀大。因?yàn)殡S機(jī)字符串只有雙方知道纱兑,所以信息不會(huì)被截獲。
iOS的HTTPS證書的驗(yàn)證方式見iOS開發(fā)HTTPS實(shí)現(xiàn)之信任SSL證書和自簽名證書

歡迎指正;琛G鄙鳌!
參考:
HTTPS 原理詳解
深入揭秘HTTPS安全問題&連接建立全過程

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末蓖康,一起剝皮案震驚了整個(gè)濱河市铐炫,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌钓瞭,老刑警劉巖驳遵,帶你破解...
    沈念sama閱讀 218,451評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異山涡,居然都是意外死亡堤结,警方通過查閱死者的電腦和手機(jī)唆迁,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來竞穷,“玉大人唐责,你說我怎么就攤上這事●” “怎么了鼠哥?”我有些...
    開封第一講書人閱讀 164,782評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)看政。 經(jīng)常有香客問我朴恳,道長(zhǎng),這世上最難降的妖魔是什么允蚣? 我笑而不...
    開封第一講書人閱讀 58,709評(píng)論 1 294
  • 正文 為了忘掉前任于颖,我火速辦了婚禮,結(jié)果婚禮上嚷兔,老公的妹妹穿的比我還像新娘森渐。我一直安慰自己,他們只是感情好冒晰,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,733評(píng)論 6 392
  • 文/花漫 我一把揭開白布同衣。 她就那樣靜靜地躺著,像睡著了一般壶运。 火紅的嫁衣襯著肌膚如雪耐齐。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,578評(píng)論 1 305
  • 那天蒋情,我揣著相機(jī)與錄音蚪缀,去河邊找鬼。 笑死恕出,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的违帆。 我是一名探鬼主播浙巫,決...
    沈念sama閱讀 40,320評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼刷后!你這毒婦竟也來了的畴?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,241評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤尝胆,失蹤者是張志新(化名)和其女友劉穎丧裁,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體含衔,經(jīng)...
    沈念sama閱讀 45,686評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡煎娇,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,878評(píng)論 3 336
  • 正文 我和宋清朗相戀三年二庵,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片缓呛。...
    茶點(diǎn)故事閱讀 39,992評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡催享,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出哟绊,到底是詐尸還是另有隱情因妙,我是刑警寧澤,帶...
    沈念sama閱讀 35,715評(píng)論 5 346
  • 正文 年R本政府宣布票髓,位于F島的核電站攀涵,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏洽沟。R本人自食惡果不足惜以故,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,336評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望玲躯。 院中可真熱鬧据德,春花似錦、人聲如沸跷车。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,912評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽朽缴。三九已至善玫,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間密强,已是汗流浹背茅郎。 一陣腳步聲響...
    開封第一講書人閱讀 33,040評(píng)論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留或渤,地道東北人系冗。 一個(gè)月前我還...
    沈念sama閱讀 48,173評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像薪鹦,于是被迫代替她去往敵國和親掌敬。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,947評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 網(wǎng)絡(luò)七層協(xié)議 網(wǎng)絡(luò)(OSI)七層協(xié)議由下往上分別為物理層揭厚、數(shù)據(jù)鏈路層、網(wǎng)絡(luò)層寻馏、傳輸層棋弥、會(huì)話層、表示層和應(yīng)用層诚欠。其中...
    趙客縵胡纓v吳鉤霜雪明閱讀 3,520評(píng)論 4 65
  • 網(wǎng)絡(luò)通信三要素 通過 “IP” 找服務(wù)器顽染,通過 “端口” 找進(jìn)程, 通過 “協(xié)議” 確定如何傳輸數(shù)據(jù) IP地址(主...
    就叫yang閱讀 1,276評(píng)論 0 7
  • 網(wǎng)絡(luò)編程的概述 網(wǎng)絡(luò)編程的實(shí)質(zhì)就是用來實(shí)現(xiàn)網(wǎng)絡(luò)互連的不同計(jì)算機(jī)上運(yùn)行的程序間可以進(jìn)行數(shù)據(jù)交換轰绵。 一.OSI網(wǎng)絡(luò)模型...
    思念揮霍閱讀 377評(píng)論 0 0
  • 一個(gè)好男人就是能夠在自我人生的舞臺(tái)上準(zhǔn)確拿捏好各種角色的扮演,強(qiáng)健的身體左腔、健全的心智唧垦、深刻的責(zé)任心、頑強(qiáng)的毅力液样、精...
    麟棲堂小小閱讀 564評(píng)論 0 0
  • 品文學(xué)如同品人振亮,各有所長(zhǎng),不是非黑即白鞭莽。
    TalBen閱讀 194評(píng)論 0 0