ssl證書是什麼東西

爲何須要證書

數字證書原理邏輯鏈條:html

  1. 加密由加密算法 + 密鑰組成,加密算法公開,因而密鑰分發成了關鍵。(能夠試想,如果加密算法私有,天然就沒有密鑰分發及以後的問題,代之就只加密算法自己的安全問題)
  2. 對稱加密密鑰不易分發,也不能每次都同樣
  3. 非對稱加密通訊,客戶端持有服務端的公鑰,但服務商的公鑰誰均可以獲得,服務商給我發的消息,別人雖然不能改,但也能夠截獲並解密。
  4. 因此,純粹的對稱加密 和 非對稱加密 都是沒法作到安全通訊的。所以,先使用非對稱加密 約定一個對稱密鑰,再用對稱加密交流
  5. 問題就變成了:客戶端如何拿到服務商的公鑰? ==> 服務商的公鑰如何安全的在網絡上傳輸呢?==> 服務商不直接分發公鑰,而是分發經CA私鑰加密過的數字證書(包含公鑰+服務商域名等信息)。客戶端持有CA的公鑰,解密後拿到服務商的公鑰。java

    從概念上來說,數字證書是用來驗證網絡通訊參與者的一個文件。這和學校頒發 給學生的畢業證書相似。在學校和學生之間,學校是可信第三方 CA,而學生是通訊 參與者。若是社會廣泛信任一個學校的聲譽的話,那麼這個學校頒發的畢業證書,也 會獲得社會承認。參與者證書和 CA 證書能夠類比畢業證和學校的辦學許可證。nginx

  6. CA的公鑰如何安全的在網絡上傳輸呢?給CA 也頒發證書,而後你們都無條件信任root CA,在操做系統、瀏覽器發佈的時候便嵌入了root CA。算法

就比如諜報戰裏的接頭戲碼瀏覽器

  1. 兩個彼此認識的特工接頭會輕鬆一點,雙方可能會常常變換下接頭方式
  2. 第一次跟新來的特工接頭,上級會告訴你xx點去xx等一個手裏拿着xx的人,接頭暗號是「hello/world」。這次,雙方都認識的上級是CA,「hello/world」 即是對方的CA證書。

證書

  1. 證書有什麼,Chrome能夠經過」settings ==> advanced setting ==> https/ssl ==> 管理證書」 查看證書內容。證書基本上是一個文本文件。安全

    • 服務商的公鑰
    • 服務商的信息
    • 對上述信息算一個簽名,用ca本身的私鑰加密一下
  2. 如何驗證證書?我擁有ca的公鑰,對證書上的信息作一個簽名, 解密證書上的簽名,比對。服務器

    • 若是兩個簽名同樣,簽名同樣,說明證書沒被篡改
    • 簽名能夠用ca公鑰正確解密,說明是用ca私鑰加密的,即證書是ca頒發的

    結論,證書是可信的,那麼證書上的內容,尤爲是服務商的公鑰是可信的。就好像,畢業證上學校公章是可信的,那麼能夠相信這個學生的學歷是可信的。網絡

動態加載證書

大多數時候,本地只要有經常使用的ca根證書,便可驗證大部分服務商。證書被驗證可信後,瀏覽器或操做系統會將證書存儲在本地(證書有效期內),當用戶在瀏覽器中鍵入https地址時,直接開始同服務端商定對稱算法和密鑰,從而省去證書的獲取和驗證過程。ssh

可是,當服務商證書不在Java 的 cacerts 文件中,或者沒法經過ca證書鏈式推導,咱們也能夠手動添加。工具

  1. 12306之類的網站,證書基本可信,但不是向ca申請的
  2. 內部通訊,證書本身生成,本身確承認信

添加方式

  1. 使用java keytool工具添加。有時候不具有權限,或要添加的機器過多
  2. 程序加載。這就是一些應用在使用時,要指定證書地址的緣故了。應用做爲客戶端,直接加載服務端證書,以省去證書驗證過程。

證書的存儲

瀏覽器保存了一個經常使用的 CA 證書列表,與此相似的,操做系統也同樣保存有一份可信的證書列表。

證書的格式

CA 在發佈證書時,經常使用 PEM 格式,這種格式的好處是純文本,內容是 BASE64 編碼的,另外還有比較經常使用的二進制 DER 格式,在 Windows 平臺上較常使用的 PKCS#12 格式等等。固然,不一樣格式的證書之間是能夠相互轉換的。

在 Java 平臺下,證書經常被存儲在 KeyStore 文件中,上面說的 cacerts 文件就是一個 KeyStore 文件(KeyStore 只是一種文件格式,java中使用keyStore文件存儲加密相關的數據,證書是其中一種)。存儲在 KeyStore 文件中的對象有三種類型:Certificate、PrivateKey 和 SecretKey 。

  1. Certificate 就是證書,
  2. PrivateKey 是非對稱加密中的私鑰,
  3. SecretKey 用於對稱加密,是對稱加密中的密鑰。

KeyStore 文件根據用途,也有不少種不一樣的格式:JKS、JCEKS、PKCS十二、DKS 等等。

java中的keyStore文件根據用途,分爲兩類:keyStore、TrustStore,對應兩個類 KeyManager 和 TrustManager。前者負責管理本身的私鑰等數據,後者負責存儲一些可信任的證書。能夠想見,若是咱們改寫 TrustManager 類,讓其不管什麼時候都返回true,便可繞過對證書的驗證。

製做證書

  文件後綴 備註
證書籤名請求(Certificate signing request) *.csr 包含域名、國家、城市、公司、郵箱等信息
私鑰(Private Key) *.key  
證書(Certificate) *.cer ,*.crt CA 使用其私鑰對 csr簽名生成crt

至於pem和der(少見)是編碼方式,以上三類(Cert,Key,CSR)都可以使用這兩種編碼方式。

  1. *.pem - base64編碼
  2. *.der - 二進制編碼

基於OpenSSL自建CA和頒發SSL證書

假設本身的nginx 對外提供https支持

  1. 自建ca 或第三方ca 機構
  2. 在nginx 機器上 建立一對兒rsa密鑰(key文件);生成證書請求(csr文件)
  3. 將csr文件發送到ca服務器(第三方ca機構),獲得nginx crt證書(crt或pem後綴)
  4. 訪問nginx 的客戶端持有ca 根crt證書,持有或獲取 nginx 的crt 證書,便可與nginx 進行https通信。

ca和pki

因此呢,有一個PKI(Public Key Infrastructure)的概念,中文稱做公鑰基礎設施。它提供公鑰加密和數字簽名服務的系統或平臺,好比ca系統,瀏覽器和操做系統內置一些經常使用ca證書。經過協議和機制的約定,實現公鑰的可信分發,進而創建起一個安全的網絡環境。而數字證書最多見的格式是 X.509 ,因此這種公鑰基礎設施又稱之爲 PKIX 。

而在大公司內部,一般會創建私有的ca和pki體系。

安全應用

ssh

SSH原理與運用(一):遠程登陸

密碼登錄

若是嫌每次登錄輸密碼麻煩,能夠公鑰登錄

https

SSL/TLS 四次握手

總結一下https設計到的一些加密知識

  1. 哈希,將任意長度的數據轉化爲固定長度的,驗證數據是否被篡改
  2. 對稱加密,加密和解密使用同一個密鑰,對稱加密的優勢是速度快,缺點是密鑰管理不方便,必須共享密鑰
  3. 非對稱加密,缺點是速度慢,優勢是雙方無需共享同一個密鑰,密鑰管理很方便
  4. 數字證書,提供可信的服務商公鑰

其它

上文提到的都是單向非對稱加密,對於安全性很高的場景(好比網銀), 不只客戶端要驗證服務端的合法性,服務端也要驗證每一個訪問的客戶端的合法性,對於這種場景,每每給每一個用戶發一個U盤,裏面裝的就是客戶端的公鑰和私鑰對,用於雙向非對稱加密。

 

相關閱讀

SSL證書哪裏買

相關文章
相關標籤/搜索