CA證書顧名思義就是由CA(Certification Authority)機構發佈的數字證書。要對CA證書徹底理解及其做用,首先要理解SSL。SSL(security sockets layer,安全套接層)是爲網絡通訊提供安全及數據完整性的一種安全協議。SSL3.0版本之後又被稱爲TLS。SSL位於TCP與各應用層之間,是操做系統向外提供的API。SSL如何保證網絡通訊的安全和數據的完整性呢?就是採用了兩種手段:身份認證和數據加密。首先身份認證就須要用到CA證書了。先了解CA證書具體包括哪些內容:html
頒發者
使用者
版本
簽名算法
簽名哈希算法
使用者
公鑰
指紋
指紋算法
……
上述中頒發者、使用者、版本等內容好理解,頒發者就是CA機構,下面會講到。對於簽名算法、簽名哈希算法的理解,首先要先理解簽名是什麼東東?聯繫到實際狀況,當咱們向某機構提供報告時,每每在報告最後加上我的的名字,以表示該報告是我本人的。簽名在網絡通信中的應用稱爲數字簽名,當服務器向客戶端發送信息時,會將報文生成報文摘要,同時對報文摘要進行hash計算,獲得hash值,而後對hash值進行加密,而後將加密的hash值放置在報文後面,這個加密後的hash值就稱爲簽名。服務器將報文、簽名和數字證書一同發送給客戶端。客戶端收到這些信息後,會首先驗證簽名,利用簽名算法對簽名進行解密,獲得報文摘要的hash值,而後將獲得的報文生成報文摘要並利用簽名hash算法生成新的hash值,經過對比這兩個hash值是否一致,就能判斷信息是否完整,是不是由真正的服務器發送的。可知簽名有兩個做用確認消息發送方可靠,確認消息完整準確。java
上面提到了hash值的加密,咱們還須要理解SSL的加密機制,在使用SSL的網絡通信過程當中,消息在請求和響應中都是加密傳送的。首先要知道加密算法分爲兩種:對稱加密和非對稱加密。對稱加密就是發送雙發使用相同的密鑰對消息進行加解密,常見的對稱加密爲DES、3DES,AES等。非對稱加密是發送雙方各自擁有一對公鑰私鑰,其中公鑰是公開的,私鑰是保密的。當發送方向接收方發送消息時,發送方利用接收方的公鑰對消息進行加密,接收方收到消息後,利用本身的私鑰解密就能獲得消息的明文。其中非對稱加密方法有RSA、Elgamal、ECC等。此處只是簡單了說明了這兩種加密機制的過程,若要深刻理解它們的原理、過程請搜索相應的資料,很容易搜索到。算法
好了,瞭解了簽名原理和兩種加密機制,咱們繼續理解網絡通信中是怎麼利用CA證書進行身份認證的?客戶端與服務端須要通過一個握手的過程才能完成身份認證,創建一個安全的鏈接。握手的過程以下:編程
客戶端訪問服務器(好比:https://www.12306.cn),發送ssl版本、客戶端支持的加密算法、隨機數等消息。
服務器向客戶端發送ssl版本、隨機數、加密算法、證書(證書出現了)等消息。
客戶端收到消息後,判斷證書是否可信(如何判斷可信,看下文介紹),若可信,則繼續通訊,發送消息包括:向服務器發送一個隨機數,從證書中獲取服務器端的公鑰,對隨機數加密;編碼改變通知,表示隨後信息都將使用雙方協定的加密方法和密鑰發送;客戶端握手結束通知。
服務器端對數據解密獲得隨機數,發送消息:編碼改變通知,表示隨後信息都將使用雙方協定的加密方法和密鑰發送。
以上就是整個握手的過程,在第三步實際上就完成了身份的認證,第4、五步是進行密鑰的商定,由於非對稱加密算法對數據加密很是慢,效率低,而對稱加密加密效率很高,所以在整個握手過程要生成一個對稱加密密鑰,而後數據傳輸中使用對稱加密算法對數據加密。可知ssl整個握手過程包括身份認證、密鑰商定。上述講述ssl的握手過程比較簡單,想要深刻理解ssl原理,下面這篇博文講的不錯:
https://segmentfault.com/a/1190000002554673
必定要看上面的博文,不然沒法完全理解證書使用的原理。segmentfault
2.客戶端是如何驗證CA證書是可信任的?
通常來講,如今公共網站數據傳輸都是使用SSL,即經過https協議訪問。Https就是http加SSL。在上面SSL握手過程當中,客戶端是如何驗證服務器發送的CA證書呢?咱們以12306網站爲例進行說明,此時,客戶端就是瀏覽器,若是咱們是第一次訪問12306網站,使用https://www.12306.cn地址訪問,返回以下結果: windows
提示此網站的安全證書有問題,說明證書不可信,若是咱們忽略證書不可信,繼續訪問網站,打開12306網頁,在首頁提供一個根證書的下載,見下頁面:瀏覽器
下載根證書,安裝完畢,再次訪問12036網站,就不會提示網站的安全證書有問題了。這是什麼機制呢?安全
打開【工具】菜單(360瀏覽器爲例),而後選擇【內容】選項卡,點擊【證書】按鈕,打開證書窗口,選擇【中級證書頒發機構】,會看到已經安裝的12306的證書:服務器
只要安裝上12306證書,就說明證書是可信的。使用https協議訪問時,服務器發送證書向瀏覽器時,首先查找該證書是否已在信任列表中,而後對證書進行校驗,校驗成功,那麼就證實證書是可信的。另外,證書的認證是安裝證書鏈執行的,證書鏈的意思是有一個證書機構A,A生成證書B,B也能夠生成證書C,好比在證書窗口中有一個360證書,見下圖:網絡
360證書的頒發者是certification authority of wosign,在【受信任的根證書頒發機構】中,咱們會看到該證書:見下圖,
也就是說,certification authority of wosign生成360證書,360能夠生成其它的證書。A證書或者certification authority of wosign證書在整個證書鏈上就被稱爲根證書,證書驗證的機制是隻要根證書是受信任的,那麼它的子證書都是可信的。好比說,咱們使用https協議訪問了須要360證書的網站,即便咱們不安裝360證書,那麼網站也不會提示證書不安全,由於,生成360證書的根證書certification authority of wosign證書,在受信任的證書列表中。若是一個證書的根證書是不可信的,那麼這個證書確定也是不可信任的。
由以上可知,根證書在證書驗證中極其重要,並且,根證書是無條件信任的,只要咱們將根證書安裝上,就說明咱們對根證書是信任的。好比咱們安裝12306的根證書,是出於咱們對國家的信任,對網站的信任,咱們才放心安裝這個根證書。對於一些不安全的網站的證書,必定要慎重安裝。
另外須要知道的是,【受信任的根證書頒發機構】中的證書是windows預先安裝的一些證書,都是國際上頗有權威的證書機構,他們證書的生成都有很嚴格的流程,所以他們的證書被認爲是安全,就像咱們相信銀行是安全,因此把錢存入到銀行。
3.有哪些CA機構?
世界上較早的數字認證中心是美國的verisign公司,在windows的證書窗口中能夠看到好多verisign公司生成的證書,見下圖:
另外還有加拿大的ENTRUST公司,也是很著名的證書機構。中國的安全認證體系分爲金融CA和非金融CA。在金融CA方面,根證書由中國人民銀行管理,在非金融CA方面,由中國電信負責。中國CA又可分爲行業性CA和區域性CA,行業性CA中影響最大是中國金融認證中心和中國電信認證中國;區域性CA主要是以政府爲背景,以企業機制運行,其中廣東CA中心和上海CA中影響最大。
4.自簽名證書的如何生成、安裝?
有時候,咱們在內部系統傳輸數據須要使用SSL協議,對數據加密,可是咱們又不想花錢去申請CA,這個時候可使用自簽名CA,實現數據加密傳輸的功能。首先要明確一點就是自簽名證書是不安全的,存在安全漏洞,具體看下面的博文介紹:
爲何」自簽名SSL證書」不安全?
https://www.cnblogs.com/liyy2015/p/7649837.html
自簽名證書使用jdk中的keytool生成便可,看似神祕,但實際上比較簡單,見下博文:
如何利用keytool工具生成數字證書
https://jingyan.baidu.com/article/b0b63dbfe18eff4a483070f4.html
自簽名證書的安裝也很簡單,見下博文:
添加自簽發的 SSL 證書爲受信任的根證書
https://cnzhx.net/blog/self-signed-certificate-as-trusted-root-ca-in-windows/
在java編程中,使用socket網絡編程,實現SSL協議,對服務器的證書須要導入到客戶端的祕鑰庫中,這樣才能完成自動認證,具體實現見下博文:
JAVA SSL SOCKET通訊服務器端客戶端證書雙向認證
http://blog.csdn.net/matt8/article/details/45071815
轉: https://blog.csdn.net/yangyuge1987/article/details/79209473/