Terry.Li-彬

          虛其心,可解天下之問;專其心,可治天下之學;靜其心,可悟天下之理;恒其心,可成天下之業。

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            143 隨筆 :: 344 文章 :: 130 評論 :: 0 Trackbacks
          上次我們講到如何生成密鑰對,以及如何將諸如公鑰,私鑰,證書等這一類安全對象在文件系統和內存之間來回轉換.這些是準備開CA的基本功,今天我們講一下CA的基本原理以及如何使用主體名稱結構DN(Distinguish Name)來表示每一個證書中的主體.

              一份證書就是一個權威機構對一個主體的身份的確認的證明.即一份證書表示一個權威機構確認了一個主體就是它自己,而不是其它的冒名頂替者.主體可以是一個 個人,也可以不是,例如,在需要安全服務的時候,需要為一臺網站的服務器頒發證書,這種證書的主體就是一臺服務器.簽署證書的權威機構就叫做CA,該權威 機構本身也是一個主體.權威機構通過對包含有待認證的主體的一系列信息的待簽名證書"(TBS,to be signed)進行數字簽名來表示該機構對它的認可.一份包含了待認證的主體的相關信息的TBS再加上CA使用自己的私鑰進行簽名產生的字節流放在一起, 就構成了一份標準的X509證書.

              一個TBS中包含了以下這些主要信息:

              證書的版本,通常是3(X509v3)

              證書的序列號,RFC3280中規定,每個CA必須確保它頒發的每一份證書的序列號都是唯一的,并且序列號只能使用非負整數.

              簽發者(CA)的主體名稱,一個DN對象.

              證書的有效期,表示方法是兩個時間值,表示了該證書從何時開始生效,何時開始作廢.

              待認證的主體的主體名稱,也是一個DN對象.

              待認證的主體的公鑰,任何安全應用在確認完證書的有效性后,就可以開始使用該主體的公鑰與之進行安全通信.

              如果是X509v3證書,即版本號是3的話,后面還有一個證書擴展信息字段,可以在證書里面添加一些其它的信息.

              下面我們來看一下表示主體的主體名稱結構:DN.這個結就構是一個屬性的集合.每個屬性有屬性名稱和屬性值.它的作用就是用來表示"我是誰",也就是說,這個證書到底是誰頒發給誰的,這個證書對應的公鑰是誰擁有的.

              通常使用一個字符串來表示DN結構,這種字符串說明了這種結構中的各個屬性的類型和值:

              C=CN;S=BeiJing;L=BeiJing;O=PKU;OU=ICST;CN=wolfenstein

              這里C是國家和地區代碼,S和L都是地區代碼,S相當于省或者州這樣的級別,L相當于城市級別,O是組織機構名稱,OU是次級組織機構名稱,CN是主體的 通用名(common name).在這里,C,S,L等等屬性的類型都是相對固定的,例如C一般就是用來表示國家和地區代碼,在DN結構中還可以添加一些其它類型的信息,一般 也都是以"xxx=xxx"這樣來表示的.

              下面我們來說明如何在Java語言中構造出一個主體名稱對象.

              BC Provider中使用X509Name對象來表示DN,構造一個X509Name的步驟大體如下:

              先構造兩個vector對象,用來表示屬性名稱和屬性值:

              Vector oids = new Vector();
              Vector attributes = new Vector();

              然后在oids這個用來表示屬性名稱的vector對象中將屬性名稱一個一個添加進去:

              oids.addElement(X509Name.C);

              ......

              oids.addElement(X509Name.CN);

              X509Name對象里面有若干常量,例如上面的X509Name.C.還有X509Name.ST等等,都可以和上面舉的例子對應起來.

              然后將屬性值添加到attributes對象中:

              attributes.addElement("CN");

              ......

              attributes.addElement("Wolfenstein");

              最后就可以構造出一個X509Name對象:

              X509Name SubjectDN = new X509Name(oids, attributes);

              這樣,我們的主體名稱結構就確立起來了.

              下次我們就可以講關鍵的部分了,那就是如何用Java程序完成CA最重要的功能,簽署證書.

          posted on 2008-02-13 22:12 禮物 閱讀(1420) 評論(0)  編輯  收藏 所屬分類: CA
          主站蜘蛛池模板: 抚顺市| 山阴县| 扎赉特旗| 白银市| 青冈县| 绍兴县| 南乐县| 玉树县| 宁阳县| 乃东县| 舒兰市| 白水县| 咸阳市| 镇巴县| 都匀市| 会同县| 布拖县| 茶陵县| 建阳市| 南和县| 高清| 同仁县| 永安市| 台中市| 灵台县| 漳州市| 尖扎县| 沙洋县| 抚宁县| 利川市| 鄂托克前旗| 馆陶县| 株洲市| 当雄县| 房山区| 泰安市| 广东省| 南郑县| 福贡县| 城口县| 历史|