閱讀目錄html
關於網絡安全加密的介紹能夠看以前文章:算法
1. 網絡安全——數據的加密與簽名,RSA介紹
2. Base64編碼、MD五、SHA1-SHA5十二、HMAC(SHA1-SHA512)
3. When I see you again(DES、AES、RSA、Base6四、MD5加密原理介紹,代碼實現)編程
HTTPS創建過程至關複雜,下圖爲示意圖,能夠有總體認識,通常咱們編程知道這些已足夠。瀏覽器
若是你想仿照HTTPS實現相似加密,能夠閱讀下具體過程,做爲參照緩存
能夠看到,在客戶端向服務器發起請求前,還有一些準備工做要作,或者說是有一些工做已經作好了。安全
https使用的是443端口,而http使用的是80端口服務器
TCP端口號是一個2字節的整型,處於TCP報文段的前四個字節(2字節源端口號,2字節目的端口號)。網絡
很明顯範圍是0~65535。其中0~1023具備特殊意義,已經被綁定,好比上面說的443,80,還有ftp的21端口。從1024~49151也具備特殊含義,可是尚未被用完,好比8080端口重定向。剩下的咱們就能夠隨便使用,自定義了。session
其實以前在嵌入式開發中,沒有鏈接外網,也沒有使用瀏覽器等等這些。因此端口徹底自定義隨便用,不用擔憂衝突:)。dom
下面的過程爲具體詳細一點的過程,若是不想看,能夠徹底只看示意圖便可,對咱們平時開發用處並不大。或者你在用wireshark相似的抓包工具時看的抓狂不認識,能夠看看(反正我用Charles抓包):
一樣須要三次握手,創建TCP鏈接(毫無疑問HTTPS也是基於TCP的)
裏面有1970年1月1日到如今的秒數,後面還有一個客戶端發來的隨機數Client.random
若是客戶端與服務器費盡周折創建了一個HTTPS連接,剛建完就斷了,也太惋惜,因此用Session ID將其保存,若是下次再來能夠直接使用以前的連接進行對話(對稱密鑰)。
告訴服務器,本身支持的加密算法種類
服務器終於發來咱們想要的數字證書,包含了:簽發機構、過時時間、主題名稱、公共密鑰信息、指紋信息等等
服務器發送結束
客戶端從內置的CA根證書獲取C.pub,對服務器發送來的數字證書進行驗籤,若是一致,說明證書是CA頒發的(前提是C.pub是真實的,確實是CA機構的公鑰)。而後看看證書是否過時,域名是否匹配
客戶端根據以前的:Client.random + sever.random + pre-master
生成對稱密鑰
通過S.pub加密發送給服務器,以後便可經過對稱密鑰進行通信。(就是以前咱們熟悉的http)
在整個過程當中,一共涉及2對公私密鑰對,一對由服務器產生,主要用於加密,一對由CA產生,主要用於簽名。
假設沒有CA,那麼若是服務器返回的包含公鑰的包被hack截取,而後hack也生成一對公私鑰,他將本身的公鑰發給客戶端。hack獲得客戶端數據後,解密,而後再經過服務器的公鑰加密發給服務器,這樣數據就被hack獲取。
有了CA後,客戶端根據內置的CA根證書,很容易識別出hack的公鑰不合法,或者說hack的證書不合法。
from:http://www.cnblogs.com/mddblog/p/6948980.html