前言
上次朋友關于TCP/IP面試的后續,主要是https的相關面試要點,請看下文
關注公眾號,一起交流,微信搜一搜: 潛行前行
面試官:HTTPS它的認證加密程序是怎樣,它怎么保證內容不會被篡改

- 朋友:1,https是基于tcp協議的,客戶端先會和服務端發起鏈接建立
- 朋友:2,接著服務端會把它的證書回傳給客戶端,證書里面包括公鑰S.pub、頒發機構和有效期等資訊
- 朋友:3,拿到的證書可以通過瀏覽器內置的根證書(內含C.pub)驗證其合法性
- 朋友:4,客戶端生成隨機的對稱加密秘鑰Z,通過服務端的公鑰S.pub加密發給服務端
- 朋友:5,客戶端和服務端通過對稱秘鑰Z加密資料來進行http通信
面試官:那根證書怎么保證簽發的證書是有安全有效的
- 朋友:1-服務器會預先生成非對稱加密密鑰,私鑰S.pri自己保留;而公鑰S.pub則發給CA機構進行簽名認證
- 朋友:2-CA也會預先生成一非對稱加密密鑰,其私鑰C.pri用來對服務器的公鑰S.pub進行簽名生成CA證書
- 朋友:3-CA機構會把簽名生成的CA證書回傳給服務器,也就是剛才服務端給客戶端那個證書
- 朋友:4-因為CA(證書頒發機構)比較權威,所以很多瀏覽器會內置包含它公鑰(C.pub)的證書,稱之為根證書,然后可以使用根證書來驗證其頒發證書的合法性了

面試官:如果發生無限套娃的情況,根證書都被篡改怎么辦?
- 朋友:無解,這需要CA根證書是準確無誤,不手動強制修改本地根證書就沒事,因為不經過原有根證書認證的證書是無法自動被加入根證書
面試官:你講得有些快,畫下圖看看
- 朋友:https加密程序

- 朋友:服務端證書通過CA機構簽名認證的程序如下

面試官:前面你說到CA機構會用密鑰對服務器的公鑰進行簽名,簽名和加密,你是怎么理解
- 朋友:使用非對稱加密演算法時,簽名是用來表示使用私鑰的加密程序
- 朋友:如果用公鑰對資料加密,是加密
- 朋友:反之用私鑰對資料加密,則稱之為簽名

面試官:那CA證書是什么?
- 朋友:CA證書是為了確保服務端的公鑰是準確無誤,沒被修改過的
- 朋友:證書通常包含這些內容(1) 服務端的公鑰;(2) 證書發行者(CA)對證書的數字簽名;(3) 證書所用的簽名演算法;(4) 證書發布機構、有效期、所有者的資訊等其他資訊
面試官:你講到HTTPS用到了加密演算法,加密演算法都有哪些型別,說說看
- 朋友:加密演算法分三大類:單向加密,對稱加密演算法和非對稱加密演算法
面試官:對稱加密和非對稱加密有什么區別嗎
- 朋友:使用對稱加密時,加密和解密用的都是同一個密鑰;而非對稱加密,則是兩個密鑰,公鑰加密則需要私鑰解密,私鑰加密則需要公鑰解密,不能私鑰加密,私鑰解密
面試官:MD5、SHA、Base64和RSA屬于什么型別的演算法,對稱還是非對稱?
- 朋友:MD5、SHA,稱為摘要演算法,可以歸類為單向加密演算法,其計算出的摘要資訊,是不可逆向恢復成原來的資料
- 朋友:RSA屬于非對稱加密演算法
- 朋友:而Base64并不算是加密演算法,它更多時候是被稱為一種資料編碼方式

面試官:用過哪些HTTP客戶端工具類?
- 朋友:apache的CloseableHttpClient、jdk9的httpClient和spring clould體系里的ribbon、feign
面試官:有沒有遇到過使用https證書問題,如果有,是什么問題呢?
- 朋友:當然,有一次使用apache-httpClient加載自定義證書時(沒經過CA認證),測驗服拋出證書無法信任,然而本地運行卻沒問題
- 朋友:原因是證書在本地生成的,那時已經默認加入到根證書下了,而測驗服jre的根證書目錄(/lib/security/cacerts)是沒有這個證書,放在專案resource下的證書也無法沒生效
面試官:哦,那你是怎樣解決的
- 朋友:三種解決方案,1-重寫TrustManager,無條件信任證書;2-把證書加到jre的根證書目錄;3-通過CA認證
面試官:網路資料抓包了解不
- 朋友:在linux系統可以使用tcpdump命令對tcp請求資料抓包,抓到的資料輸出到一個檔案;然后可以在window使用wireshark軟體加載tcp資料檔案,它可以提供界面分析
面試官:講得還不錯,那下面我們換個話題,聊聊mysql事務…
- 朋友:可以啊,我也稍微了解過一些事務的知識…

歡迎指正文中錯誤(故事純屬虛構,如有雷同純屬巧合)
參考文章
- 圖解HTTPS建立程序
- 摘要、簽名與數字證書都是什么?
- 數字簽名是什么?
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/249867.html
標籤:其他
上一篇:API安全測驗方法論
