> ### `HTTPS` `ssl`
* `client`和`server`雙發傳遞數據,對數據采用對稱加密算法加密(如`AES`,對稱加密雙方采用統一的密鑰`key`)

* 關鍵在于雙方如何確定這個統一的公鑰所以采用非對稱加密算法(如`RSA` `ECC`,密鑰和私鑰)對`AES`的密鑰進行加密傳輸,為了防止中間人攻擊,采用第三方機構`CA`。
* 服務端首先把自己的公鑰`s_key_pub`發給證書頒發機構,向證書頒發機構申請證書。證書頒發機構自己也有一對公鑰私鑰`ca_key_pub` `ca_key`。機構利用自己的私鑰`ca_key`來加密`s_key_pub`,并且通過服務端網址等信息生成一個證書簽名,證書簽名同樣經過機構的私鑰加密。證書制作完成后,機構把證書發送給了服務端

* `client`向`server`發送請求時,`server`把自己的證書發送給`client`,`client`收到證書后,對證書驗證真偽。各大瀏覽器和操作系統已經維護了所有權威證書機構的名稱和公鑰。所以`client`只需要知道是哪個機構頒布的證書,就可以從本地找到對應的機構公鑰,用機構公鑰解密出證書簽名并驗證與請求網址是否一致(此處client驗證證書簽名存疑)。 一致則表明證書可靠,再解密證書,得到`server`的公鑰`s_key_pub`,然后`client`生成自己的對稱加密算法`AES`的密鑰`c_key`,并用剛解密到的`server`的公鑰`s_key_pub`對其進行加密然后發送給`server`

* `server`收到之后用自己的密鑰`s_key`進行解密,得到了`client`的對稱加密算法的`c_key`,然后`server`與`client`就通過`c_key`加密數據進行傳輸。
<br/>
> ### 加密算法
對稱加密算法的加密與解密 密鑰相同,非對稱加密算法的加密密鑰與解密 密鑰不同,此外,還有一類 不需要密鑰 的 散列算法。
* 對稱加密: `DES` `3DES` `AES
`
* 非對稱加密:`RSA` `DSA
` `ECC`
* `RSA`兩個大 素數 相乘十分容易,但想要對其乘積進行 因式分解 卻極其困難,因此可以將 乘積 公開作為 加密密鑰
* 散列算法:SHA-1、MD5
<br/>
<br/>
***
* 參考 [漫畫:什么是 HTTPS 協議?](https://zhuanlan.zhihu.com/p/57142784)
- asD
- Java
- Java基礎
- Java編譯器
- 反射
- collection
- IO
- JDK
- HashMap
- ConcurrentHashMap
- LinkedHashMap
- TreeMap
- 阻塞隊列
- java語法
- String.format()
- JVM
- JVM內存、對象、類
- JVM GC
- JVM監控
- 多線程
- 基礎概念
- volatile
- synchronized
- wait_notify
- join
- lock
- ThreadLocal
- AQS
- 線程池
- Spring
- IOC
- 特性介紹
- getBean()
- creatBean()
- createBeanInstance()
- populateBean()
- AOP
- 基本概念
- Spring處理請求的過程
- 注解
- 微服務
- 服務注冊與發現
- etcd
- zk
- 大數據
- Java_spark
- 基礎知識
- Thrift
- hdfs
- 計算機網絡
- OSI七層模型
- HTTP
- SSL
- 數據庫
- Redis
- mysql
- mybatis
- sql
- 容器
- docker
- k8s
- nginx
- tomcat
- 數據結構/算法
- 排序算法
- 快排
- 插入排序
- 歸并排序
- 堆排序
- 計算時間復雜度
- leetcode
- LRU緩存
- B/B+ 樹
- 跳躍表
- 設計模式
- 單例模式
- 裝飾者模式
- 工廠模式
- 運維
- git
- 前端
- thymeleaf
- 其他
- 代碼規范
- work_project
- Interview