HTTPS:證書
一、前言
在上一篇文章中我們介紹了,SSL的基本加密過程,如下
- 1.客戶端向服務器端索要并驗證公鑰
- 2.雙方協商生成“對話密鑰”
- 3.雙方采用“對話密鑰”進行加密通信
不過遺憾的是,這種加密過程還是存在一些問題的,那就客戶端無法保證自己收到的公鑰就是服務器發送過來的貨真價實的公鑰,還有可能是中間人利用劫持技術将公鑰給替換了。因此為了解決上述問題,我們引入了證書機制。
二、證書
公鑰證書是由數字證書認證機構(CA)和其相關機關頒發的
證書機制的工作流程如下:
- 1 服務器的運維人員将公鑰發送給CA數字認證機構
- 2 認證機構在收到公鑰後會對這個公鑰做數字簽名操作,然後将這個公鑰與數字簽名等相關信息綁定在一起形成公鑰證書(一個文件),發給運維人員,運維人員再将這個證書綁定在服務器中
- 3 客戶端請求HTTPS進行通信時,服務器會将這份由CA數字證書認證機構頒發的公鑰證書發送給客戶端,以進行接下來非對稱加密通信。
- 4 客戶端接收到這份公鑰證書之後,會使用數字證書認證機構的公鑰對證書上數字簽名進行驗證,以确定服務器公鑰的真實性。還會驗證驗證證書的相關信息,證書有效(沒過期等)。這樣客戶端就可以确認兩件事情:一是數字正式時真實有效的,二是服務器的公鑰也是值得信賴的。
在這整個通信中,數字證書機構的公鑰必須安全給客戶端,如果還是使用通信的方式獲取這個認證公鑰,那麼這個認證公鑰還是有被篡改的風險。因此,鑒于這種情況,多數浏覽器開發商發布版本的時候,會事先在内部植入常用認證機關的公鑰。如下:
![如何弄自己的https證書(HTTPS證書) 如何弄自己的https證書(HTTPS證書)1](/uploads3/large/pgc-image/fe90242c1b0d41d2ac828ba57ff0ff12.jpg)
2.1 證書簽發過程
- 1.服務方 S 向第三方機構CA提交公鑰、組織信息、個人信息(域名)等信息并申請認證;
- 2.數字證書機構通過線上、線下等多種手段驗證申請者提供信息的真實性,如組織是否存在、企業是否合法,是否擁有域名的所有權等;
- 3.如果信息審核通過,數字證書機構會向申請者簽發認證文件-證書。證書包含以下信息:申請者公鑰、申請者的組織信息和個人信息、簽發機構 CA 的信息、有效時間、證書序列号等信息的明文,同時包含一個簽名;
簽名的産生算法:首先,使用散列函數計算公開的明文信息的信息摘要,然後,采用 CA 的私鑰對信息摘要進行加密,密文即簽名。證書包含:公鑰 申請者與頒發者的相關信息 簽名。
2.2 完整通信步驟
![如何弄自己的https證書(HTTPS證書) 如何弄自己的https證書(HTTPS證書)2](/uploads3/large/pgc-image/56ac5e60e4184b10be282abfe6f984a8.jpg)
- 1.客戶端通過發送 Client Hello 報文開始 SSL 通信。報文中包含客戶端支持的 SSL 的指定版本、加密組件(Cipher Suite)列表(所使用的加密算法及密鑰長度等)。
![如何弄自己的https證書(HTTPS證書) 如何弄自己的https證書(HTTPS證書)3](/uploads3/large/pgc-image/7da843f61fea46138617b76a4e6b67c1.jpg)
- 2.服務器可進行 SSL 通信時,會以 Server Hello 報文作為應答。和客戶端一樣,在報文中包含 SSL 版本以及加密組件。服務器的加密組件内容是從接收到的客戶端加密組件内篩選出來的。
![如何弄自己的https證書(HTTPS證書) 如何弄自己的https證書(HTTPS證書)4](/uploads3/large/pgc-image/15e6c1723ca742ba90aaea7f681c70ba.jpg)
- 3.之後服務器發送 Certificate 報文。報文中包含公開密鑰證書。
![如何弄自己的https證書(HTTPS證書) 如何弄自己的https證書(HTTPS證書)5](/uploads3/large/pgc-image/bd05621fb45449b59dcbd4173b7f95c0.jpg)
- 4.最後服務器發送 Server Hello Done 報文通知客戶端,最初階段的 SSL 握手協商部分結束。
![如何弄自己的https證書(HTTPS證書) 如何弄自己的https證書(HTTPS證書)6](/uploads3/large/pgc-image/662a8fcc9c644ba7a9e70aa7f0bdd265.jpg)
- 5.SSL 第一次握手結束之後,客戶端以 Client Key Exchange 報文作為回應。報文中包含通信加密中使用的一種被稱為 Pre-master secret 的随機密碼串。該報文已用步驟 3 中的公開密鑰進行加密。
- 6.接着客戶端繼續發送 Change Cipher Spec 報文。該報文會提示服務器,在此報文之後的通信會采用 Pre-master secret 密鑰加密。
- 7.客戶端發送 Finished 報文。該報文包含連接至今全部報文的整體校驗值。這次握手協商是否能夠成功,要以服務器是否能夠正确解密該報文作為判定标準。
![如何弄自己的https證書(HTTPS證書) 如何弄自己的https證書(HTTPS證書)7](/uploads3/large/pgc-image/2a79c76a95b649ee96e51eac873b590b.jpg)
- 8.服務器同樣發送 Change Cipher Spec 報文。
- 9.服務器同樣發送 Finished 報文。
- 10.服務器和客戶端的 Finished 報文交換完畢之後,SSL 連接就算建立完成。當然,通信會受到 SSL 的保護。從此處開始進行應用層協議的通信,即發送 HTTP 請求。
![如何弄自己的https證書(HTTPS證書) 如何弄自己的https證書(HTTPS證書)8](/uploads3/large/pgc-image/5ba87af583744125baecce763aa48fd3.jpg)
![如何弄自己的https證書(HTTPS證書) 如何弄自己的https證書(HTTPS證書)9](/uploads3/large/pgc-image/a9510d7b3c6b40c691247208bbf158fa.jpg)
- 12.最後由客戶端斷開連接。斷開連接時,發送 close_notify 報文。上圖做了一些省略,這步之後再發送 TCP FIN 報文來關閉與 TCP 的通信。
抓包對比分析:
![如何弄自己的https證書(HTTPS證書) 如何弄自己的https證書(HTTPS證書)10](/uploads3/large/pgc-image/7fa2cd42d5e249c7880567d5b738dfb3.jpg)
三、EV SSL證書
如果這個證書的作用一個是證明通信一方服務器是否規範,一個作用是服務器背後的運營企業是否真實存在,這樣的證書就叫做EV SSL證書
四、客戶端證書
HTTPS中還可以使用客戶端證書,以客戶端證書進行客戶端認證,證明服務器通信的客戶端是預料之内的客戶端。
想要獲取客戶端證書,用戶得自己安裝客戶端證書,這種證書一般在網上銀行采用的比較多,有時候在登陸網銀時,不僅要求用戶确認輸入ID和密碼,還會要求用戶的客戶端證書,以确認用戶是否為特定的終端訪問
五、自簽名證書
如果我們使用openssl這套開源程序給自己構建了一套認證機構,從而實現自己給自己辦法服務器證書,但是由于該服務器證書在互聯網上不可作為證書使用,似乎也沒有什麼幫助,因為客戶端無法驗證證書的有效性。主要還是起到了加密的作用。
對于這種獨立構建的認證機構叫做自認證機構,由自認證機構辦法的無用的證書也被成為自簽名證書。浏覽器訪問這種使用自簽名時會出現警告信息,如下:
![如何弄自己的https證書(HTTPS證書) 如何弄自己的https證書(HTTPS證書)11](/uploads3/large/pgc-image/5c373cee898845d8aaeddaa5b26e854c.jpg)
六、總結
即使HTTPS如此安全,但是還是有很多的Web網站未使用HTTPS,其中一個原因時相比于純文本通信,加密通信會消耗更多的CPU以及内存資源,如果每次通信都加密,會消耗相當多的資源,因此如果是非敏感信息則使用HTTP通信(可能會有劫持,網頁上會出現廣告)。
, 更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!