X.509,RSA,PKCS 普及

X.509

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證書做廢表,或證書黑名單表)中。這也是序列號惟一的緣由。加密

四、主題信息:證書持有人惟一的標識符(或稱DN-distinguished name)這個名字在 Internet上應該是惟一的。DN由許多部分組成,看起來象這樣:
CN=Bob Allen, OU=Total Network Security Division
O=Network Associates, Inc.
C=US
這些信息指出該科目的通用名、組織單位、組織和國家或者證書持有人的姓名、服務處所等信息。

五、證書的有效期:證書起始日期和時間以及終止日期和時間;指明證書在這兩個時間內有效。spa

6認證機構:證書發佈者,是簽發該證書的實體惟一的CAX.500名字。使用該證書意味着信任簽發證書的實體。(注意:在某些狀況下,好比根或頂級CA證書,發佈者本身簽發證書)blog

7發佈者的數字簽名:這是使用發佈者私鑰生成的簽名,以確保這個證書在發放以後沒有被撰改過。ci

8簽名算法標識符:用來指定CA簽署證書時所使用的簽名算法。算法標識符用來指定CA簽發證書時所使用的公開密鑰算法和HASH算法。it

 

證書結構

 

X.509 v3證書數據結構以下:

 

Certificate證書

 

Version 版本

 

Serial Number序列號

 

Algorithm ID 算法標識

 

Issuer 頒發者

 

Validity 有效期

 

Not Before 有效起始日期

 

Not After 有效終止日期

 

Subject 使用者

 

Subject Public Key Info 使用者公鑰信息

 

Public Key Algorithm公鑰算法

 

Subject Public Key公鑰

 

Issuer Unique Identifier (Optional) 頒發者惟一標識

 

Subject Unique Identifier (Optional) 使用者惟一標識

 

Extensions (Optional) 擴展

 

Certificate Signature Algorithm 證書籤名算法

 

Certificate Signature 證書籤名

擴展文件

.cer, .crt - 一般被用於二進制的DER文件格式(同於.der), 不過也被用於Base64編碼的文件 (例如 .pem).
.P7B - 同於 .p7c
.P7C - PKCS#7證書格式,僅僅包含證書和CRL列表信息,沒有私鑰。
.PFX - 同於 .p12
.P12 -PKCS#12文件, 包含證書(公鑰)和私鑰(受密碼保護),已經完整的證書鏈信。
PKCS#7 是一種將數據加密和簽名(正式名稱是「enveloping」)的技術標準。 它描述數字證書的語法和其餘加密消息——尤爲是,數據加密和數字簽名的方法,也包含了算法。但PKCS#7不包含私鑰信息。
PKCS#12 定義了一個用於保存私鑰和對應公鑰證書的文件格式,並由對稱密鑰加密保護。PKCS#12一般採用PFX,P12做爲文件擴展名。 PKCS#12文件能夠存放多個證書,並由密碼保護,一般用於WINDOWS IIS,也可以被看成Java Keysotre文件使用,用於Tomcat,Resign,Weblogic,Jboss等,不能被用於Apache.
 

RSA算法

RSA算法基於一個十分簡單的數論事實:將兩個大質數相乘十分容易,可是想要對其乘積進行因式分解卻極其困難,所以能夠將乘積公開做爲加密密鑰。

RSA公開密鑰密碼體制。所謂的公開密鑰密碼體制就是使用不一樣的加密密鑰與解密密鑰,是一種「由已知加密密鑰推導出解密密鑰在計算上是不可行的」密碼體制。
 
在公開密鑰密碼體制中,加密密鑰(即公開密鑰)PK是公開信息,而解密密鑰(即祕密密鑰)SK是須要保密的。加密算法E和解密算法D也都是公開的。雖然解密密鑰SK是由公開密鑰PK決定的,但卻不能根據PK計算出SK。
 

會話密鑰

當咱們在進行通訊的時候,經常須要在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纔會知道,因此隨機性更大;二、仍是同樣,對稱密碼算法速度會更快

相關文章
相關標籤/搜索