X.509是一種很是通用的證書格式。全部的證書都符合ITU-T X.509國際標準,所以(理論上)爲一種應用建立的證書能夠用於任何其餘符合X.509標準的應用。算法
在一份證書中,必須證實公鑰及其全部者的姓名是一致的。對X.509證書來講,認證者老是CA或由CA指定的人,一份X.509證書是一些標準字段的集合,這些字段包含有關用戶或設備及其相應公鑰的信息。X.509標準定義了證書中應該包含哪些信息,並描述了這些信息是如何編碼的(即數據格式)安全
全部的X.509證書包含如下數據:數據結構
一、X.509版本號:指出該證書使用了哪一種版本的X.509標準,版本號會影響證書中的一些特定信息。目前的版本是3。ui
二、證書持有人的公鑰:包括證書持有人的公鑰、算法(指明密鑰屬於哪一種密碼系統)的標識符和其餘相關的密鑰參數。編碼
三、證書的序列號:由CA給予每個證書分配的惟一的數字型編號,當證書被取消時,其實是將此證書序列號放入由CA簽發的CRL(Certificate Revocation List證書做廢表,或證書黑名單表)中。這也是序列號惟一的緣由。加密
五、證書的有效期:證書起始日期和時間以及終止日期和時間;指明證書在這兩個時間內有效。spa
6、認證機構:證書發佈者,是簽發該證書的實體惟一的CA的X.500名字。使用該證書意味着信任簽發證書的實體。(注意:在某些狀況下,好比根或頂級CA證書,發佈者本身簽發證書)blog
7、發佈者的數字簽名:這是使用發佈者私鑰生成的簽名,以確保這個證書在發放以後沒有被撰改過。ci
8、簽名算法標識符:用來指定CA簽署證書時所使用的簽名算法。算法標識符用來指定CA簽發證書時所使用的公開密鑰算法和HASH算法。it
RSA算法基於一個十分簡單的數論事實:將兩個大質數相乘十分容易,可是想要對其乘積進行因式分解卻極其困難,所以能夠將乘積公開做爲加密密鑰。
當咱們在進行通訊的時候,經常須要在C/S兩端分配一個會話密鑰,而後利用對稱密碼算法對通訊的數據加密,固然了,也可使用非對稱加密算法,可是非對稱加密會使加密速度下降了一個數量級,所以並不適用。那麼如何安全的在不安全的信道中分發會話密鑰呢?
有兩種方式,一種使用共享密鑰機制,這樣的協議不少,好比D-H密鑰分配協議、kerberos認證協議等等。可是使用共享密鑰進行會話密鑰的分發很麻煩,並且還有各類漏洞。做爲工程人員,咱們固然不但願進行復雜的屢次協商才能完成認證的工做。
那麼使用公開密鑰機制就能夠完成這個工做了。
一、首先A獲取B的公鑰Eb,而後A隨機選擇一個隨機數Ra,而後將Eb(A,Ra)發送給B。
二、B獲取到數據以後,利用本身的私鑰解密出結果爲A,Ra,而後B獲取A的公鑰Ea,而後B選擇一個會話密鑰Ks和一個隨機數Rb並將數據Ea(Ra,Ks,Rb)發送給A。
三、A在收到數據以後,使用本身私鑰後發現有Ra,這個數據是剛剛發給B的,Ra除了B不可能有任何知道,由於只有B才能解密。因此A肯定他對面確定是B,可是這時候B並不肯定對面是否是A,仍是H,由於H能夠宣稱本身是A,因此最好的驗證方法是B肯定A確定可以解密發送給A的數據。
四、因而A 在上面收到數據以後,解密以後發現有Rb,和Ks,此時將數據Ks(Rb)發送給B。固然了,此時,B確定知道它對面通訊的是A了,因而這樣就完成了相互認證,並分發共享密鑰的操做。
那麼爲何最後一步不是Eb(Rb),而要Ks(Rb)呢?我我的認爲主要有兩點:一、Eb是公開的,前者的隨機性至關於只有Rb來保證,然後者Ks和Rb只有A纔會知道,因此隨機性更大;二、仍是同樣,對稱密碼算法速度會更快