[信息安全] 3.HTTPS工作流程
0. 簡(jiǎn)單回顧
在前面兩篇博客中介紹了密碼相關(guān)的一些基本工具,包括(對(duì)稱密碼,公鑰密碼,密碼散列函數(shù),混合密碼系統(tǒng),消息認(rèn)證碼碼,數(shù)字簽名,偽隨機(jī)數(shù),數(shù)字證書)這幾個(gè)。其中它們之間也是互相依賴的,我們來簡(jiǎn)單的梳理一下它們的依賴關(guān)系。
對(duì)稱密碼:無。
公鑰密碼:無。
密碼散列函數(shù):無。
偽隨機(jī)數(shù):可以利用密碼散列函數(shù)來實(shí)現(xiàn),也可以不使用。
混合密碼系統(tǒng):對(duì)稱密碼 + 公鑰密碼 + 密碼散列函數(shù)。
消息認(rèn)證碼:密碼散列函數(shù) + 對(duì)稱密碼。
數(shù)字簽名:密碼散列函數(shù) + 公鑰密碼。
數(shù)字證書:公鑰密碼 + 數(shù)字簽名。
這篇要介紹的HTTPS,則把以上這些全都派上場(chǎng)了。
1. HTTPS 簡(jiǎn)史
在早期HTTP誕生的這幾年間,1990年~·1994年,HTTP作為一個(gè)應(yīng)用層協(xié)議,它是這樣工作的:
后來網(wǎng)景公司開發(fā)了SSL(Secure Sockets Layer)技術(shù),然后它就變成了這樣的HTTP,也就是HTTPS了:
后來爆發(fā)了與IE的世紀(jì)大戰(zhàn),網(wǎng)景敗北,SSL移交給了IETF(Internat Engineering Task Force)互聯(lián)網(wǎng)工程任務(wù)組,標(biāo)準(zhǔn)化之后變成了現(xiàn)在的TLS,現(xiàn)在一般會(huì)把它們兩個(gè)放在一起稱為SSL/TLS。本篇并不關(guān)注SSL/TLS具體是如何工作的,只是抽象的解釋下HTTPS的一個(gè)工作流程。
2. HTTPS 工作流程
Client發(fā)起一個(gè)HTTPS(https:/demo.linianhui.dev)的請(qǐng)求,根據(jù)RFC2818的規(guī)定,Client知道需要連接Server的443(默認(rèn))端口。
Server把事先配置好的公鑰證書(public key certificate)返回給客戶端。
Client驗(yàn)證公鑰證書:比如是否在有效期內(nèi),證書的用途是不是匹配Client請(qǐng)求的站點(diǎn),是不是在CRL吊銷列表里面,它的上一級(jí)證書是否有效,這是一個(gè)遞歸的過程,直到驗(yàn)證到根證書(操作系統(tǒng)內(nèi)置的Root證書或者Client內(nèi)置的Root證書)。如果驗(yàn)證通過則繼續(xù),不通過則顯示警告信息。
Client使用偽隨機(jī)數(shù)生成器生成加密所使用的會(huì)話密鑰,然后用證書的公鑰加密這個(gè)會(huì)話密鑰,發(fā)給Server。
Server使用自己的私鑰(private?key)解密這個(gè)消息,得到會(huì)話密鑰。至此,Client和Server雙方都持有了相同的會(huì)話密鑰。
Server使用會(huì)話密鑰加密“明文內(nèi)容A”,發(fā)送給Client。
Client使用會(huì)話密鑰解密響應(yīng)的密文,得到“明文內(nèi)容A”。
Client再次發(fā)起HTTPS的請(qǐng)求,使用會(huì)話密鑰加密請(qǐng)求的“明文內(nèi)容B”,然后Server使用會(huì)話密鑰解密密文,得到“明文內(nèi)容B”。
簡(jiǎn)單總結(jié)下,HTTPS是使用了證書的一個(gè)混合密碼系統(tǒng),其中證書的作用在于傳遞會(huì)話密鑰,以及驗(yàn)證網(wǎng)站的真實(shí)性;而HTTPS真正的加密操作是由對(duì)稱密碼這個(gè)工具負(fù)責(zé)的(有興趣的可以找找每個(gè)步驟中都用到了密碼工具箱中的那些工具)。在windows系統(tǒng)中,可以配置一個(gè)名為?SSLKEYLOGFILE?的環(huán)境變量,Chrome和Firefox在訪問HTTPS站點(diǎn)的時(shí)候,會(huì)把第4步生成的會(huì)話密鑰以及其他附屬信息,寫入到這個(gè)文件中:
比如下圖:
具體的格式可以參考MDN的一個(gè)說明https://developer.mozilla.org/en-US/docs/Mozilla/Projects/NSS/Key_Log_Format。
以上只是一個(gè)抽象的HTTPS的一個(gè)工作流程,實(shí)際上SSL/TLS所做的工作遠(yuǎn)不止這這些,更詳細(xì)的解釋請(qǐng)參考這篇文章:http://www.infoq.com/cn/articles/HTTPS-Connection-Jeff-Moser。
如有錯(cuò)誤之處,歡迎指正!
3. 參考
SSL/TLS:https://en.wikipedia.org/wiki/Transport_Layer_Security
IETF:https://en.wikipedia.org/wiki/Internet_Engineering_Task_Force
HTTPS:https://en.wikipedia.org/wiki/HTTPS
HTTPS 連接最初的若干毫秒:http://www.infoq.com/cn/articles/HTTPS-Connection-Jeff-Moser
HTTPS on Stack Overflow: The End of a Long Road:https://nickcraver.com/blog/2017/05/22/https-on-stack-overflow/
SSL/TLS部署最佳實(shí)踐:https://github.com/ssllabs/research/wiki/SSL-and-TLS-Deployment-Best-Practices
HTTP Over TLS:https://tools.ietf.org/html/rfc2818
SSLKEYLOGFILE:https://developer.mozilla.org/en-US/docs/Mozilla/Projects/NSS/Key_Log_Format
原文地址:http://www.cnblogs.com/linianhui/p/security-https-workflow.html
.NET社區(qū)新聞,深度好文,微信中搜索dotNET跨平臺(tái)或掃描二維碼關(guān)注
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的[信息安全] 3.HTTPS工作流程的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 微软发布Azure Stack更多细节,
- 下一篇: Entity Framework Cor