快速理解https是如何保证安全的
1.https作用
- 混合加密
- 身份驗(yàn)證: 可以通過數(shù)字證書驗(yàn)證對方身份
- 驗(yàn)證數(shù)據(jù)完成性: 防止內(nèi)容被中間人冒充或篡改
2. 基礎(chǔ)知識
-
數(shù)字摘要:通過hash函數(shù)對報(bào)文進(jìn)行哈希,得到長度固定的字符串稱謂摘要, 這個(gè)過程是單向的,無法通過摘要反推原文。
-
數(shù)字簽名:對數(shù)字摘要進(jìn)行非對稱加密后的密文,叫做數(shù)字簽名。
-
數(shù)字證書:可用于客戶端驗(yàn)證服務(wù)端身份的證書,一般是由CA機(jī)構(gòu)簽發(fā)的。數(shù)字證書包含頒發(fā)機(jī)構(gòu)、過期時(shí)間、網(wǎng)站域名、網(wǎng)站公鑰、CA簽名。
-
CSR:CSR是Certificate Signing Request的英文縮寫,即數(shù)字證書簽名請求,網(wǎng)站只要把CSR文件提交給證書頒發(fā)機(jī)構(gòu)后,證書頒發(fā)機(jī)構(gòu)使用其【根證書私鑰】對CSR內(nèi)容進(jìn)行【簽名】,就生成了數(shù)字證書;CSR請求中包含網(wǎng)站生成的公鑰,因此CSR必定有對用的key,也就是私鑰.例如下圖是在線生成CSR的工具:
生成結(jié)果:
3. https流程
網(wǎng)站首先需要申請域名,然后使用域名生成 CSR 和 私鑰,然后向CA機(jī)構(gòu)申請數(shù)字證書。
瀏覽器向網(wǎng)站發(fā)送https請求,URL中必須使用域名。
網(wǎng)站收到請求后,立刻響應(yīng)數(shù)字證書。
瀏覽器收到數(shù)字證書后,在本地已授信的根證書列表中,查詢數(shù)字證書中的頒發(fā)機(jī)構(gòu)的根證書;如果不存在則無法驗(yàn)證,所以提示用戶該數(shù)字證書不安全,如果存在,則使用本地根證書對數(shù)字證書進(jìn)行驗(yàn)證,如果驗(yàn)證失敗則提示用戶該數(shù)字證書不安全。如果證書沒有問題,瀏覽器自動(dòng)生成一個(gè)隨機(jī)數(shù)(對稱密鑰)對請求報(bào)文進(jìn)行加密,然后再使用數(shù)字證書中的公鑰對隨機(jī)數(shù)進(jìn)行加密,然后將【請求密文】和【隨機(jī)數(shù)密文】發(fā)送給網(wǎng)站。
網(wǎng)站收到瀏覽器發(fā)來的密文后,首先使用私鑰解密【隨機(jī)數(shù)密文】得到【隨機(jī)數(shù)】,然后使用隨機(jī)數(shù)解密【請求報(bào)文】,此時(shí)SSL連接已建立,該連接以后的通信將一直使用該【隨機(jī)數(shù)】進(jìn)行對稱加密。最后網(wǎng)站使用【隨機(jī)數(shù)】加密響應(yīng)報(bào)文,并發(fā)送到瀏覽器。
瀏覽器接受到響應(yīng)報(bào)文后,使用【隨機(jī)數(shù)】解密報(bào)文,然后使用【隨機(jī)數(shù)】加密請求。
4. 數(shù)字證書驗(yàn)證主要過程
比如訪問百度收到的數(shù)字證書如下圖:
點(diǎn)擊URL框左邊的鎖即可查看證書,在證書的常規(guī)信息:
- 頒發(fā)給: baidu.com 即數(shù)字證書中的網(wǎng)站域名
- 頒發(fā)者: CA機(jī)構(gòu)
- 有效期: 即數(shù)字證書的有效期
上圖示數(shù)字證書的詳情,點(diǎn)擊下方的【證書的詳情信息】可以打開證書的解釋,最重要的信息就是指紋和公鑰了。
指紋就是證書簽名,是CA對證書內(nèi)容進(jìn)行摘要后使用私鑰加密后的簽名。
公鑰是網(wǎng)站的公鑰。
瀏覽器安裝后都會內(nèi)置很多CA機(jī)構(gòu)的根證書,基本涵蓋全球CA機(jī)構(gòu),如谷歌瀏覽器中的根證書如下:
這些根證書實(shí)際就是CA機(jī)構(gòu)自己給自己頒發(fā)的數(shù)字證書,其中的信息和頒發(fā)給網(wǎng)站的數(shù)字證書的格式是一樣的。
瀏覽器根據(jù)網(wǎng)站數(shù)字證書中的頒發(fā)機(jī)構(gòu)名稱,從根證書列表中查詢對用的根證書,如果不存在,則說明網(wǎng)站數(shù)字證書的頒發(fā)機(jī)構(gòu)不受信任,不夠安全,因此驗(yàn)證失敗,如果存在則繼續(xù)驗(yàn)證。
瀏覽器使用根證書中的公鑰,對數(shù)字簽名進(jìn)行解密,如果能解密成功,說明指紋是CA機(jī)構(gòu)使用私鑰進(jìn)行加密的,如果解密失敗則說明數(shù)字簽名是偽造的。解密成功后獲得證書摘要。
瀏覽器根據(jù)摘要算法主動(dòng)生成摘要,和解密數(shù)字簽名得到的數(shù)字摘要進(jìn)行對比,如果不一致則說明證書內(nèi)容被篡改了,否則說明該數(shù)字證書的確是CA機(jī)構(gòu)簽發(fā)的。
瀏覽器比較數(shù)字證書中的域名是否和請求中的一致,如果不一致則說明該數(shù)字證書雖然的確是CA機(jī)構(gòu)簽發(fā)的,但并不是目標(biāo)網(wǎng)站的數(shù)字證書。比如一個(gè)非法網(wǎng)站擁有CA簽發(fā)的數(shù)字證書,但它截取了訪問某個(gè)百度的https請求,并響應(yīng)瀏覽器自己的證書,如果瀏覽器不進(jìn)行域名校驗(yàn),就會認(rèn)為數(shù)字證書是正確的,進(jìn)而整個(gè)會話被劫持。
這也是為什么https要求必須是域名,否者會話可能被劫持。如下圖,當(dāng)https請求中使用ip訪問百度時(shí),瀏覽器也會提示不安全,以避免會話被劫持:
流程圖:
關(guān)系圖:
5.證書鏈
可知百度的數(shù)字證書并不是一級CA機(jī)構(gòu)簽發(fā)的,而是二級CA機(jī)構(gòu)簽發(fā)的。
總結(jié)
以上是生活随笔為你收集整理的快速理解https是如何保证安全的的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 中国大学MOOC 计算机组成原理第5章
- 下一篇: 30秒实现Vue吸顶效果