TLS
傳輸層安全性協(xié)定 TLS(Transport Layer Security)瓮床,及其前身安全套接層 SSL(Secure Sockets Layer)是一種安全協(xié)議,目的是為網(wǎng)際網(wǎng)路通信产镐,提供安全及數(shù)據(jù)完整性保障纤垂。
如圖,TLS 在建立連接時(shí)是需要
- 客戶端發(fā)送 ClientHello(包含支持的協(xié)議版本磷账、加密算法和 隨機(jī)數(shù)A (Client random))到服務(wù)端
- 服務(wù)端返回 ServerHello、公鑰贾虽、證書逃糟、隨機(jī)數(shù)B (Server random) 到客戶端
- 客戶端使用CA證書驗(yàn)證返回證書無誤后。生成 隨機(jī)數(shù)C (Premaster secret)蓬豁,用公鑰對其加密绰咽,發(fā)送到服務(wù)端
- 服務(wù)端用 私鑰 解密得到 隨機(jī)數(shù)C (Premaster secret),隨后根據(jù)已經(jīng)得到的 隨機(jī)數(shù)ABC生成對稱密鑰(hello的時(shí)候確定的加密算法)地粪,并對需要發(fā)送的數(shù)據(jù)進(jìn)行對稱加密發(fā)送
- 客戶端使用對稱密鑰(客戶端也用隨機(jī)數(shù)ABC生成對稱密鑰)對數(shù)據(jù)進(jìn)行解密取募。
- 雙方手持對稱密鑰 使用對稱加密算法通訊
而這一流程 服務(wù)端的證書 是是至關(guān)重要的。
證書
證書用來證明公鑰擁有者身份的憑證
首先我們需要知道 證書是怎么來的蟆技。
數(shù)字證書一般由數(shù)字證書認(rèn)證機(jī)構(gòu)簽發(fā)玩敏,需要
- 申請者通過非對稱加密算法(RSA) 生成一對公鑰和密鑰斗忌,然后把需要的申請信息(國家,域名等)連同公鑰發(fā)送給 證書認(rèn)證機(jī)構(gòu)(CA)
- CA構(gòu)確認(rèn)無誤后通過消息摘要算法(MD5旺聚,SHA) 生成整個(gè)申請信息的摘要簽名M织阳, 然后 把 簽名M和使用的摘要算法 用 CA自己的私鑰 進(jìn)行加密
證書包含了
- 公鑰
- 證書擁有者身份信息
- 數(shù)字證書認(rèn)證機(jī)構(gòu)(發(fā)行者)信息
- 發(fā)行者對這份文件的數(shù)字簽名及使用的算法
- 有效期
證書的格式和驗(yàn)證方法普遍遵循X.509 國際標(biāo)準(zhǔn)。
證書認(rèn)證機(jī)構(gòu)(CA)
數(shù)字證書認(rèn)證機(jī)構(gòu)(英語:Certificate Authority砰粹,縮寫為CA)唧躲,也稱為電子商務(wù)認(rèn)證中心、電子商務(wù)認(rèn)證授權(quán)機(jī)構(gòu)碱璃,是負(fù)責(zé)發(fā)放和管理數(shù)字證書的權(quán)威機(jī)構(gòu)弄痹,并作為電子商務(wù)交易中受信任的第三方,承擔(dān)公鑰體系中公鑰的合法性檢驗(yàn)的責(zé)任嵌器。
其實(shí)任何個(gè)體/組織都可以成為CA(自簽證書)肛真,但是你發(fā)發(fā)布的證書客戶端是不信任的,也是就前文提及的需要權(quán)威嘴秸。比如 Symantec毁欣、Comodo、Godaddy岳掐、Digicert凭疮。
客戶端信任這些CA,就會在其本地保持這些CA的 根證書(root certificate)串述,根證書是CA自己的證書执解,是證書驗(yàn)證鏈的開頭。
根證書沒有機(jī)構(gòu)(已經(jīng)是權(quán)威了)再為其做數(shù)字簽名纲酗,所以都是自簽證書衰腌。
CA會通過 中介證書(intermediate-certificate) 替代根證書的去做服務(wù)器端的證書簽名,確保根證書密鑰絕對不可訪問觅赊。
Godaddy 給出了解釋
What is an intermediate certificate?
證書信任鏈
前文提到右蕊,在向CA 申請證書時(shí)是需要 CA的私鑰 去對整個(gè)證書的簽名摘要做非對稱加密的,也就是證書是可以通過 CA的公鑰 去解密得到證書的簽名摘要的吮螺。
當(dāng)我們再次用 相同的摘要算法(證書里面有保存所使用的算法)對整個(gè)證書做簽名饶囚,如果得到的簽名和證書上的簽名是一致的,說明這個(gè)證書是可信任的鸠补。
同理萝风,中介證書 也是可以被這樣的方式證明其可信任。這樣的一整個(gè)流程稱為 信任鏈(Chain of trust)紫岩。
就是我絕對相信你(A>B)规惰;你絕對相信他(B>C);等于我絕對相信他(A>C)泉蝌。
以下是整個(gè)流程:
- 客戶端得到服務(wù)端返回的證書歇万,通過讀取得到 服務(wù)端證書的發(fā)布機(jī)構(gòu)(Issuer)
- 客戶端去操作系統(tǒng)查找這個(gè)發(fā)布機(jī)構(gòu)的的證書揩晴,如果是不是根證書就繼續(xù)遞歸下去 直到拿到根證書。
- 用 根證書的公鑰 去 解密驗(yàn)證 上一層證書的合法性堕花,再拿上一層證書的公鑰去驗(yàn)證更上層證書的合法性文狱;遞歸回溯。
- 最后驗(yàn)證服務(wù)器端的證書是 可信任 的缘挽。
Reference
https://www.wikiwand.com/zh/根證書
https://www.wikiwand.com/zh-hans/信任鏈
https://www.wikiwand.com/zh-hans/證書頒發(fā)機(jī)構(gòu)
http://www.cnblogs.com/JeffreySun/archive/2010/06/24/1627247.html
http://www.ruanyifeng.com/blog/2011/08/what_is_a_digital_signature.html
更多
獲取優(yōu)秀工具瞄崇,請關(guān)注微信公眾號獲取