對稱加密
即加密和解密使用同一個密鑰,雖然對稱加密破解難度很大,但由于對稱加密需要在網(wǎng)絡上傳輸密鑰和密文,一旦被黑客截取很容易就能被破解,因此對稱加密并不是一個較好的選擇。
非對稱加密
即加密和解密使用不同的密鑰,分別稱為公鑰和私鑰。
舉個例子:
客戶端需要向服務端(服務端自己有兩把成對鑰匙,公鑰私鑰)發(fā)送數(shù)據(jù)
- 服務端先把公鑰發(fā)給公開網(wǎng)絡上
- 客戶端使用服務端的公鑰加密文件將文件發(fā)給服務端
- 服務端用自己的私鑰解密。
但是非對稱加密消耗的CPU資源非常大,效率很低,嚴重影響HTTPS的性能和速度。因此非對稱加密也不是HTTPS的理想選擇。
對稱加密和非對稱加密結(jié)合
吸取了兩種的各自的優(yōu)點,解密快 和安全。也是https的加密方式
舉個例子:
服務端先把非對稱公鑰發(fā)給公開網(wǎng)絡上
客戶端自己生成一對對稱加解密鑰匙,用非對稱公鑰加密對稱鑰匙,再用對稱鑰匙加密數(shù)據(jù),然后發(fā)送給服務端
服務端使用非對稱私鑰解密 對稱鑰匙,用對稱鑰匙解密數(shù)據(jù)
要返回加密數(shù)據(jù)時,服務端直接用對稱鑰匙加密數(shù)據(jù) 然后返回數(shù)據(jù)給客戶端即可
(接下來使用對稱加解密)然后客戶端可以判斷你只要是擁有私鑰就是我認可的信源(服務端)
因為雙方都有對稱鑰匙,使用鑰匙加解密數(shù)據(jù)即可(和原始的加解密的區(qū)別是不需要將對稱鑰匙放在公開的網(wǎng)絡環(huán)境下傳輸)
這里有個問題,就是假如黑客假裝自己是服務器率先將自己偽造的公私鑰發(fā)給客戶端,怎么辦?這就涉及到數(shù)字證書了。如果是非法的公私鑰,斷開連接即可。
數(shù)字證書和公私鑰的關系
如果按照正規(guī)的來說,數(shù)字證書和公私鑰要一一對應。而因為公私鑰可以隨意生成,那么如果只存在公私鑰而沒有數(shù)字證書的話,那么就算不被公證認可的。算是非法的。你通過該公私鑰傳遞的數(shù)據(jù)都會被持有人知道。
數(shù)字證書的兩個作用:
分發(fā)公鑰。每個數(shù)字證書都包含了注冊者生成的公鑰。在 TLS握手時會通過 certificate 消息傳輸給客戶端。
身份授權(quán)。確保客戶端訪問的網(wǎng)站是經(jīng)過 CA 驗證的可信任的網(wǎng)站。(在自簽名證書的情況下可以驗證是否是我們自己的服務器)
參見https://blog.csdn.net/u014386474/article/details/51982642
雙向認證
參見當Retrofit遇上HTTPS之關于HTTPS的那些事
其中有個客戶端內(nèi)置服務端數(shù)字證書了解一哈